Создать файл, данными которого являются: номер зачетной книжки, ФИО студента, список из 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. Затем он сортирует вектор, используя функцию сортировки и функцию сравнения, которая сравнивает средние баллы учащихся. Наконец, он печатает отсортированный список студентов.
Обратите внимание, что этот код является всего лишь примером, и вам может потребоваться изменить его, чтобы он соответствовал вашим конкретным требованиям.