Найти и вывести фамилии тех студентов, которые все экзамены сдали на 9 - PascalABC.NET

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

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

Даны оценки группы студентов на экзаменах по 4 предметам: алгебре, геометрии, философии, информатике. Найти и вывести фамилии тех студентов, которые все экзамены сдали на 9.

Решение задачи: «Найти и вывести фамилии тех студентов, которые все экзамены сдали на 9»

textual
Листинг программы
  1. const
  2.   LessonsCount = 4;
  3.   Lessons : array [1..LessonsCount] of String[15] =
  4.            ('алгебра', 'геометрия', 'философия', 'информатика');
  5.  
  6. type
  7.   tStudents = class
  8.     Name : String[20];
  9.     Ball : array [1..LessonsCount] of Byte;
  10.     Next : tStudents;
  11.    
  12.     constructor (N : Integer);
  13.     begin
  14.       Name := ReadLnString('Введите ФИО студента № ' + N.ToString + ' :');
  15.       for var L := 1 to LessonsCount do
  16.         Ball[L] := ReadLnInteger('Введите оценку за предмет «' + Lessons[L] + '» =');
  17.       Next := nil;
  18.     end;
  19.    
  20.     function SumBalls : Integer;
  21.     begin
  22.       Result := 0;
  23.       for var L := 1 to LessonsCount do
  24.         Result += Ball[L];
  25.     end;
  26.    
  27.     procedure OutStudent(N : Integer);
  28.     begin
  29.       Write(N:5, Name:20);
  30.       for var L := 1 to LessonsCount do
  31.         Write('   ', Lessons[L], ' : ', Ball[L]);
  32.       WriteLn;
  33.     end;
  34.   end;
  35.  
  36. function ContinueEntering : Boolean;
  37. begin
  38.   var S : String;
  39.   repeat
  40.     S := ReadLnString(NewLine +
  41.       '1 / Y - yes / Д - да : Продолжить ввод следующего студента' + NewLine +
  42.       '0 / N - no / Н - нет : Закончить ввод данных' + NewLine +
  43.       'Ваш выбор:');
  44.   until (S.Length > 0) and '1yYдД0nNнН'.Contains(S[1]);
  45.   Result := '0nNнН'.IndexOf(S[1]) < 0;
  46. end;
  47.  
  48. function InputGroup : tStudents;
  49. begin
  50.   var N := 1;
  51.   Result := new tStudents(N);
  52.   var Last := Result;
  53.   while ContinueEntering do
  54.     begin
  55.       N += 1;
  56.       Last.Next := new tStudents(N);
  57.       Last := Last.Next;
  58.     end;
  59. end;
  60.  
  61. procedure OutNumbersOfBalls(List : tStudents);
  62. begin
  63.   WriteLn;
  64.   var Sum := ReadLnInteger('Сколько баллов:');
  65.   WriteLn('Список студентов, набравших ', Sum, ' баллов:');
  66.   var Count := 0;
  67.   repeat
  68.     if List.SumBalls = Sum then
  69.       begin
  70.         Count += 1;
  71.         List.OutStudent(Count);
  72.       end;
  73.     List := List.Next;
  74.   until List = nil;
  75.   if Count = 0 then
  76.     WriteLn('Нет таких студентов.');
  77. end;
  78.  
  79. var
  80.   List : tStudents;
  81. begin
  82.   List := InputGroup;
  83.   OutNumbersOfBalls(List);
  84. end.

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

  1. В начале кода объявлены две константы: LessonsCount (количество предметов) и Lessons (массив строк, представляющих названия предметов). Значения по умолчанию для этих констант не указаны, поэтому предполагается, что они задаются в теле программы.
  2. Далее определён тип данных tStudents, представляющий студента. У этого типа есть свойства Name (имя студента) и Ball (массив оценок по предметам), а также методы SumBalls (сумма оценок) и OutStudent (вывод информации о студенте).
  3. Затем определена функция ContinueEntering, которая считывает ввод пользователя и проверяет, соответствует ли он одному из двух допустимых вариантов: '1yYдД0nNнН' или '0nNнН'. Если ввод корректен, функция возвращает значение 'true', иначе - 'false'.
  4. Функция InputGroup создаёт новый узел в списке студентов и добавляет его в конец списка. Затем она считывает данные для нового студента и добавляет его в список. Этот процесс повторяется до тех пор, пока пользователь не введёт '0nNнН'.
  5. Функция OutNumbersOfBalls выводит общее количество баллов, которое нужно найти, а затем перебирает список студентов, начиная с первого, и проверяет, совпадает ли сумма баллов студента с заданным значением. Если да, то выводит информацию о студенте.
  6. В конце кода определён основной список студентов List, который инициализируется вызовом функции InputGroup. Затем вызывается функция OutNumbersOfBalls для этого списка.
  7. Код не содержит явных ошибок, но его можно улучшить, например, добавив обработку ошибок при считывании данных или выводя более информативные сообщения об ошибках.

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


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

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

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

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

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

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