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