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