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

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

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

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

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

textual
Листинг программы
const
  LessonsCount = 4;
  Lessons : array [1..LessonsCount] of String[15] =
           ('алгебра', 'геометрия', 'философия', 'информатика');
 
type
  tStudents = class
    Name : String[20];
    Ball : array [1..LessonsCount] of Byte;
    Next : tStudents;
    
    constructor (N : Integer);
    begin
      Name := ReadLnString('Введите ФИО студента № ' + N.ToString + ' :');
      for var L := 1 to LessonsCount do
        Ball[L] := ReadLnInteger('Введите оценку за предмет «' + Lessons[L] + '» =');
      Next := nil;
    end;
    
    function SumBalls : Integer;
    begin
      Result := 0;
      for var L := 1 to LessonsCount do
        Result += Ball[L];
    end;
    
    procedure OutStudent(N : Integer);
    begin
      Write(N:5, Name:20);
      for var L := 1 to LessonsCount do
        Write('   ', Lessons[L], ' : ', Ball[L]);
      WriteLn;
    end;
  end;
 
function ContinueEntering : Boolean;
begin
  var S : String;
  repeat
    S := ReadLnString(NewLine +
      '1 / Y - yes / Д - да : Продолжить ввод следующего студента' + NewLine +
      '0 / N - no / Н - нет : Закончить ввод данных' + NewLine +
      'Ваш выбор:');
  until (S.Length > 0) and '1yYдД0nNнН'.Contains(S[1]);
  Result := '0nNнН'.IndexOf(S[1]) < 0;
end;
 
function InputGroup : tStudents;
begin
  var N := 1;
  Result := new tStudents(N);
  var Last := Result;
  while ContinueEntering do
    begin
      N += 1;
      Last.Next := new tStudents(N);
      Last := Last.Next;
    end;
end;
  
procedure OutNumbersOfBalls(List : tStudents);
begin
  WriteLn;
  var Sum := ReadLnInteger('Сколько баллов:');
  WriteLn('Список студентов, набравших ', Sum, ' баллов:');
  var Count := 0;
  repeat
    if List.SumBalls = Sum then
      begin
        Count += 1;
        List.OutStudent(Count);
      end;
    List := List.Next;
  until List = nil;
  if Count = 0 then
    WriteLn('Нет таких студентов.');
end;
  
var
  List : tStudents;
begin
  List := InputGroup;
  OutNumbersOfBalls(List);
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
Похожие ответы