Создать файл, данными которого являются: номер зачетной книжки, ФИО студента, список из 5
предметов с оценками в сессии. Отсортировать файл по среднему баллу каждого студента в сессии
Есть кусок кода : #include
#include
#include
#include
#include
#include
using namespace std;
int main(){
setlocale(LC_ALL,"rus");
ifstream in("input.txt");
if (in.is_open())
{
int mark, k=0;
double avg=0., avg_student;
string book_num, surname, name, patronymic, sub;
while (in >> book_num >> surname >> name >> patronymic)
{
for(int i = 1; i <= 5; i++)
{
in >> sub >> mark;
avg+=mark;
}
k++;
}
avg/=5.*k;
cout << "average=" << avg << "\n";
in.clear();
in.seekg(0);
cout << "RESULT LIST:\n";
while (in >> book_num >> surname >> name >> patronymic)
{
avg_student=0;
for(int i = 1; i <= 5; i++)
{
in >> sub >> mark;
avg_student+=mark;
}
avg_student/=5.;
}
in.close();
}
else cout << "Unable to open file\n";
return 0;
}
Не знаю как организовать сортировку по среднему баллу студентов и вывести отсортированный файл. Буду признателен, если кто поможет.
Ответы на вопрос
Чтобы отсортировать файл по среднему баллу каждого учащегося, вы можете использовать структуру данных, например вектор или массив, для хранения информации о каждом учащемся. Вы можете создать структуру или класс для представления каждого учащегося, который будет содержать номер книги, имя и список их оценок.
После того, как вы прочитали все данные из файла и сохранили их в своей структуре данных, вы можете использовать функцию сортировки из библиотеки алгоритмов для сортировки учащихся по их среднему баллу. Функция сортировки принимает в качестве аргумента функцию сравнения, которую можно использовать для указания критериев сортировки.
Вот пример того, как вы могли бы реализовать сортировку и печать отсортированного файла, используя вектор студенческих структур:
#include <algorithm>
#include <iostream>
#include <fstream>
#include <string>
#include <vector>
using namespace std;
struct Student {
string book_num;
string surname;
string name;
string patronymic;
double avg_score;
};
bool compareStudents(const Student& s1, const Student& s2) {
return s1.avg_score > s2.avg_score;
}
int main() {
// Open the input file
ifstream in("input.txt");
// Vector to store the student information
vector<Student> students;
// Read the data from the file and store it in the vector
if (in.is_open()) {
string book_num, surname, name, patronymic, subject;
int mark;
while (in >> book_num >> surname >> name >> patronymic) {
Student s;
s.book_num = book_num;
s.surname = surname;
s.name = name;
s.patronymic = patronymic;
s.avg_score = 0;
for (int i = 1; i <= 5; i++) {
in >> subject >> mark;
s.avg_score += mark;
}
s.avg_score /= 5;
students.push_back(s);
}
in.close();
} else {
cout << "Unable to open file\n";
return 0;
}
// Sort the students by their average score
sort(students.begin(), students.end(), compareStudents);
// Print the sorted list of students
cout << "SORTED RESULT LIST:\n";
for (const Student& s : students) {
cout << s.book_num << " " << s.surname << " " << s.name << " "
<< s.patronymic << " " << s.avg_score << "\n";
}
return 0;
}
Этот код считывает данные из входного файла и сохраняет их в векторе структур Student. Затем он сортирует вектор, используя функцию сортировки и функцию сравнения, которая сравнивает средние баллы учащихся. Наконец, он печатает отсортированный список студентов.
Обратите внимание, что этот код является всего лишь примером, и вам может потребоваться изменить его, чтобы он соответствовал вашим конкретным требованиям.