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

Узнай цену своей работы

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

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

Решение задачи: «В массиве структур (записей) найти всех студентов, не имеющих двоек»

textual
Листинг программы
  1. type
  2.   TPerson = record ...
  3.     MrkCnt: Integer;
  4.     Mrks: array [0..4] of Integer;
  5.     AvgMrk: Real;
  6.   end;
  7.   TMatchFunc = function (const p: TPerson): Boolean;
  8.   TLessFunc = function (const p1, p2: TPerson): Boolean;
  9.  
  10. procedure WritePerson(const p: TPerson);
  11. begin
  12.   with p do begin
  13.     WriteLn( ...
  14.   end;
  15. end;
  16.  
  17. procedure WritePersons(const p: array of TPerson; n: Integer);
  18. begin
  19.   for n:=0 to n-1 do WritePerson(p[n]);
  20. end;
  21.  
  22. procedure SelectPersons(
  23.   const src: array of TPerson; n: Integer;
  24.   var dst: array of TPerson; var m: Integer;
  25.   IsMatch: TMatchFunc);
  26. begin
  27.   m:=0;
  28.   for n:=0 to n-1 do
  29.     if IsMatch(src[n]) then begin
  30.       dst[m]:=src[n]; Inc(m);
  31.     end;
  32. end;
  33.  
  34. procedure SortPersons(var a: array of TPerson; n: Integer; IsLess: TLessFunc);
  35. begin
  36.   ...
  37.   if IsLess(p[i],p[j]) then ...
  38.   ...
  39. end;
  40.  
  41. {$F+}
  42. function MatchNo2(const p: TPerson): Boolean;
  43. var i: Integer;
  44. begin
  45.   i:=MrkCnt-1; while (i>=0) and (p.Mrks[i]<>2) do Dec(i);
  46.   IsMatch:=i<0;
  47. end;
  48.  
  49. function LessByAvg(const p1, p2: TPerson): Boolean;
  50. begin
  51.   IsLess:=p1.MrkAvg<p2.MrkAvg;
  52. end;
  53.  
  54. var
  55.   p1, p2: array [1..MAXN] of TPerson;
  56. ...
  57.   SelectPersons(p1,n1,p2,n2,MatchNo2);
  58.   SortPersons(p2,n2,LesByAvg);
  59.   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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут
Похожие ответы