Информатика, вопрос задал Hyenanasty , 1 год назад

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

Не знаю как организовать сортировку по среднему баллу студентов и вывести отсортированный файл. Буду признателен, если кто поможет.

Ответы на вопрос

Ответил M0hlik
1

Чтобы отсортировать файл по среднему баллу каждого учащегося, вы можете использовать структуру данных, например вектор или массив, для хранения информации о каждом учащемся. Вы можете создать структуру или класс для представления каждого учащегося, который будет содержать номер книги, имя и список их оценок.

После того, как вы прочитали все данные из файла и сохранили их в своей структуре данных, вы можете использовать функцию сортировки из библиотеки алгоритмов для сортировки учащихся по их среднему баллу. Функция сортировки принимает в качестве аргумента функцию сравнения, которую можно использовать для указания критериев сортировки.

Вот пример того, как вы могли бы реализовать сортировку и печать отсортированного файла, используя вектор студенческих структур:



#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. Затем он сортирует вектор, используя функцию сортировки и функцию сравнения, которая сравнивает средние баллы учащихся. Наконец, он печатает отсортированный список студентов.

Обратите внимание, что этот код является всего лишь примером, и вам может потребоваться изменить его, чтобы он соответствовал вашим конкретным требованиям.

Новые вопросы