#include <iostream>
#include <string>
#include <fstream>
#include <vector>
#include <algorithm>
const int NVAL = 4; //! количество предметов
struct Stud { //! студент
int vals[NVAL]; //!< оценки студента:
//!< <оценка по матерматике> ... <истории>
std::string name; //!< имя студента
};
float rate(Stud& a) { //! функция расчета среднего балла
float t = 0.f;
for(int i = 0; i < NVAL; ++i)
t += a.vals[i];
return t / NVAL;
}
int main() {
std::ifstream ifst("input.txt"); // файл с данными о студенте, записанными в формате:
// <имя студента> <оценка по матерматике> ... <истории>
std::vector<Stud*> studs; // массив студентов (вектор - это почти массив, только
// его размер может увеличиваться во время выполнения
// и гарантируется что вектор будет уничтожен при выходе
// из области видимости {утечки памяти не будет})
while (0 == ifst.eof()) { // считываем студентов с файла
Stud *stud = new Stud; // один студент
ifst >> stud->name;
for (int i = 0; i < NVAL; ++i)
ifst >> stud->vals[i];
studs.push_back(stud);
}
ifst.close();
std::sort(studs.begin(), studs.end(), [](Stud* a, Stud *b) {
return rate(*a) < rate(*b);
});
for (std::vector<Stud*>::iterator it = studs.begin(); studs.end() != it; ++it) {
std::cout << (*it)->name;
for(int i = 0; i < NVAL; ++i)
std::cout << ' ' << (*it)->vals[i];
std::cout << std::endl;
}
// освобождаем память:
for (std::vector<Stud*>::iterator it = studs.begin(); studs.end() != it; ++it)
delete *it;
}