Вывести сведения о студентах-хорошистах и подсчитать их количество - Pascal ABC

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

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

Дан файл f, содержащий сведения о студентах: ФИО, группа, оценки за экзамены. Вывести в файл f1 и на экран сведения о студентах-хорошистах; подсчитать их количество. Использовать при решении подпрограммы. Предусмотреть проверку открытия файла.

Решение задачи: «Вывести сведения о студентах-хорошистах и подсчитать их количество»

textual
Листинг программы
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;

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


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

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

11   голосов , оценка 4.273 из 5
Похожие ответы