Не могу понять как отсортировать массив структур по убыванию, попробовал несколько алгоритмов,но не получается....программа должна выводить ведомость о посещении студентов, отсортированную по убыванию относительно рейтинга посещаемости.
Код:
#include "stdafx.h"
#include <iostream>
#include <iomanip>
#include <algorithm>
#include <list>
using namespace std;
struct Student
{
char Name[20]; // Имя
double Propusk; // Пропуск
int Uvagit; // Уважительный пропуск
double Vpropusk; //Пропуск в ведомость
double Procprop; //Процент пропусков
bool operator < ( const Student a )
{
return Procprop < a.Procprop;
}
};
typedef list<Student> entry;
int main()
{
int n;
entry elist;
double s1,s2,s3;
setlocale(0,"rus");
cout<<"Формирование записи"<<endl;
cout<<"Введите количество студентов";
cin>>n;
Student *zapis=new Student [n];
cout <<"Документ должен сожержать "<<n<< " строки - записи: \n";
for( int i=0; i < n; i++)
{
cout << "\nФормирование " << i + 1 << " записи";
cout << "\nВведите имя студента(не более 20 символов: ";
cin >> zapis[i].Name; // Доступ к элементу а экземпляра структуры zapis[i]
// выполняется операцией точка (.)
cout << "\nУкажите число пропущенных часов студентом(целое число) : \n";
cin >> zapis[i].Propusk; // Доступ к элементу t экземпляра структуры zapis[i]
cout << "\nУкажите число пропущенных часов студентом по уважительной причине(целое число) : \n";
cin >> zapis[i].Uvagit; // Доступ к элементу k экземпляра структуры zapis[i]
}
// Выполнение расчетов:
s1=0;s2=0;s3=0;
for(int i=0; i < n; i++)
{
zapis[i].Vpropusk=zapis[i].Propusk-zapis[i].Uvagit;
zapis[i].Procprop=(zapis[i].Vpropusk/zapis[i].Propusk)*100;
s1 += zapis[i].Propusk;
s2 += zapis[i].Uvagit;
s3 += zapis[i].Vpropusk;
}
// Построение "шапки" таблицы
system("cls"),
cout << "\n Ведомость посещения занятий студентами: ";
cout <<endl<<"|------------------------------------------------------------------------------|";
cout <<endl<<"|n|Фамилия |Пропусков|Уважительный пропусков|Пропус в ведом. |Проц. проп.|";
cout <<endl<<"|------------------------------------------------------------------------------|";
// Заполнение таблицы данными:
for(int i=0;i<n;i++)
cout << "\n|" << setw(1) << i+1 << "|" << setw(12) << zapis[i].Name << "|"
<< setw(9) << setprecision(3) << zapis[i].Propusk << "|"
<< setw(22) << setprecision(3)<< zapis[i].Uvagit << "|"
<< setw(17) << setprecision(3)<< zapis[i].Vpropusk <<"|"
<< setw(12) << setprecision(3)<<zapis[i].Procprop << "|";
cout <<endl<< "|------------------------------------------------------------------------------| ";
cout <<endl<< "|ИТОГ:" << setw(19) << setprecision(3) << s1
<< "|" << setw(22) << setprecision(3) << s2<< "|" <<setw(17) << setprecision(3) << s3 << "|"
<< setw(13) << setprecision(3) << "|";
cout << "\n|------------------------------------------------------------------------------|"<<endl;
system("pause");
return 0;
}