В массиве структур (записей) найти всех студентов, не имеющих двоек - 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
, чтобы записать отсортированных студентов в файл.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д