Загрузка данных


#include <iostream>
#include <string>
#include <array>
#include <iomanip>
#include <algorithm>

using namespace std;

// Структура студента
struct Student {
    string fullName;             // ФИО
    int groupNumber;             // Номер группы
    array<int, 5> grades;        // 5 оценок
    double averageGrade;         // Средний балл
    bool isScholarship;          // Получает ли стипендию
};

// Функция расчёта среднего балла
void calculateAverage(Student& student) {
    int sum = 0;

    for (int grade : student.grades) {
        sum += grade;
    }

    student.averageGrade = static_cast<double>(sum) / student.grades.size();

    // Стипендия при среднем балле >= 4.5
    student.isScholarship = student.averageGrade >= 4.5;
}

// Функция вывода одного студента
void printStudent(const Student& student) {
    cout << left
         << setw(22) << student.fullName
         << setw(10) << student.groupNumber;

    for (int grade : student.grades) {
        cout << setw(4) << grade;
    }

    cout << setw(10) << fixed << setprecision(2)
         << student.averageGrade
         << setw(12)
         << (student.isScholarship ? "Да" : "Нет")
         << endl;
}

// Функция вывода всех студентов
void printStudents(const array<Student, 5>& students) {
    cout << left
         << setw(22) << "ФИО"
         << setw(10) << "Группа"
         << setw(4) << "О1"
         << setw(4) << "О2"
         << setw(4) << "О3"
         << setw(4) << "О4"
         << setw(4) << "О5"
         << setw(10) << "Средний"
         << setw(12) << "Стипендия"
         << endl;

    cout << string(100, '-') << endl;

    for (const Student& student : students) {
        printStudent(student);
    }
}

// Поиск студентов по номеру группы
void findByGroup(const array<Student, 5>& students, int group) {
    bool found = false;

    cout << "\nСтуденты группы " << group << ":\n";

    for (const Student& student : students) {
        if (student.groupNumber == group) {
            cout << " - " << student.fullName
                 << ", средний балл: "
                 << fixed << setprecision(2)
                 << student.averageGrade << endl;

            found = true;
        }
    }

    if (!found) {
        cout << "Студентов этой группы нет.\n";
    }
}

// Вывод студентов, получающих стипендию
void printScholarshipStudents(const array<Student, 5>& students) {
    cout << "\nСтуденты, получающие стипендию:\n";

    bool found = false;

    for (const Student& student : students) {
        if (student.isScholarship) {
            cout << " - " << student.fullName
                 << " (средний балл: "
                 << fixed << setprecision(2)
                 << student.averageGrade << ")\n";

            found = true;
        }
    }

    if (!found) {
        cout << "Таких студентов нет.\n";
    }
}

int main() {

    // Массив из 5 студентов
    array<Student, 5> students = {

        Student{"Иванов Иван Иванович", 101,
                {5, 5, 4, 5, 5}, 0, false},

        Student{"Петров Петр Петрович", 102,
                {4, 3, 4, 4, 3}, 0, false},

        Student{"Сидоров Алексей Сергеевич", 101,
                {5, 5, 5, 4, 5}, 0, false},

        Student{"Кузнецов Дмитрий Олегович", 103,
                {3, 4, 4, 3, 4}, 0, false},

        Student{"Смирнов Максим Андреевич", 102,
                {5, 4, 5, 5, 5}, 0, false}
    };

    // Расчёт среднего балла для каждого студента
    for (Student& student : students) {
        calculateAverage(student);
    }

    // Вывод исходного списка
    cout << "СПИСОК СТУДЕНТОВ\n";
    cout << "================\n";
    printStudents(students);

    // Поиск по номеру группы
    int group;
    cout << "\nВведите номер группы для поиска: ";
    cin >> group;

    findByGroup(students, group);

    // Список стипендиатов
    printScholarshipStudents(students);

    // Сортировка по среднему баллу от большего к меньшему
    sort(students.begin(), students.end(),
         [](const Student& a, const Student& b) {
             return a.averageGrade > b.averageGrade;
         });

    // Вывод после сортировки
    cout << "\nСТУДЕНТЫ ПО СРЕДНЕМУ БАЛЛУ\n";
    cout << "==========================\n";
    printStudents(students);

    return 0;
}