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

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

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

Во время выполнения программы возникает ошибка: Runtime error 201 at... . Может кто подскажет что не так?
Листинг программы
  1. PROGRAM BooksLibrary(INPUT, OUTPUT);
  2. CONST
  3. N = 3;
  4. TYPE
  5. BookType = RECORD
  6. Author: STRING;
  7. Title: STRING;
  8. Publishing: STRING;
  9. Year: INTEGER;
  10. Requests: INTEGER
  11. END;
  12. ArrType = ARRAY OF BookType;
  13. PROCEDURE BookSort(VAR BS_Arr: ArrType);
  14. TYPE
  15. SortedType = (NoSorted, YesSorted);
  16. VAR
  17. Sorted: SortedType;
  18. Temp: BookType;
  19. J: INTEGER;
  20. BEGIN
  21. Sorted := YesSorted;
  22. REPEAT
  23. BEGIN
  24. FOR J := 0 TO N - 1
  25. DO
  26. BEGIN
  27. IF BS_Arr[J].Requests > BS_Arr[J+1].Requests
  28. THEN
  29. BEGIN
  30. Temp := BS_Arr[J];
  31. BS_Arr[J] := BS_Arr[J+1];
  32. BS_Arr[J+1] := Temp;
  33. Sorted := NoSorted;
  34. END
  35. END
  36. END
  37. UNTIL (Sorted = NoSorted)
  38. END;
  39. VAR
  40. Arr: ArrType;
  41. I: INTEGER;
  42. Author, Title, Publishing: STRING;
  43. Year, Requests: INTEGER;
  44. BEGIN
  45. SETLENGTH(Arr, N);
  46. FOR I := 0 TO N - 1
  47. DO
  48. BEGIN
  49. WRITE('Author: ');
  50. READLN(Author);
  51. Arr[I].Author := Author;
  52. WRITE('Title: ');
  53. READLN(Title);
  54. Arr[I].Title := Title;
  55. WRITE('Publishing: ');
  56. READLN(Publishing);
  57. Arr[I].Publishing := Publishing;
  58. WRITE('Year: ');
  59. READLN(Year);
  60. Arr[I].Year := Year;
  61. WRITE('Requests: ');
  62. READLN(Requests);
  63. Arr[I].Requests := Requests;
  64. END;
  65. BookSort(Arr);
  66. FOR I := 0 TO N - 1
  67. DO
  68. BEGIN
  69. WRITELN('Author: ', Arr[I].Author);
  70. WRITELN('Title: ', Arr[I].Title);
  71. WRITELN('Publishing: ', Arr[I].Publishing);
  72. WRITELN('Year: ', Arr[I].Year);
  73. WRITELN('Requests: ', Arr[I].Requests);
  74. WRITELN;
  75. WRITELN;
  76. END
  77. END.

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

textual
Листинг программы
  1. PROGRAM BooksLibrary(INPUT, OUTPUT);//это вообще не нужно
  2. CONST N = 3;
  3. TYPE
  4.   BookType = RECORD
  5.                Author: STRING;
  6.                Title: STRING;
  7.                Publishing: STRING;
  8.                Year: INTEGER;
  9.                Requests: INTEGER
  10.              END;
  11.   ArrType = ARRAY OF BookType;
  12. PROCEDURE BookSort(VAR BS_Arr: ArrType);
  13. TYPE
  14.   SortedType = (NoSorted, YesSorted);
  15. VAR
  16.   Sorted: SortedType;
  17.   Temp: BookType;
  18.   J: INTEGER;
  19. BEGIN
  20. REPEAT
  21.   Sorted := YesSorted;
  22.   FOR J := 0 TO N - 2 DO//исправить
  23.   IF BS_Arr[J].Requests > BS_Arr[J+1].Requests THEN
  24.    BEGIN
  25.     Sorted := NoSorted;
  26.     Temp := BS_Arr[J];
  27.     BS_Arr[J] := BS_Arr[J+1];
  28.     BS_Arr[J+1] := Temp;
  29.    END
  30. UNTIL (Sorted = YesSorted)//исправить
  31. END;
  32.  
  33. VAR
  34.   Arr: ArrType;
  35.   I: INTEGER;
  36.   Author, Title, Publishing: STRING;
  37.   Year, Requests: INTEGER;
  38. BEGIN
  39.   SETLENGTH(Arr, N);
  40.   FOR I := 0 TO N - 1
  41.   DO
  42.     BEGIN
  43.       WRITE('Author: ');
  44.       READLN(Author);
  45.       Arr[I].Author := Author;
  46.       WRITE('Title: ');
  47.       READLN(Title);
  48.       Arr[I].Title := Title;
  49.       WRITE('Publishing: ');
  50.       READLN(Publishing);
  51.       Arr[I].Publishing := Publishing;
  52.       WRITE('Year: ');
  53.       READLN(Year);
  54.       Arr[I].Year := Year;
  55.       WRITE('Requests: ');
  56.       READLN(Requests);
  57.       Arr[I].Requests := Requests;
  58.     END;
  59.   BookSort(Arr);
  60.   FOR I := 0 TO N - 1
  61.   DO
  62.     BEGIN
  63.       WRITELN('Author: ', Arr[I].Author);
  64.       WRITELN('Title: ', Arr[I].Title);
  65.       WRITELN('Publishing: ', Arr[I].Publishing);
  66.       WRITELN('Year: ', Arr[I].Year);
  67.       WRITELN('Requests: ', Arr[I].Requests);
  68.       WRITELN;
  69.       WRITELN;
  70.     END;
  71. 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

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут