Форум программистов, компьютерный форум, киберфорум
Nikolay K
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  

Лабораторная работа № 9

Запись от Nikolay K размещена 29.01.2020 в 06:41
Показов 2279 Комментарии 0

Лабораторная работа: 9.
Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
Файл: Lab09_YaP_2019_1S.pdf

Обратите внимание:
В файлах Source.cpp, Source.cs и *.pas помимо прочего, так же имеются примечания к программам с различными комментариями и пояснениями.
При оформлении программ в сети Интернет я их удаляю, чтобы не нагромождать эти программы и тем самым не затруднять их восприятие.


Язык: C++.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: x64.

Задание:
Описать структуру "время" (часы, минуты, секунды). Определить функцию "раньше" для проверки, предшествует ли время T1 времени T2 (в рамках суток).
Все функции, используемые в программах, должны иметь независимый интерфейс. Стандартные функции работы со стеком и очередью не использовать. Все функции, используемые в проекте должны содержаться в отдельном модуле.

Примечание:
Я сделал программу более функциональной: пользователю предоставлен выбор - вводить время самостоятельно или указать текущее время компьютера (так называемое локальное время системы).

ЛР № 9, задание № 5.1
1/8. Source.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 03.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. Описать структуру "время" (часы, минуты, секунды). Определить функцию "раньше" для проверки, предшествует ли время T1
 *     времени T2 (в рамках суток).
 *Все функции, используемые в программах, должны иметь независимый интерфейс. Стандартные функции работы со стеком и очередью не
 *     использовать. Все функции, используемые в проекте должны содержаться в отдельном модуле.
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN, COUT. //
#include "Header.h"
 
int main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0;
     TimeStruct *T1Struct = new TimeStruct;                          // Объявление T1STRUCT типа TIMESTRUCT. //
     TimeStruct *T2Struct = new TimeStruct;                          // Объявление T2STRUCT типа TIMESTRUCT. //
     void (*PointerOnFunction []) (TimeStruct*) = {T1UserFunction, T1AutoFunction, T2UserFunction, T2AutoFunction};
     printf ("1. Каким способом вы хотите ввести время T1?\n\n1) Самостоятельно..........................1\n2) Локальное время системы..."
          "..............2\n\nВаш выбор: ");
     cin >> Choice;
     if ((Choice < 1) || (Choice > 2)) {
          MessageFunction ();
     }
     (*PointerOnFunction [Choice - 1]) (T1Struct);
     printf ("\n\n2. Каким способом вы хотите ввести время T2?\n\n1) Самостоятельно..........................1\n2) Локальное время систем"
          "ы.................2\n\nВаш выбор: ");
     cin >> Choice;
     if ((Choice < 1) || (Choice > 2)) {
          MessageFunction ();
     }
     (*PointerOnFunction [Choice + 1]) (T2Struct);
     printf ("\n\n3. Время T1 времени T2: ");
     cout << ComparisonFunction (T1Struct, T2Struct) << endl << endl;
     ExitProgramFunction ();
}
2/8. Header.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 04.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
using namespace std;
 
struct AnswerStruct {                                                       // Объявление RESULTSTRUCT. //
     char Before [8], Now [15], Last [8];                                   // [0]..[6] = 1..7 (для ввода с клавиатуры), [7] = 8
};                                                                          // (для "\0"). //
 
struct TimeStruct {                                                         // Объявление TIMESTRUCT. //
     int Hours, Minutes, Seconds;
};
 
void ExitProgramFunction ();                                                // Объявление EXITPROGRAMFUNCTION.//
string ComparisonFunction (TimeStruct *T1Struct, TimeStruct *T2Struct);     // Объявление COMPARISONFUNCTION. //
void T2AutoFunction (TimeStruct *T2Struct);                                 // Объявление T2AUTOFUNCTION. //
void T2UserFunction (TimeStruct *T2Struct);                                 // Объявление T2USERFUNCTION. //
void T1AutoFunction (TimeStruct *T1Struct);                                 // Объявление T2AUTOFUNCTION. //
void T1UserFunction (TimeStruct *T1Struct);                                 // Объявление T1USERFUNCTION. //
void MessageFunction ();                                                    // Объявление MESSAGEFUNCTION. //
3/8. T1UserFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 05.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN. //
#include "Header.h"
 
void T1UserFunction (TimeStruct *T1Struct) {                         // Определение T1USERFUNCTION. //
     printf ("\n1) Введите час T1 (от 0 до 23, включительно).......");
     cin >> T1Struct->Hours;
     if ((T1Struct->Hours < 0) || (T1Struct->Hours > 23)) {
          MessageFunction ();
     }
     printf ("2) Введите минуту T1 (от 0 до 59, включительно)....");
     cin >> T1Struct->Minutes;
     if ((T1Struct->Minutes < 0) || (T1Struct->Minutes > 59)) {
          MessageFunction ();
     }
     printf ("3) Введите секунду T1 (от 0 до 59, включительно)...");
     cin >> T1Struct->Seconds;
     if ((T1Struct->Seconds < 0) || (T1Struct->Seconds > 59)) {
          MessageFunction ();
     }
}
4/8. T1AutoFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 05.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF. //
#include <windows.h>                                                 // Требуется для SYSTEMTIME, GETLOCALTIME. //
#include "Header.h"
 
void T1AutoFunction (TimeStruct *T1Struct) {                         // Определение T1AUTOFUNCTION. //
     SYSTEMTIME TemporaryStruct;                                     // Объявление TEMPORARYSTRUCT типа SYSTEMTIME. //
     GetLocalTime (&TemporaryStruct);                                // Инициализация TEMPORARYSTRUCT. //
     T1Struct->Hours = TemporaryStruct.wHour;
     T1Struct->Minutes = TemporaryStruct.wMinute;
     T1Struct->Seconds = TemporaryStruct.wSecond;
     printf ("\nВремя Т1: %02d:%02d:%02d.\n", T1Struct->Hours, T1Struct->Minutes, T1Struct->Seconds);
}
5/8. T2UserFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 05.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN. //
#include "Header.h"
 
void T2UserFunction (TimeStruct *T2Struct) {                         // Определение T2USERFUNCTION. //
     printf ("\n1) Введите час T2 (от 0 до 23, включительно).......");
     cin >> T2Struct->Hours;
     if ((T2Struct->Hours < 0) || (T2Struct->Hours > 23)) {
          MessageFunction ();
     }
     printf ("2) Введите минуту T2 (от 0 до 59, включительно)....");
     cin >> T2Struct->Minutes;
     if ((T2Struct->Minutes < 0) || (T2Struct->Minutes > 59)) {
          MessageFunction ();
     }
     printf ("3) Введите секунду T2 (от 0 до 59, включительно)...");
     cin >> T2Struct->Seconds;
     if ((T2Struct->Seconds < 0) || (T2Struct->Seconds > 59)) {
          MessageFunction ();
     }
}
6/8. T2AutoFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 05.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF. //
#include <windows.h>                                                 // Требуется для SYSTEMTIME, GETLOCALTIME. //
#include "Header.h"
 
void T2AutoFunction (TimeStruct *T2Struct) {                         // Определение T2AUTOFUNCTION. //
     SYSTEMTIME TemporaryStruct;                                     // Объявление TEMPORARYSTRUCT типа SYSTEMTIME. //
     GetLocalTime (&TemporaryStruct);                                // Инициализация TEMPORARYSTRUCT. //
     T2Struct->Hours = TemporaryStruct.wHour;
     T2Struct->Minutes = TemporaryStruct.wMinute;
     T2Struct->Seconds = TemporaryStruct.wSecond;
     printf ("\nВремя Т2: %02d:%02d:%02d.\n", T2Struct->Hours, T2Struct->Minutes, T2Struct->Seconds);
}
7/8. ComparisonFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 05.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                               // Требуется для PRINTF, CIN. //
#include <windows.h>                                                              // Требуется для SYSTEMTIME, GETLOCALTIME. //
#include "Header.h"
 
string ComparisonFunction (TimeStruct *T1Struct, TimeStruct *T2Struct) {          // Определение COMPARISONFUNCTION. //
     int T1Sum = (T1Struct->Hours * 60 + T1Struct->Minutes) * 60 + T1Struct->Seconds;
     int T2Sum = (T2Struct->Hours * 60 + T2Struct->Minutes) * 60 + T2Struct->Seconds;
     AnswerStruct TemporaryStruct = {"меньше.", "соответствует.", "больше."};     // Объявление и инициализация TEMPORARYSTRUCT типа
     if (T1Sum < T2Sum) {                                                         // ANSWERSTRUCT. //
          return (TemporaryStruct.Before);
     }
     if (T1Sum > T2Sum) {
          return (TemporaryStruct.Last);
     }
     else {
          return (TemporaryStruct.Now);
     }
}
8/8. ExitProgramFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.1. Структуры.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 05.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для SYSTEM, EXIT, PRINTF. //
#include "Header.h"
 
void ExitProgramFunction () {                                        // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}
 
void MessageFunction () {                                            // Определение MESSAGEFUNCTION. //
     printf ("\nОшибка ввода. Программа завершает свою работу.\n\n");
     ExitProgramFunction ();                                         // Выводится на экран, если введен отсутствующий ответ. //
}


Язык: C++.
Среда: Microsoft Visual Studio 2019 v16.3.0.
Платформа: x64.

Задание:
1. Создать запись для хранения следующей информации:
1) ФИО студента;
2) Факультет;
3) Курс;
4) Дата рождения;
5) Место рождения.
2. Предусмотреть возможность добавления, изменения и удаление записи и отображения данных на экран. Для хранения данных использовать стек.
3. Получить список студентов, возраст которых меньше среднего.
4. Найти максимальный и минимальный возраст студентов по каждому из встречающихся факультетов. Для группировки данных использовать очередь.
5. Найти количество студентов для каждого из встречающихся мест рождения.

Примечание:
1. ExtremumAllFunction.cpp - дополнительная функция к программе, которая не входит в условия задания. Добавил просто ради разнообразия.
2. QuantityFunction.cpp работает не совсем так, как требуется в условии задания, поскольку считает общее количество студентов по всем факультетам (всему учебному заведению), а не по факультетам. Как сделать по факультетам, я догадаться не смог.
3. Во вложении находится скриншот главного меню программы.

ЛР № 9, задание № 5.3
1/11. Source.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13.
 *1. Создать запись для хранения следующей информации:
 *1) ФИО студента;
 *2) Факультет;
 *3) Курс;
 *4) Дата рождения;
 *5) Место рождения.
 *2. Предусмотреть возможность добавления, изменения и удаление записи и отображения данных на экран. Для хранения данных использовать
 *     стек.
 *3. Получить список студентов, возраст которых меньше среднего.
 *4. Найти максимальный и минимальный возраст студентов по каждому из встречающихся факультетов. Для группировки данных использовать
 *     очередь.
 *5. Найти количество студентов для каждого из встречающихся мест рождения.
 */
 
#include <iostream>                                                  // Требуется для SETLOCATE, PRINTF, CIN, COUT. //
#include "Header.h"
 
int main () {
     setlocale (LC_ALL, "Russian");
     int Choice = 0;
     void (*PointerOnFunction []) (ElementStruct*) = {AddRecordFunction, ChangeRecordFunction, DeleteRecordFunction,
          WriteStackFunction, MiddleAgeFunction, ExtremumFacultyFunction, QuantityFunction, ExtremumAllFunction};
     ElementStruct *SourceStruct = new ElementStruct;                // Объявление SOURCESTRUCT типа ELEMENTSTRUCT. //
     SourceStruct->Head = NULL;                                      // Инициализация SOURCESTRUCT (вершины). //
     while (Choice != 9) {
          printf ("--------------------------------------------------------\n                      ГЛАВНОЕ МЕНЮ\n------------------------"
               "--------------------------------\n1) Добавление записи о студенте........................1\n2) Изменение ПОСЛЕДНЕЙ записи"
               " о студенте...............2\n3) Удаление ПОСЛЕДНЕЙ записи о студенте................3\n4) Список студентов в ОБРАТНОМ пор"
               "ядке.................4\n5) Список студентов, возраст которых меньше среднего...5\n6) Список старших и младших студентов.."
               "................6\n7) Количество студентов................................7\n8) Самый старший и младший студенты........."
               "...........8\n9) Выход из программы..................................9\n\nВаш выбор: ");
          cin >> Choice;
          if ((Choice > 0) && (Choice < 9)) {
               (*PointerOnFunction [Choice - 1]) (SourceStruct);
               cout << endl;
          }
    }
    DestructorFunction (SourceStruct);                               // Деструктор SOURCEARRAY. //
    cout << endl << endl;
    ExitProgramFunction ();
}
2/11. Header.h:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
using namespace std;
 
struct ElementStruct {                                               // Объявление ELEMENTSTRUCT. //
     int CourseOfStudies, Date, Month, Years;
     char Name [16], Faculty [16], PlaceOfBirth [16];                // [0]..[15] = 1..16 (для ввода с клавиатуры), [16] = 17
     ElementStruct *Head, *Tail;                                     // (для "\0"). //
};
 
void ExitProgramFunction ();                                         // Объявление EXITPROGRAMFUNCTION. //
void DestructorFunction (ElementStruct *SourceStruct);               // Объявление DESTRUCTORFUNCTION. //
void ExtremumAllFunction (ElementStruct *SourceStruct);              // Объявление EXTREMUMALLFUNCTION. //
void QuantityFunction (ElementStruct *SourceStruct);                 // Объявление QUANTITYFUNCTION. //
void ExtremumFacultyFunction (ElementStruct *SourceStruct);          // Объявление EXTREMUMFACULTYFUNCTION. //
void MiddleAgeFunction (ElementStruct *SourceStruct);                // Объявление MIDDLEAGEFUNCTION. //
void WriteStackFunction (ElementStruct *SourceStruct);               // Объявление WRITESTACKFUNCTION. //
void DeleteRecordFunction (ElementStruct *SourceStruct);             // Объявление DELETERECORDFUNCTION. //
void ChangeRecordFunction (ElementStruct *SourceStruct);             // Объявление CHANGERECORDFUNCTION. //
void AddRecordFunction (ElementStruct *SourceStruct);                // Объявление ADDRECORDFUNCTION. //
3/11. AddRecordFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, COUT. //
#include "Header.h"
 
void AddRecordFunction (ElementStruct *SourceStruct) {               // Определение ADDRECORDFUNCTION. //
     int Choice = 0;
     while (Choice != 2) {
          ElementStruct *TemporaryStruct = new ElementStruct;        // Объявление TEMPORARYSTRUCT типа ELEMENTSTRUCT. //
          printf ("\n\n---------------------------------------------------------------------------------------\n                         "
               "     ДОБАВЛЕНИЕ ЗАПИСИ О СТУДЕНТЕ\n--------------------------------------------------------------------------------------"
               "- \n");
          printf ("1) Введите ФИО студента (до 15 символов включительно, без пробелов).....");
          cin >> TemporaryStruct->Name;                              // GETLINE, GET и READ со STRUCT не работают. Нулевому элементу
          printf ("2) Введите факультет (до 15 символов включительно, без пробелов)........");
          cin >> TemporaryStruct->Faculty;                           // присваивается нуль-символ ("\0"). //
          printf ("3) Введите курс (от 1 до 5).............................................");
          cin >> TemporaryStruct->CourseOfStudies;
          if ((TemporaryStruct->CourseOfStudies < 1) || (TemporaryStruct->CourseOfStudies > 5)) {
               printf ("\nТакого номера учебного курса в Российской Федерации не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("4) Введите дату рождения (от 1 до 31)...................................");
          cin >> TemporaryStruct->Date;
          if ((TemporaryStruct->Date < 1) || (TemporaryStruct->Date > 31)) {
               printf ("\nТакого календарного числа не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("5) Введите месяц рождения (от 1 до 12)..................................");
          cin >> TemporaryStruct->Month;
          if ((TemporaryStruct->Month < 1) || (TemporaryStruct->Month > 12)) {
               printf ("\nТакого календарного месяца не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("6) Введите год рождения (от 1970 до 2003)...............................");
          cin >> TemporaryStruct->Years;
          if ((TemporaryStruct->Years < 1970) || (TemporaryStruct->Years > 2003)) {
               printf ("\nСтудента с таким возрастом не существует.\nПовторите ввод данных заново.\n");
               break;
          }
          printf ("7) Введите место рождения (до 15 символов включительно, без пробелов)...");
          cin >> TemporaryStruct->PlaceOfBirth;
          TemporaryStruct->Tail = SourceStruct->Head;                // В *TAIL текущего элемента присваивается адрес памяти предыдущего
          SourceStruct->Head = TemporaryStruct;                      // элемента (вершины) (таким образом соблюдается метод LIFO). //
          printf ("\nХотите добавить еще одну запись о студенте?\n\n1) Да.....................................1\n2) Нет (выход в меню)..."
               "..................2\n\nВаш выбор: ");                // В *HEAD присваивается адрес памяти вершины. //
          cin >> Choice;
     }
     cout << endl;
}
4/11. ChangeRecordFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, CIN, COUT. //
#include "Header.h"
 
void ChangePlaceOfBirth (ElementStruct *TemporaryStruct) {           // Объявление и определение CHANGEPLACEOFBIRTH. //
     printf ("\n\n------------------------------------------------------------------------------------\n                ИЗМЕНЕНИЕ МЕСТА Р"
          "ОЖДЕНИЯ ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------------------------------------------------------------------------------\nВв"
          "едите место рождения (до 15 символов включительно, без пробелов)...");
     cin >> TemporaryStruct->PlaceOfBirth;
     cout << endl;
}
 
void ChangeDateOfBirth (ElementStruct *TemporaryStruct) {            // Объявление и определение CHANGEDATEOFBIRTH. //
     printf ("\n\n--------------------------------------------------------\n  ИЗМЕНЕНИЕ ДАТЫ РОЖДЕНИЯ ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n-----"
          "---------------------------------------------------\n1) Введите дату рождения (от 1 до 31)...............");
     cin >> TemporaryStruct->Date;
     if ((TemporaryStruct->Date < 1) || (TemporaryStruct->Date > 31)) {
          printf ("\nТакого календарного числа не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     printf ("2) Введите месяц рождения (от 1 до 12)..............");
     cin >> TemporaryStruct->Month;
     if ((TemporaryStruct->Month < 1) || (TemporaryStruct->Month > 12)) {
          printf ("\nТакого календарного месяца не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     printf ("3) Введите год рождения (от 1970 до 2003)...........");
     cin >> TemporaryStruct->Years;
     if ((TemporaryStruct->Years < 1970) || (TemporaryStruct->Years > 2003)) {
          printf ("\nСтудента с таким возрастом не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     cout << endl;
}
 
void ChangeCourseOfStudies (ElementStruct *TemporaryStruct) {        // Объявление и определение CHANGECOURCEOFSTUDIES. //
     printf ("\n\n--------------------------------------------------------\n      ИЗМЕНЕНИЕ КУРСА ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n---------"
          "-----------------------------------------------\nВведите курс (от 1 до 5)...............................");
     cin >> TemporaryStruct->CourseOfStudies;
     if ((TemporaryStruct->CourseOfStudies < 1) || (TemporaryStruct->CourseOfStudies > 5)) {
          printf ("\nТакого номера учебного курса в Российской Федерации не существует.\nПовторите ввод данных заново.\n");
          return;
     }
     cout << endl;
}
 
void ChangeFaculty (ElementStruct *TemporaryStruct) {                // Объявление и определение CHANGEFACULTY. //
     printf ("\n\n------------------------------------------------------------------------------------\n                  ИЗМЕНЕНИЕ ФАКУЛ"
          "ЬТЕТА ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------------------------------------------------------------------------------\nВвед"
          "ите факультет (до 15 символов включительно, без пробелов)........");
     cin >> TemporaryStruct->Faculty;
     cout << endl;
}
 
void ChangeName (ElementStruct *TemporaryStruct) {                   // Объявление и определение CHANGENAME. //
     printf ("\n\n------------------------------------------------------------------------------------\n                     ИЗМЕНЕНИЕ ФИ"
          "О ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------------------------------------------------------------------------------\nВведите "
          "ФИО студента (до 15 символов включительно, без пробелов).....");
     cin >> TemporaryStruct->Name;
     cout << endl;
}
 
void ChangeRecordFunction (ElementStruct *SourceStruct) {            // Определение CHANGERECORDFUNCTION. //
     int Choice = 0;
     void (*PointerOnFunction []) (ElementStruct*) = {ChangeName, ChangeFaculty, ChangeCourseOfStudies, ChangeDateOfBirth,
          ChangePlaceOfBirth};
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. Присваивается адрес
     printf ("\n\n--------------------------------------------------------\n         ИЗМЕНЕНИЕ ПОСЛЕДНИЕЙ ЗАПИСИ О СТУДЕНТЕ\n------------"
          "--------------------------------------------\n");         // памяти вершины. //
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     while (Choice != 6) {
          printf ("Какую графу вы хотите изменить?\n\n1) ФИО студента........................................1\n2) Название факультета..."
               "..............................2\n3) Номер курса.........................................3\n4) Дату рождения.............."
               ".........................4\n5) Место рождения......................................5\n6) Никакую (выход в меню).........."
               "....................6\n\nВаш выбор: ");
          cin >> Choice;
          if ((Choice > 0) && (Choice < 6)) {
               (*PointerOnFunction [Choice - 1]) (TemporaryStruct);
          }
     }
     cout << endl;
}
5/11. DeleteRecordFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                   // Требуется для PRINTF, COUT. //
#include "Header.h"
 
void DeleteRecordFunction (ElementStruct *SourceStruct) {             // Определение DELETERECORDFUNCTION. //
     int Choice = 0, Counter = 1;
     if (SourceStruct->Head == NULL) {
          printf ("\n\n----------------------------------------------------------------------------------\n                        УДАЛЕН"
               "ИЕ ПОСЛЕДНЕЙ ЗАПИСИ О СТУДЕНТЕ\n----------------------------------------------------------------------------------\nНОМЕР"
               " |       ФИО       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n------------------------------------------"
               "----------------------------------------\n");
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     do {
          if (SourceStruct->Head == NULL) {
               printf ("Записи о студентах отсутствуют.\n\n");
               break;
          }
          ElementStruct *TemporaryStruct = SourceStruct->Head;        // Объявление и инициализация TEMPORARYSTRUCT. //
          ElementStruct *DeleteStruct = SourceStruct->Head->Tail;     // Объявление и инициализация DELETESTRUCT. Присваиваются
          printf ("\n\n----------------------------------------------------------------------------------\n                        УДАЛЕН"
               "Е ПОСЛЕДНЕЙ ЗАПИСИ О СТУДЕНТЕ\n----------------------------------------------------------------------------------\nНОМЕР "
               "|       ФИО       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n-------------------------------------------"
               "---------------------------------------\n");
          printf ("%5d | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n", Counter++, TemporaryStruct->Name, TemporaryStruct->Faculty,
               TemporaryStruct->CourseOfStudies, TemporaryStruct->Date, TemporaryStruct->Month, TemporaryStruct->Years,
               TemporaryStruct->PlaceOfBirth);                        // адреса памяти вершины и предпоследнего элементов. //
          TemporaryStruct = TemporaryStruct->Tail;
          delete SourceStruct->Head;                                  // Удаляется адрес памяти вершины. //
          SourceStruct->Head = DeleteStruct;                          // В HEAD присваивается адрес памяти предпоследнего элемента
          printf ("\nПоследняя запись о студенте удалена.\n\nХотите удалить еще одну запись о студенте?\n\n1) Да........................."
               "...........1\n2) Нет (выход в меню)....................2\n\nВаш выбор: ");
          cin >> Choice;                                              // (TAIL). //
     } while (Choice != 2);
     cout << endl;
}
6/11. WriteStackFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, COUT. //
#include "Header.h"
 
void WriteStackFunction (ElementStruct *SourceStruct) {              // Объявление и определение WRITESTACKFUNCTION. //
     int Counter = 1;
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. Присваивается адрес
     printf ("\n\n----------------------------------------------------------------------------------\n                        СПИСОК СТУД"
          "ЕНТОВ В ОБРАТНОМ ПОРЯДКЕ\n----------------------------------------------------------------------------------\nНОМЕР |       ФИ"
          "О       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n----------------------------------------------------------"
          "------------------------\n");                             // памяти последнего элемента. //
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n");
     }
     while (TemporaryStruct != NULL) {
          printf ("%5d | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n", Counter++, TemporaryStruct->Name, TemporaryStruct->Faculty,
               TemporaryStruct->CourseOfStudies, TemporaryStruct->Date, TemporaryStruct->Month, TemporaryStruct->Years,
               TemporaryStruct->PlaceOfBirth);                       // Выводятся на экран все элементы. //
          TemporaryStruct = TemporaryStruct->Tail;                   // Вершине присваивается адрес памяти предыдущего элемента.//
     }
     cout << endl;
}
7/11. MiddleAgeFunction.cpp

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                              // Требуется для PRINTF. //
#include <windows.h>                                                             // Требуется для SYSTEMTIME, GETLOCALTIME. //
#include "Header.h"
 
void MiddleAgeFunction (ElementStruct *SourceStruct) {                           // Определение MIDDLEAGEFUNCTION. //
     int Counter = 0, Sum = 0, AgeOfStudent = 0;                                 // Дробная часть SUM не имеет знач., поэтому INT. //
     ElementStruct *TemporaryStruct = SourceStruct->Head;                        // Объявление и инициализация TEMPORARYSTRUCT. //
     SYSTEMTIME TemporaryTimeStruct;                                             // Объявление TEMPORARYSTRUCT типа SYSTEMTIME. //
     GetLocalTime (&TemporaryTimeStruct);                                        // Инициализация TEMPORARYSTRUCT. //
     printf ("\n\n----------------------------------------------------------------------------------\n                 СПИСОК СТУДЕНТОВ, "
          "ВОЗРАСТ КОТОРЫХ МЕНЬШЕ СРЕДНЕГО\n----------------------------------------------------------------------------------\nНОМЕР |  "
          "     ФИО       |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n---------------------------------------------------"
          "-------------------------------\n");
     while (TemporaryStruct != NULL) {
          Sum += (TemporaryTimeStruct.wYear - TemporaryStruct->Years);           // Вычисляется сумма лет всех элементов (студентов). //
          Counter++;                                                             // Вычисляется количество элементов. //
          TemporaryStruct = TemporaryStruct->Tail;                               // Вершине присваивается адрес памяти предыдущего
     }                                                                           // элемента. //
     if (Counter < 2) {                                                          // Если элементов меньше двух или они вообще отсутствуют,
          printf ("Записей о студентах меньше двух.\n\n");                       // то сравнивать не с чем.//
          return;
     }
     Sum = Sum / Counter;                                                        // Вычисляется средний возраст всех студентов. //
     Counter = 1;
     TemporaryStruct = SourceStruct->Head;                                       // В *HEAD присваивается адрес памяти вершины. //
     while (TemporaryStruct != NULL) {
          AgeOfStudent = TemporaryTimeStruct.wYear - TemporaryStruct->Years;     // Вычисляется возраст текущего элемента. //
          if (AgeOfStudent < Sum) {                                              // Если возраст веришны меньше среднего, то он выводится
               printf ("%5d | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n", Counter++, TemporaryStruct->Name,
                    TemporaryStruct->Faculty, TemporaryStruct->CourseOfStudies, TemporaryStruct->Date, TemporaryStruct->Month,
                    TemporaryStruct->Years, TemporaryStruct->PlaceOfBirth);      // на экран.//
          }
          TemporaryStruct = TemporaryStruct->Tail;                               // Вершине присваивается адрес памяти предыдущего
     }                                                                           // элемента. //
     printf ("\nСредний возраст студентов: %d лет.\n\n", Sum);
}
8/11. ExtremumFacultyFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, COUT. //
#include <queue>                                                     // Требуется для PRIORITY_QUEUE. //
#include <string>                                                    // Требуется для TO_STRING. //
#include "Header.h"
 
void ExtremumFacultyFunction (ElementStruct *SourceStruct) {         // Определение EXTREMUMFACULTYFUNCTION. //
     int Counter = 1;
     string FacultyDate = " ";
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. //
     priority_queue <string> QueueMetod;
     printf ("\n\n--------------------------------------------------------\n           СПИСОК СТАРШИХ И МЛАДШИХ СТУДЕНТОВ\n--------------"
          "------------------------------------------\nНОМЕР |    ФАКУЛЬТЕТ    | ГОД РОЖДЕНИЯ\n------------------------------------------"
          "--------------\n");
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     while (TemporaryStruct != NULL) {
          FacultyDate = TemporaryStruct->Faculty + (" |         " + to_string (TemporaryStruct->Years));
          QueueMetod.push (FacultyDate);                             // Преобразует FACULTY и YEARS в STRING, причем упорядочивает вначале
          TemporaryStruct = TemporaryStruct->Tail;                   // по FACULTY, а затем внутри него по YEARS. //
     }
     while (!QueueMetod.empty ()) {
          printf ("%5d | ", Counter++);
          cout << QueueMetod.top ();
          QueueMetod.pop ();
          cout << endl;
     }
     cout << endl;
}
9/11. QuantityFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, COUT. //
#include "Header.h"
 
void QuantityFunction (ElementStruct *SourceStruct) {                // Определение QUANTITYFUNCTION. //
     int Counter = 0;
     ElementStruct *TemporaryStruct = SourceStruct->Head;
     printf ("\n\n--------------------------------------------------------\n                  КОЛИЧЕСТВО СТУДЕНТОВ\n---------------------"
          "-----------------------------------\n");
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     while (TemporaryStruct != NULL) {
          Counter++;
          TemporaryStruct = TemporaryStruct->Tail;
     }
     printf ("Количество студентов: %d.\n", Counter);
     cout << endl;
}
10/11. ExtremumAllFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для PRINTF, STRCPY_S, COUT. //
#include "Header.h"
 
void ExtremumAllFunction (ElementStruct *SourceStruct) {             // Определение EXTREMUMALLFUNCTION. //
     const int Dimension = 2;
     ElementStruct *TemporaryStruct = SourceStruct->Head;            // Объявление и инициализация TEMPORARYSTRUCT. //
     ElementStruct *ArrayStruct = new ElementStruct [Dimension];     // Объявление ARRAYSTRUCT типа ELEMENTSTRUCT. //
     printf ("\n\n----------------------------------------------------------------------------------\n                         САМЫЙ СТАР"
          "ШИЙ И МЛАДШИЙ СТУДЕНТЫ\n----------------------------------------------------------------------------------\nНОМЕР |       ФИО "
          "      |    ФАКУЛЬТЕТ    | КУРС | ДАТА РОЖДЕНИЯ | МЕСТО РОЖДЕНИЯ \n------------------------------------------------------------"
          "----------------------\n");
     if (TemporaryStruct == NULL) {
          printf ("Записи о студентах отсутствуют.\n\n");
          return;
     }
     int MaxSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
     int MinSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
     while (TemporaryStruct != NULL) {
          if (((TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date) <= MaxSumDate) {
               strcpy_s ((*(ArrayStruct + 0)).Name, TemporaryStruct->Name);
               strcpy_s ((*(ArrayStruct + 0)).Faculty, TemporaryStruct->Faculty);
               (*(ArrayStruct + 0)).CourseOfStudies = TemporaryStruct->CourseOfStudies;
               (*(ArrayStruct + 0)).Date = TemporaryStruct->Date;
               (*(ArrayStruct + 0)).Month = TemporaryStruct->Month;
               (*(ArrayStruct + 0)).Years = TemporaryStruct->Years;
               strcpy_s ((*(ArrayStruct + 0)).PlaceOfBirth, TemporaryStruct->PlaceOfBirth);
               MaxSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
          }
          if (((TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date) >= MinSumDate) {
               strcpy_s ((*(ArrayStruct + 1)).Name, TemporaryStruct->Name);
               strcpy_s ((*(ArrayStruct + 1)).Faculty, TemporaryStruct->Faculty);
               (*(ArrayStruct + 1)).CourseOfStudies = TemporaryStruct->CourseOfStudies;
               (*(ArrayStruct + 1)).Date = TemporaryStruct->Date;
               (*(ArrayStruct + 1)).Month = TemporaryStruct->Month;
               (*(ArrayStruct + 1)).Years = TemporaryStruct->Years;
               strcpy_s ((*(ArrayStruct + 0)).PlaceOfBirth, TemporaryStruct->PlaceOfBirth);
               MinSumDate = (TemporaryStruct->Years * 12 + TemporaryStruct->Month) * 30 + TemporaryStruct->Date;
          }
          TemporaryStruct = TemporaryStruct->Tail;
     }
     printf("                                  СТАРШИЙ СТУДЕНТ\n-------------------------------------------------------------------------"
          "---------\n    1 | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n----------------------------------------------------------"
          "------------------------\n                                  МЛАДШИЙ СТУДЕНТ\n-------------------------------------------------"
          "---------------------------------\n    2 | %-15s | %-15s | %4d |    %02d.%02d.%04d | %-15s\n",
          (*(ArrayStruct + 0)).Name, (*(ArrayStruct + 0)).Faculty, (*(ArrayStruct + 0)).CourseOfStudies, (*(ArrayStruct + 0)).Date,
          (*(ArrayStruct + 0)).Month, (*(ArrayStruct + 0)).Years, (*(ArrayStruct + 0)).PlaceOfBirth, (*(ArrayStruct + 1)).Name,
          (*(ArrayStruct + 1)).Faculty, (*(ArrayStruct + 1)).CourseOfStudies, (*(ArrayStruct + 1)).Date, (*(ArrayStruct + 1)).Month,
          (*(ArrayStruct + 1)).Years, (*(ArrayStruct + 0)).PlaceOfBirth);
     cout << endl;
     delete [] ArrayStruct;                                           // Удаление ARRAYSTRUCT. //
}
11/11. ExitProgramFunction.cpp:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
/*
 *Лабораторная работа: 9.
 *Тема: Типы данных, определяемые пользователем. Структуры и объединения. Многофайловые проекты.
 *Пункт: 5.3. Динамические структуры данных.
 *Файл: Lab09_YaP_2019_1S.pdf
 *
 *Язык: C++.
 *Среда: Microsoft Visual Studio 2019 v16.3.0.
 *Платформа: x64.
 *Изменение: 06.01.2020.
 *
 *Вариант: 13.
 *Защита: 27.12.2019.
 *Задание: 13. (...)
 */
 
#include <iostream>                                                  // Требуется для SYSTEM, EXIT. //
#include "Header.h"
 
void ExitProgramFunction () {                                        // Определение EXITPROGRAMFUNCTION. //
     system ("pause");
     exit (true);
}
 
void DestructorFunction (ElementStruct *SourceStruct) {              // Определение DESTRUCTORFUNCTION. //
     while (SourceStruct->Head != NULL) {
          ElementStruct *TemporaryStruct = SourceStruct->Head->Tail;
          delete SourceStruct->Head;                                 // Удаление вершины. //
          SourceStruct->Head = TemporaryStruct;                      // В *HEAD присваевается адрес памяти предыдущего элемента. //
     }
     delete SourceStruct->Head;                                      // Удаление первого элемента. //
     delete SourceStruct;                                            // Удаление SOURCESTRUCT. //
}
Миниатюры
Нажмите на изображение для увеличения
Название: ЛР № 9, задание № 5.3.jpg
Просмотров: 1381
Размер:	149.0 Кб
ID:	5849  
Вложения
Тип файла: rar 27.12.2019 - ЛР 9.rar (491.7 Кб, 1186 просмотров)
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Всего комментариев 0
Комментарии
 
Новые блоги и статьи
Новый ноутбук
volvo 07.12.2025
Всем привет. По скидке в "черную пятницу" взял себе новый ноутбук Lenovo ThinkBook 16 G7 на Амазоне: Ryzen 5 7533HS 64 Gb DDR5 1Tb NVMe 16" Full HD Display Win11 Pro
Музыка, написанная Искусственным Интеллектом
volvo 04.12.2025
Всем привет. Некоторое время назад меня заинтересовало, что уже умеет ИИ в плане написания музыки для песен, и, собственно, исполнения этих самых песен. Стихов у нас много, уже вышли 4 книги, еще 3. . .
От async/await к виртуальным потокам в Python
IndentationError 23.11.2025
Армин Ронахер поставил под сомнение async/ await. Создатель Flask заявляет: цветные функции - провал, виртуальные потоки - решение. Не threading-динозавры, а новое поколение лёгких потоков. Откат?. . .
Поиск "дружественных имён" СОМ портов
Argus19 22.11.2025
Поиск "дружественных имён" СОМ портов На странице: https:/ / norseev. ru/ 2018/ 01/ 04/ comportlist_windows/ нашёл схожую тему. Там приведён код на С++, который показывает только имена СОМ портов, типа,. . .
Сколько Государство потратило денег на меня, обеспечивая инсулином.
Programma_Boinc 20.11.2025
Сколько Государство потратило денег на меня, обеспечивая инсулином. Вот решила сделать интересный приблизительный подсчет, сколько государство потратило на меня денег на покупку инсулинов. . . .
Ломающие изменения в C#.NStar Alpha
Etyuhibosecyu 20.11.2025
Уже можно не только тестировать, но и пользоваться C#. NStar - писать оконные приложения, содержащие надписи, кнопки, текстовые поля и даже изображения, например, моя игра "Три в ряд" написана на этом. . .
Мысли в слух
kumehtar 18.11.2025
Кстати, совсем недавно имел разговор на тему медитаций с людьми. И обнаружил, что они вообще не понимают что такое медитация и зачем она нужна. Самые базовые вещи. Для них это - когда просто люди. . .
Создание Single Page Application на фреймах
krapotkin 16.11.2025
Статья исключительно для начинающих. Подходы оригинальностью не блещут. В век Веб все очень привыкли к дизайну Single-Page-Application . Быстренько разберем подход "на фреймах". Мы делаем одну. . .
Фото: Daniel Greenwood
kumehtar 13.11.2025
Расскажи мне о Мире, бродяга
kumehtar 12.11.2025
— Расскажи мне о Мире, бродяга, Ты же видел моря и метели. Как сменялись короны и стяги, Как эпохи стрелою летели. - Этот мир — это крылья и горы, Снег и пламя, любовь и тревоги, И бескрайние. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2025, CyberForum.ru