В массиве структур (записей) найти всех студентов, не имеющих двоек - Turbo Pascal

Формулировка задачи:

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

Код к задаче: «В массиве структур (записей) найти всех студентов, не имеющих двоек - 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);

5   голосов, оценка 3.800 из 5


СОХРАНИТЬ ССЫЛКУ