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