PROGRAM Faculty CONST MAXNUM 30 Максимальное количество преподавателей

  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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
PROGRAM Faculty;
CONST
MAXNUM = 30; (* Максимальное количество преподавателей *)
TYPE
TLecturer = record (* Преподаватель: *)
name : string[25]; (* ФИО *)
position : string[10]; (* Должность *)
title : string[10]; (* Звание *)
subject : string[15]; (* Предмет *)
faculty : string[10]; (* Факультет *)
course : string[10]; (* Курс *)
hours : Integer; (* Часы *)
end;
(* Список предметов *)
TSubjects = array of string;
procedure PrintLecturer(lecturer : TLecturer);
(* Напечатать `Преподавателя` как строку таблицы *)
begin
with lecturer do begin
writeln(name:25, ' | ',
title: 10, ' | ',
position: 10, ' | ',
subject:15, ' | ',
faculty:10, ' | ', course:10, ' | ',
hours:3, ' |');
end
end;
function RandomChoice(arr: array of string): string;
(* Выбрать случайный элемент массива *)
begin
RandomChoice := arr[random(length(arr))];
end;
function GetRandomLecturer(): TLecturer;
(* Сгенерировать случайного `Преподавателя` *)
const
names: array[1..4] of string = ('Ivan', 'Danilo', 'Natalia', 'Irina');
last_names: array[1..4] of string = ('Bortko', 'Galich', 'Litvinenko', 'Belyh');
titles: array[1..3] of string = ('senior', 'middle', 'junior');
positions: array[1..3] of string = ('professor', 'instructor', 'assistant');
faculties: array[1..4] of string = ('PRIMAT', 'HUDLIT', 'ECON', 'ENG');
courses: array[1..3] of string = ('BUDGET', 'CONTRACT', 'REMOTE');
subjects: array[1..4] of string = ('math', 'reading', 'writing', 'painting');
begin
with GetRandomLecturer do begin
name := RandomChoice(names) + ' ' + RandomChoice(last_names);
position := RandomChoice(positions);
title := RandomChoice(titles);
faculty := RandomChoice(faculties);
course := RandomChoice(courses);
subject := RandomChoice(subjects);
hours := random(100) + 1;
end;
end;
(* Задание 1. Найти преподавателя с заданными должностью и званием, имеющего самую большую нагрузку. *)
function MaxLoad(lecturers: array of TLecturer; title: string; position: String): TLecturer;
var
lecturer : TLecturer; (* Переменная-итератор цикла *)
begin
MaxLoad := lecturers[0];
for lecturer in lecturers do begin
if (lecturer.position = position) and
(lecturer.title = title) and
(lecturer.hours > MaxLoad.hours)
then MaxLoad := lecturer;
end;
end;
(* Задание 2: Список предметов заданного предоватателя *)
function LecturerSubjects(lecturers: array of TLecturer; name : string): TSubjects;
var
lecturer : TLecturer; (* переменная-итератор *)
count : Integer; (* счетчик предметов *)
begin
count := 0;
SetLength(LecturerSubjects, length(lecturers)); (* Худший случай: преподаватель читает все предметы *)
for lecturer in lecturers do begin
if (lecturer.name = name) then begin
LecturerSubjects[count] := lecturer.subject; (* сохраним предмет *)
count := count + 1; (* посчитаем предмет *)
end;
end;
SetLength(LecturerSubjects, count); (* Уменьшим размер до фактического количества предметов *)
end;
(* Задание 3: Объем часов на заданном факультете и заданном курсе *)
function TotalHours(lecturers : array of TLecturer; faculty: string; course: string): Integer;
var
lecturer : TLecturer;
begin
TotalHours := 0;
for lecturer in lecturers do
if (lecturer.faculty = faculty) and
(lecturer.course = course)
then TotalHours := TotalHours + lecturer.hours;
end;
VAR
lecturers : array[1..MAXNUM] of TLecturer;
i : Integer;
subject : string;
BEGIN
(* Сгенерируем случайные тестовые данные *)
for i := 1 to length(lecturers) do begin
lecturers[i] := GetRandomLecturer();
PrintLecturer(lecturers[i]);
end;
writeln;
writeln('Максимальная нагрузка для "junior" "professor":');
PrintLecturer(maxLoad(lecturers, 'junior', 'professor'));
writeln;
write('"Danilo Balyh" читает предметы: ');
for subject in LecturerSubjects(lecturers, 'Danilo Belyh') do
write(subject, ', ');
writeln;
writeln;
writeln('Полная нагрузка на "ECON" факультете, курс "BUDGET", часов: ',
TotalHours(lecturers, 'ECON', 'BUDGET'));
END.