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



Для сортировки студентов по среднему баллу можно использовать контейнер std::map
, где ключом будет являться средний балл, а значением - информация о студенте (номер зачетной книжки, ФИО). Затем можно пройти по отсортированному контейнеру и вывести данные в новый файл.
Вот пример, как можно модифицировать ваш код для сортировки и записи отсортированных данных в файл:
cpp#include <iostream>
#include <fstream>
#include <string>
#include <map>
#include <vector>
#include <algorithm>
using namespace std;
struct Student {
string book_num;
string surname;
string name;
string patronymic;
double avg;
Student(const string& book_num, const string& surname, const string& name, const string& patronymic, double avg)
: book_num(book_num), surname(surname), name(name), patronymic(patronymic), avg(avg)
{}
};
bool compareStudents(const Student& s1, const Student& s2) {
return s1.avg > s2.avg; // Сортировка по убыванию среднего балла
}
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;
vector<Student> students;
while (in >> book_num >> surname >> name >> patronymic) {
avg = 0;
for (int i = 1; i <= 5; i++) {
in >> sub >> mark;
avg += mark;
}
avg /= 5.0;
students.emplace_back(book_num, surname, name, patronymic, avg);
}
in.close();
sort(students.begin(), students.end(), compareStudents);
ofstream out("sorted_output.txt");
if (out.is_open()) {
for (const auto& student : students) {
out << "Номер зачетной книжки: " << student.book_num << endl;
out << "ФИО студента: " << student.surname << " " << student.name << " " << student.patronymic << endl;
out << "Средний балл: " << student.avg << endl;
out << endl;
}
out.close();
cout << "Файл успешно создан и заполнен отсортированными данными.\n";
}
else {
cout << "Не удалось открыть файл для записи.\n";
}
}
else {
cout << "Не удалось открыть входной файл.\n";
}
return 0;
}
После выполнения этого кода будет создан файл "sorted_output.txt", содержащий отсортированные данные студентов по среднему баллу. Каждый студент будет представлен в следующем формате:
phpНомер зачетной книжки: <номер зачетной книжки>
ФИО студента: <фамилия> <имя> <отчество>
Средни


Похожие вопросы


Топ вопросов за вчера в категории Информатика







Последние заданные вопросы в категории Информатика
-
Математика
-
Литература
-
Алгебра
-
Русский язык
-
Геометрия
-
Английский язык
-
Химия
-
Физика
-
Биология
-
Другие предметы
-
История
-
Обществознание
-
Окружающий мир
-
География
-
Українська мова
-
Информатика
-
Українська література
-
Қазақ тiлi
-
Экономика
-
Музыка
-
Право
-
Беларуская мова
-
Французский язык
-
Немецкий язык
-
МХК
-
ОБЖ
-
Психология
-
Физкультура и спорт
-
Астрономия
-
Кыргыз тили
-
Оʻzbek tili