Цель работы: Научиться объявлять, инициализировать и эффективно использовать пользовательские типы данных — структуры (struct) — для объединения логически связанных данных разных типов, а также применять массивы структур и указатели на структуры в языке программирования C++.
Структура в C++ — это пользовательский тип данных, который позволяет объединить логически связанные переменные (члены структуры) разных типов под одним именем. Это позволяет работать с группой данных как с единым целым.
Очень часто структуры используются для создания массивов структур, что позволяет хранить набор однотипных записей (например, список студентов, товаров или книг).
// Объявление массива из 3-х студентов
Student group[3] = {
{"Petrov Petr", 1002, 4.2, true},
{"Sidorova Anna", 1003, 5.0, false},
{"Kuznetsov Alex", 1004, 3.9, true}
};
// Доступ к члену структуры во втором элементе массива (индекс 1)
Указатели на структуры используются для динамического выделения памяти или для передачи структур в функции по ссылке. Для доступа к членам структуры через указатель используется оператор стрелки (->).
// Объявление указателя на структуру Student
Student s2 = {"Dmitriev Oleg", 1005, 4.1, true};
Student* ptr_s2 =&s2;
// Доступ к членам через указатель
printf("ID через указатель: %d\n", (*ptr_s2).studentID); // Использование оператора точки с разыменованием
printf("Имя через оператор стрелки: %s\n", ptr_s2->name); // Предпочтительный способ
Выбор варианта: Номер варианта соответствует порядковому номеру студента в списке группы. Если количество студентов превышает 15, варианты повторяются по кругу (например, 16-й студент выполняет Вариант 1, 17-й - Вариант 2 и т.д.).
Объявите структуру Point с членами x и y (целые числа). Создайте две переменные типа Point и вычислите расстояние между ними по формуле $\sqrt{(x_2-x_1)^2 + (y_2-y_1)^2}$.
2
Массив структур
Объявите структуру Book (название, автор, год издания). Создайте массив из 5 книг. Реализуйте функцию для поиска книги по названию и вывода информации о ней.
3
Сложная структура
Объявите структуру Student (ФИО, номер зачетки, массив из 5 оценок). Создайте массив из 3-х студентов. Найдите студента с самым высоким средним баллом.
Объявите структуру Date (день, месяц, год). Создайте переменную типа Date и реализуйте функцию для проверки, является ли год високосным.
2
Массив структур
Объявите структуру Car (марка, модель, год выпуска). Создайте массив из 5 автомобилей. Реализуйте функцию для подсчета количества автомобилей, выпущенных после заданного года.
3
Сложная структура
Объявите структуру Employee (ФИО, должность, зарплата). Создайте массив из 4-х сотрудников. Найдите сотрудника с самой высокой зарплатой в заданной должности.
Объявите структуру RGBColor (красный, зеленый, синий — целые числа от 0 до 255). Создайте две переменные и реализуйте функцию для вычисления “среднего” цвета (среднее арифметическое каждого компонента).
2
Массив структур
Объявите структуру Movie (название, режиссер, рейтинг от 1 до 10). Создайте массив из 5 фильмов. Реализуйте функцию для вывода списка фильмов с рейтингом выше заданного значения.
3
Сложная структура
Объявите структуру Vector3D (x, y, z). Создайте массив из 3-х векторов. Реализуйте функцию для вычисления скалярного произведения двух векторов.
Объявите структуру Circle (центр Point, радиус). Создайте переменную типа Circle и реализуйте функцию для вычисления ее площади.
2
Массив структур
Объявите структуру Athlete (ФИО, вид спорта, лучший результат). Создайте массив из 5 спортсменов. Отсортируйте массив по лучшему результату в порядке убывания для заданного вида спорта.
3
Сложная структура
Объявите структуру Complex (действительная часть, мнимая часть). Создайте массив из 3-х комплексных чисел. Реализуйте функцию для умножения двух комплексных чисел.
Объявите структуру Vector2D (x, y). Реализуйте функцию для вычисления длины (модуля) вектора.
2
Массив структур
Объявите структуру Recipe (название, время приготовления в минутах). Создайте массив из 5 рецептов. Найдите рецепт с минимальным временем приготовления.
3
Сложная структура
Объявите структуру Passport (номер, ФИО, дата рождения Date). Создайте массив из 4-х паспортов. Реализуйте функцию для поиска паспорта по дате рождения.
Объявите структуру Temperature (значение, шкала: ‘C’ или ‘F’). Реализуйте функцию для перевода температуры из Цельсия в Фаренгейт и наоборот.
2
Массив структур
Объявите структуру Song (название, исполнитель, длительность в секундах). Создайте массив из 5 песен. Подсчитайте общую длительность всех песен в массиве.
3
Сложная структура
Объявите структуру LineSegment (начальная точка Point, конечная точка Point). Реализуйте функцию для проверки, является ли отрезок горизонтальным или вертикальным.
Объявите структуру Money (рубли, копейки). Реализуйте функцию для вывода денежной суммы в формате “РР руб. КК коп.”.
2
Массив структур
Объявите структуру Country (название, столица, площадь). Создайте массив из 4-х стран. Отсортируйте массив по площади в порядке возрастания.
3
Сложная структура
Объявите структуру InventoryItem (название, количество, цена за единицу). Создайте массив из 5 товаров. Вычислите общую стоимость всех товаров на складе.
Объявите структуру Box (длина, ширина, высота). Вычислите объем и площадь поверхности заданного параллелепипеда.
2
Массив структур
Объявите структуру Flight (номер рейса, город отправления, город прибытия). Создайте массив из 5 рейсов. Реализуйте функцию для поиска всех рейсов, прибывающих в заданный город.
3
Сложная структура
Объявите структуру Polynomial (коэффициенты, степень). Создайте массив из 3-х полиномов. Реализуйте функцию для сложения двух полиномов.
Объявите структуру Address (улица, дом, квартира). Реализуйте функцию для форматированного вывода адреса.
2
Массив структур
Объявите структуру WeatherDay (дата Date, минимальная температура, максимальная температура). Создайте массив из 7 дней. Найдите день с самой большой разницей между минимальной и максимальной температурой.
3
Сложная структура
Объявите структуру LibraryCard (номер, владелец Student). Создайте массив из 4-х карт. Реализуйте функцию для поиска владельца карты по ее номеру.
Объявите структуру Rectangle (длина, ширина). Реализуйте функцию для сравнения двух прямоугольников по площади.
2
Массив структур
Объявите структуру Player (имя, очки). Создайте массив из 6 игроков. Отсортируйте массив по очкам в порядке убывания.
3
Сложная структура
Объявите структуру BankAccount (номер счета, ФИО владельца, баланс). Создайте массив из 3-х счетов. Реализуйте функцию для перевода средств с одного счета на другой.
Объявите структуру Vector2D (x, y). Реализуйте функцию для вычисления угла между двумя заданными векторами.
2
Массив структур
Объявите структуру Student (ФИО, группа). Создайте массив из 7 студентов. Отсортируйте массив по номеру группы, а студентов внутри группы — по алфавиту.
3
Сложная структура
Объявите структуру Book (название, автор, год издания, цена). Создайте массив из 5 книг. Найдите самую дорогую книгу, выпущенную после 2010 года.