Добавил:
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:

2 семестр / Лабораторная работа №2

.docx
Скачиваний:
1
Добавлен:
16.05.2023
Размер:
455.34 Кб
Скачать

ФГБОУ ВО

«Уфимский государственный авиационный технический университет»

Кафедра ТК

ОТЧЕТ

по лабораторной работе № 2

по дисциплине «Программирование»

Вариант № 18

Выполнил: студент гр. ИВТ-127Б

Проверил: доцент каф. ТК

Фёдорова Н. И.

Уфа 2022

Тема работы: Структуры. Массивы структур.

Цель работы:

Целью работы является получение студентами навыков работы со структурами и массивами структур в С++.

Задачи работы:

  • составить схему алгоритма работы программы;

  • написание программы на языке С++ с использованием структур;

  • тестирование работоспособности программы для различных исходных данных.

Вариант № 18.

Задание:

Дан массив записей, содержащий сведения о студентах группы: фамилия и инициалы студента; дата рождения (число, месяц, год). Найти и вывести на экран самого молодого студента, родившегося k-го числа.

Решение задачи: Суть задачи в использовании структур. Необходимо задать массив структур, содержащий информацию об студентах, причем вход данных осуществляется с клавиатуры. Далее пользователь вводит число k (дату рождения), программа сортирует массив по месяцу (по возрастанию), и выводит самого молодого студента, родившегося в k день.

Текст программы:

#include <iostream>

#include <windows.h>

#include<conio.h>

#include <iomanip>

using namespace std;

struct date

{

int d, m, y;

};

struct fio

{

string name;

string iniz;

};

struct students

{

date birth;

fio fam;

};

void input( students* student, int n) {

string iniz;

for (int i = 0; i < n; i++)

{

cout << "Фамилия студента: ";

cin >> student[i].fam.name>>iniz;

student[i].fam.name=student[i].fam.name+" "+iniz;

cout << "Дата рождения:\nДень - ";

cin >> student[i].birth.d;

cout << "Месяц - ";

cin >> student[i].birth.m;

cout << "Год - ";

cin >> student[i].birth.y;

}

}

void FindStudent(students* a, int k,int n, students* findst) {

for (int i = 0; i < n; i++) {

if (a[i].birth.d == k) {

findst[i] = a[i];

break;

}

}

}

void sortMes(students* a, int n)

{

int i, fl;

students t;

do

{

fl = 0; n--;

for (i = 0; i < n; i++) {

if (a[i].birth.m < a[i + 1].birth.m)

{

t = a[i];

a[i] = a[i + 1];

a[i + 1] = t;

fl = 1;

}

}

} while (fl == 1);

}

void sortYear(students* a, int n)

{

int i, fl;

students t;

do

{

fl = 0; n--;

for (i = 0; i < n; i++) {

if (a[i].birth.y < a[i + 1].birth.y)

{

t = a[i];

a[i] = a[i + 1];

a[i + 1] = t;

fl = 1;

}

}

} while (fl == 1);

}

void show(students* student, int n)

{

int i = 0;

cout << " |---------------------------------------------------------|\n";

cout << " | | | Дата рождения |\n";

cout << " | № | Фамилия И.О |--------------------|\n";

cout << " | | | День | Месяц | Год |\n";

cout << " |---------------------------------------------------------|\n";

for (int i = 0; i < n; i++)

{

cout << " | " << left <<setw(3)<<i+1<<"|" <<setw(30) << student[i].fam.name << " | " << setw(2) << student[i].birth.d << " | " << setw(2) << student[i].birth.m << " |" << setw(4) << student[i].birth.y << " |\n";

}

cout << " |---------------------------------------------------------|\n";

}

int main() {

SetConsoleCP(1251);

SetConsoleOutputCP(1251);

int n = 0, j = 0, k, m = 1;

cout << "Программа позволяет осуществить поиск и вывод на экран самого молодого студента, родившегося k - го числа." << endl;

cout << endl << "Какое количество студентов будет записано в таблицу? " << endl;

cout << "Кол-во - ";

cin >> n;

cout << endl;

students findst[10];

students student[10];

input(student, n);

show(student, n);

sortYear(student, n);

sortMes(student, n);

cout << endl << "Введите число k. " << endl;

cout << "k = ";

cin >> k;

FindStudent(student, k, n, findst);

show(findst, m);

}

Схема алгоритма работы программы:

Тестовый пример:

Исходные данные:

Мустафина К. И. 03.06.1999

Алгушаева А. Т. 28.02.1999

Каримова З. И. 28.09.2004

k=28

Первая сортировка по году (по возрастанию):

Каримова З. И. 28.09.2004

Алгушаева А. Т. 28.02.1999

Мустафина К. И. 03.06.1999

Вторая сортировка по месяцу рождения (по возрастанию):

Каримова З. И. 28.09.2004

Мустафина К. И. 03.06.1999

Алгушаева А. Т. 28.02.1999

Проход по дате рождения, кто первый в массиве с датой рождения k, тот и является самым молодым.

Вывод программы: Каримова З. И. 28.09.2004

Вывод: В ходе выполнения работы были получены навыки работы со структурами в С++.