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