Найти и вывести фамилии тех студентов, которые все экзамены сдали на 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 для этого списка.
- Код не содержит явных ошибок, но его можно улучшить, например, добавив обработку ошибок при считывании данных или выводя более информативные сообщения об ошибках.
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д