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

Объяснение кода листинга программы

  1. В функции MatchNo2 мы уменьшаем значение переменной i до тех пор, пока она не станет меньше нуля или пока p.Mrks[i] не станет равным двум. Таким образом, мы находим индекс первого студента без двоек в массиве.
  2. В функции LessByAvg мы сравниваем среднюю оценку двух студентов. Если средняя оценка первого студента меньше, чем у второго, то мы возвращаем True, иначе - False.
  3. В процедуре WritePerson мы записываем информацию о студенте в файл.
  4. В процедуре WritePersons мы записываем информацию о нескольких студентах в файл.
  5. В процедуре SelectPersons мы выбираем студентов, которые соответствуют условию, заданному в функции IsMatch. Мы проходим по массиву студентов и, если студент соответствует условию, копируем его в новый массив.
  6. В процедуре SortPersons мы сортируем студентов по среднему баллу. Мы используем рекурсивную функцию для сравнения студентов.
  7. В конце программы мы вызываем функцию MatchNo2, чтобы найти первого студента без двоек, затем вызываем функцию LessByAvg, чтобы отсортировать студентов по среднему баллу, и, наконец, вызываем процедуру WritePersons, чтобы записать отсортированных студентов в файл.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 3.8 из 5
Похожие ответы