Ошибка Runtime error 201 at., во время выполнения программы - Free Pascal

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

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

Во время выполнения программы возникает ошибка: Runtime error 201 at... . Может кто подскажет что не так?
PROGRAM BooksLibrary(INPUT, OUTPUT);
CONST
  N = 3;
TYPE
  BookType = RECORD
               Author: STRING;
               Title: STRING;
               Publishing: STRING;
               Year: INTEGER;
               Requests: INTEGER
             END;
  ArrType = ARRAY OF BookType;
PROCEDURE BookSort(VAR BS_Arr: ArrType);
TYPE
  SortedType = (NoSorted, YesSorted);
VAR
  Sorted: SortedType;
  Temp: BookType;
  J: INTEGER;
BEGIN
  Sorted := YesSorted;
  REPEAT
    BEGIN
      FOR J := 0 TO N - 1
      DO
        BEGIN
          IF BS_Arr[J].Requests > BS_Arr[J+1].Requests
          THEN
            BEGIN
              Temp := BS_Arr[J];
              BS_Arr[J] := BS_Arr[J+1];
              BS_Arr[J+1] := Temp;
              Sorted := NoSorted;
            END
        END
    END
  UNTIL (Sorted = NoSorted)
END;
 
VAR
  Arr: ArrType;
  I: INTEGER;
  Author, Title, Publishing: STRING;
  Year, Requests: INTEGER;
BEGIN
  SETLENGTH(Arr, N);
  FOR I := 0 TO N - 1
  DO
    BEGIN
      WRITE('Author: ');
      READLN(Author);
      Arr[I].Author := Author;
      WRITE('Title: ');
      READLN(Title);
      Arr[I].Title := Title;
      WRITE('Publishing: ');
      READLN(Publishing);
      Arr[I].Publishing := Publishing;
      WRITE('Year: ');
      READLN(Year);
      Arr[I].Year := Year;
      WRITE('Requests: ');
      READLN(Requests);
      Arr[I].Requests := Requests;
    END;
  BookSort(Arr);
  FOR I := 0 TO N - 1
  DO
    BEGIN
      WRITELN('Author: ', Arr[I].Author);
      WRITELN('Title: ', Arr[I].Title);
      WRITELN('Publishing: ', Arr[I].Publishing);
      WRITELN('Year: ', Arr[I].Year);
      WRITELN('Requests: ', Arr[I].Requests);
      WRITELN;
      WRITELN;
    END
END.

Решение задачи: «Ошибка Runtime error 201 at., во время выполнения программы»

textual
Листинг программы
PROGRAM BooksLibrary(INPUT, OUTPUT);//это вообще не нужно
CONST N = 3;
TYPE
  BookType = RECORD
               Author: STRING;
               Title: STRING;
               Publishing: STRING;
               Year: INTEGER;
               Requests: INTEGER
             END;
  ArrType = ARRAY OF BookType;
PROCEDURE BookSort(VAR BS_Arr: ArrType);
TYPE
  SortedType = (NoSorted, YesSorted);
VAR
  Sorted: SortedType;
  Temp: BookType;
  J: INTEGER;
BEGIN
REPEAT
  Sorted := YesSorted;
  FOR J := 0 TO N - 2 DO//исправить
  IF BS_Arr[J].Requests > BS_Arr[J+1].Requests THEN
   BEGIN
    Sorted := NoSorted;
    Temp := BS_Arr[J];
    BS_Arr[J] := BS_Arr[J+1];
    BS_Arr[J+1] := Temp;
   END
UNTIL (Sorted = YesSorted)//исправить
END;
 
VAR
  Arr: ArrType;
  I: INTEGER;
  Author, Title, Publishing: STRING;
  Year, Requests: INTEGER;
BEGIN
  SETLENGTH(Arr, N);
  FOR I := 0 TO N - 1
  DO
    BEGIN
      WRITE('Author: ');
      READLN(Author);
      Arr[I].Author := Author;
      WRITE('Title: ');
      READLN(Title);
      Arr[I].Title := Title;
      WRITE('Publishing: ');
      READLN(Publishing);
      Arr[I].Publishing := Publishing;
      WRITE('Year: ');
      READLN(Year);
      Arr[I].Year := Year;
      WRITE('Requests: ');
      READLN(Requests);
      Arr[I].Requests := Requests;
    END;
  BookSort(Arr);
  FOR I := 0 TO N - 1
  DO
    BEGIN
      WRITELN('Author: ', Arr[I].Author);
      WRITELN('Title: ', Arr[I].Title);
      WRITELN('Publishing: ', Arr[I].Publishing);
      WRITELN('Year: ', Arr[I].Year);
      WRITELN('Requests: ', Arr[I].Requests);
      WRITELN;
      WRITELN;
    END;
END.

Объяснение кода листинга программы

Список элементов кода:

  1. Объявление типов данных:
    • BookType (тип записи с полями Author, Title, Publishing, Year, Requests)
    • ArrType (массив типа BookType)
    • SortedType (тип перечисления для сортировки)
    • Temp (временная переменная типа BookType)
    • J (переменная-счетчик для цикла)
    • I (переменная-счетчик для цикла)
    • Author, Title, Publishing, Year, Requests (переменные для ввода данных)
    • Arr (массив для хранения данных о книгах)
  2. Процедура сортировки массива Arr по убыванию поля Requests:
    • BookSort (принимает в качестве параметра массив Arr и не возвращает ничего)
    • Sorted (переменная типа SortedType для хранения информации о том, отсортирован ли массив)
    • Temp (временная переменная типа BookType)
    • J (переменная-счетчик для цикла)
  3. Ввод данных о книгах:
    • Чтение данных в цикле (для каждой книги)
    • WRITE и READLN для вывода и чтения строк
    • Заполнение полей массива Arr
  4. Вывод отсортированных данных о книгах:
    • Вывод данных в цикле (для каждой книги)
    • WRITELN для вывода строк
  5. Ошибка Runtime error 201:
    • Ошибка может возникнуть при попытке чтения данных за пределами допустимого диапазона массива Arr (например, если введено больше 3 книг) Примечание: в коде присутствуют некоторые потенциальные проблемы, такие как отсутствие проверки на пустой ввод и отсутствие обработки ошибок при чтении данных.

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


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

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

6   голосов , оценка 4 из 5