В массиве структур (записей) найти всех студентов, не имеющих двоек - Turbo Pascal
Формулировка задачи:
В массиве структур (записей) найти всех студентов, не имеющих двоек, и сформировать из них новый массив. Полученный массив упорядочить по возрастанию среднего балла. Структура (запись) содержит поля: фамилия, количество оценок, массив оценок (не более пяти), средний балл, который вычисляется при вводе данных. Вывести исходный и полученные массивы.
Решение задачи: «В массиве структур (записей) найти всех студентов, не имеющих двоек»
textual
Листинг программы
- type
- TPerson = record ...
- MrkCnt: Integer;
- Mrks: array [0..4] of Integer;
- AvgMrk: Real;
- end;
- TMatchFunc = function (const p: TPerson): Boolean;
- TLessFunc = function (const p1, p2: TPerson): Boolean;
- procedure WritePerson(const p: TPerson);
- begin
- with p do begin
- WriteLn( ...
- end;
- end;
- procedure WritePersons(const p: array of TPerson; n: Integer);
- begin
- for n:=0 to n-1 do WritePerson(p[n]);
- end;
- procedure SelectPersons(
- const src: array of TPerson; n: Integer;
- var dst: array of TPerson; var m: Integer;
- IsMatch: TMatchFunc);
- begin
- m:=0;
- for n:=0 to n-1 do
- if IsMatch(src[n]) then begin
- dst[m]:=src[n]; Inc(m);
- end;
- end;
- procedure SortPersons(var a: array of TPerson; n: Integer; IsLess: TLessFunc);
- begin
- ...
- if IsLess(p[i],p[j]) then ...
- ...
- end;
- {$F+}
- function MatchNo2(const p: TPerson): Boolean;
- var i: Integer;
- begin
- i:=MrkCnt-1; while (i>=0) and (p.Mrks[i]<>2) do Dec(i);
- IsMatch:=i<0;
- end;
- function LessByAvg(const p1, p2: TPerson): Boolean;
- begin
- IsLess:=p1.MrkAvg<p2.MrkAvg;
- end;
- var
- p1, p2: array [1..MAXN] of TPerson;
- ...
- SelectPersons(p1,n1,p2,n2,MatchNo2);
- SortPersons(p2,n2,LesByAvg);
- WritePersons(p2);
Объяснение кода листинга программы
- В функции
MatchNo2
мы уменьшаем значение переменнойi
до тех пор, пока она не станет меньше нуля или покаp.Mrks[i]
не станет равным двум. Таким образом, мы находим индекс первого студента без двоек в массиве. - В функции
LessByAvg
мы сравниваем среднюю оценку двух студентов. Если средняя оценка первого студента меньше, чем у второго, то мы возвращаемTrue
, иначе -False
. - В процедуре
WritePerson
мы записываем информацию о студенте в файл. - В процедуре
WritePersons
мы записываем информацию о нескольких студентах в файл. - В процедуре
SelectPersons
мы выбираем студентов, которые соответствуют условию, заданному в функцииIsMatch
. Мы проходим по массиву студентов и, если студент соответствует условию, копируем его в новый массив. - В процедуре
SortPersons
мы сортируем студентов по среднему баллу. Мы используем рекурсивную функцию для сравнения студентов. - В конце программы мы вызываем функцию
MatchNo2
, чтобы найти первого студента без двоек, затем вызываем функциюLessByAvg
, чтобы отсортировать студентов по среднему баллу, и, наконец, вызываем процедуруWritePersons
, чтобы записать отсортированных студентов в файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д