Перейти к основному содержанию
EDU-MMCS
  • В начало
  • Дополнительно
Вы используете гостевой доступ
Вход
В начало
  1. Prog_3
  2. Лабораторная работа 3. Структуры данных C++

Лабораторная работа 3. Структуры данных C++

Требуемые условия завершения
Открыто с: пятница, 26 сентября 2025, 00:00
Срок сдачи: пятница, 3 октября 2025, 00:00

Теоретическая часть

В C++ структура (struct) — это тип данных, объединяющий логически связанные данные разных типов (поля) в одну единицу. Перечисление (enum) — это тип данных, который позволяет задать ограниченный набор именованных целочисленных констант.

Пример объявления:

cpp
// Перечисление для дней недели
enum DayOfWeek {
    Monday = 1,
    Tuesday,
    Wednesday,
    Thursday,
    Friday,
    Saturday,
    Sunday
};

// Структура для хранения данных о студенте
struct Student {
    char name[50];   // Поле для имени
    int group;       // Поле для номера группы
    int grades[5];   // Поле для массива оценок (5 предметов)
    DayOfWeek examDay; // Поле типа "День недели"
};

Задание 1. 

  1. Объявите структуру Student по примеру выше.

  2. Напишите функцию void inputStudent(Student &s) для ввода данных об одном студенте с клавиатуры.

    • Для ввода дня недели (examDay) запросите у пользователя число от 1 до 7 и присвойте соответствующее значение из перечисления DayOfWeek.

  3. Напишите функцию void printStudent(const Student &s) для вывода данных о студенте на экран. Выводите название дня недели, а не его числовое значение (можно использовать switch или массив строк).

  4. В функции main() создайте массив из 3-5 элементов типа Student.

  5. Используя цикл, заполните массив данными, вызывая функцию inputStudent.

  6. Выведите на экран информацию о всех студентах, используя функцию printStudent.

Пример работы программы (запуск и ввод):

text
Введите имя студента 1: Иван Петров
Введите группу: 101
Введите 5 оценок через пробел: 5 4 5 3 5
Введите день экзамена (1-Пн, ..., 7-Вс): 3

... (ввод остальных студентов)

Список студентов:
Имя: Иван Петров, Группа: 101, Оценки: 5 4 5 3 5, День экзамена: Среда
...

Задание 2

Добавьте функционал в программу из базового задания.

  1. Напишите функцию float calculateAverage(const Student &s), которая вычисляет средний балл одного студента по его пяти оценкам.

  2. Напишите функцию void findBestStudent(const Student students[], int size), которая находит и выводит на экран студента с самым высоким средним баллом. Если таких несколько, выведите первого.

  3. Напишите функцию void sortStudentsByName(Student students[], int size), которая сортирует массив студентов по алфавиту (по полю name). 

  4. В функции main() после вывода списка вызовите новые функции:

    • Выведите средний балл для каждого студента.

    • Найдите и выведите лучшего студента.

    • Отсортируйте массив и выведите отсортированный список.

Задание 3

Создайте программу для каталогизации книг в библиотеке.

  1. Объявите перечисление Genre (Жанр) с как минимум 5 вариантами (например, Фантастика, Детектив, Роман, Научная литература, Поэзия).

  2. Объявите структуру Book, которая содержит следующие поля:

    • Название книги (char title[100] или std::string title)

    • Автор (char author[50])

    • Год издания (int year)

    • Жанр (Genre genre)

  3. Реализуйте необходимые функции:

    • void inputBook(Book &b)

    • void printBook(const Book &b)

  4. В функции main() создайте массив из 4-5 книг. Заполните массив данными (можно частично инициализировать в коде, а не вводить с клавиатуры, для экономии времени).

  5. Реализуйте меню для пользователя:

    text
    1. Показать все книги
    2. Показать книги определенного жанра (запросить у пользователя номер жанра)
    3. Показать книги, изданные после определенного года (запросить год у пользователя)
    4. Выход

    Программа должна работать в цикле, пока пользователь не выберет пункт "Выход".


Вы используете гостевой доступ (Вход)
Сводка хранения данных
Скачать мобильное приложение Яндекс.Метрика
На платформе Moodle