Вывести сведения о студентах-хорошистах и подсчитать их количество - Pascal ABC
Формулировка задачи:
Решение задачи: «Вывести сведения о студентах-хорошистах и подсчитать их количество»
const EXCOUNT = 3; type TStudent = record name, group: String; exams: Array[1..EXCOUNT] Of 1..5; end; TStudentFile = File Of TStudent; procedure InputStudent(var s: TStudent); var i: 1..EXCOUNT; begin with s do begin Write('ФИО: '); ReadLn(name); Write('Группа: '); ReadLn(group); for i := 1 to EXCOUNT do begin Write('Оценка за ', i, '-й экзамен: '); ReadLn(exams[i]); end; end; end; function IsGoodStudent(const s: TStudent): Boolean; var Result: Boolean; //удалить строку при ошибке повторного идентификатора i: 1..EXCOUNT + 1; begin i := 1; repeat Result := (s.exams[i] > 3); Inc(i); until (Not Result Or (i > EXCOUNT)); IsGoodStudent := Result; end; function OpenFileWithCheck(var f: TStudentFile): Boolean; begin Assign(f, 'f.dat'); {$I-} Rewrite(f); {$I+} OpenFileWithCheck := (IOResult = 0); end; var ar: Array[Byte] Of TStudent; f: TStudentFile; i, count: Byte; n: Integer; openOk: Boolean; begin repeat Write('Введите количество студентов (1..256): '); ReadLn(n); until ((n > 0) And (n < 257)); for i := 0 to n - 1 do InputStudent(ar[i]); WriteLn; openOk := OpenFileWithCheck(f); if (Not openOk) then WriteLn('Ошибка открытия файла. Запись в файл не будет производиться!'); WriteLn; WriteLn('Список хорошистов:'); count := 0; for i := 0 to n - 1 do if (IsGoodStudent(ar[i])) then begin Inc(count); WriteLn(ar[i].name); if (openOk) then Write(f, ar[i]); end; WriteLn('----------------------------------------------'); if (count <> 0) then WriteLn('Всего: ', count) else WriteLn('Не найдено ни одного хорошиста!'); if (openOk) then Close(f); end.
Объяснение кода листинга программы
const EXCOUNT = 3; type TStudent = record name, group: String; exams: Array[1..EXCOUNT] Of 1..5; end; TStudentFile = File Of TStudent; procedure InputStudent(var s: TStudent); var i: 1..EXCOUNT; begin with s do begin Write('ФИО: '); ReadLn(name); Write('Группа: '); ReadLn(group); for i := 1 to EXCOUNT do begin Write('Оценка за ', i, '-й экзамен: '); ReadLn(exams[i]); end; end; end; function IsGoodStudent(const s: TStudent): Boolean; var Result: Boolean; //удалить строку при ошибке повторного идентификатора i: 1..EXCOUNT + 1; begin i := 1; repeat Result := (s.exams[i] > 3); Inc(i); until (Not Result Or (i > EXCOUNT)); IsGoodStudent := Result; end; function OpenFileWithCheck(var f: TStudentFile): Boolean; var ar: Array[Byte] Of TStudent; f: TStudentFile; i, count: Byte; n: Integer; openOk: Boolean; begin repeat Write('Введите количество студентов (1..256): '); ReadLn(n); until ((n > 0) And (n < 257)); for i := 0 to n - 1 do begin InputStudent(ar[i]); if (IsGoodStudent(ar[i])) then begin Inc(count); WriteLn(ar[i].name); if (openOk) then Write(f, ar[i]); end; end; WriteLn('----------------------------------------------'); if (count <> 0) then WriteLn('Всего: ', count) else WriteLn('Не найдено ни одного хорошиста!'); if (openOk) then Close(f); end; var ar: Array[Byte] Of TStudent; f: TStudentFile; i, count: Byte; n: Integer; openOk: Boolean; begin repeat Write('Введите количество студентов (1..256): '); ReadLn(n); until ((n > 0) And (n < 257)); for i := 0 to n - 1 do begin InputStudent(ar[i]); end; WriteLn; openOk := OpenFileWithCheck(f); if (Not openOk) then WriteLn('Ошибка открытия файла. Запись в файл не будет производиться!'); WriteLn; WriteLn('Список хорошистов:'); count := 0; for i := 0 to n - 1 do begin if (IsGoodStudent(ar[i])) then begin Inc(count); WriteLn(ar[i].name); if (openOk) then Write(f, ar[i]); end; end; WriteLn('----------------------------------------------'); if (count <> 0) then WriteLn('Всего: ', count) else WriteLn('Не найдено ни одного хорошиста!'); if (openOk) then Close(f); end;
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д