2 семестр / Лабораторная работа №2
.docxФГБОУ ВО
«Уфимский государственный авиационный технический университет»
Кафедра ТК
ОТЧЕТ
по лабораторной работе № 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
Вывод: В ходе выполнения работы были получены навыки работы со структурами в С++.