Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Turbo-Pascal.7.0.doc
Скачиваний:
19
Добавлен:
08.11.2018
Размер:
3.66 Mб
Скачать

(5) Исправление ошибок. Отладка программы.

Сообщения об ошибках. Ошибки в программах делятся на те, которые Паскаль замечает, и на те, что не замечает и в принципе заметить не может. К первым относятся все синтаксические погрешности, например, BIGIN вместо BEGIN. Их Паскаль замечает еще на стадии компиляции. На стадии выполнения он замечает такие ошибки, как Sqrt(-25), то есть квадратный корень из ‑25. Но вот, если вы, желая возвести число a в куб, вместо a*a*a пишете a*a, то этого не заметит ни один язык в мире.

Обнаружив грамматическую ошибку, Паскаль выдает золотыми буквами на красном фоне краткое описание ошибки и ставит курсор в то место программы, где, по его мнению, она находится.

Обнаружив ошибку на стадии выполнения, Паскаль выдает белыми буквами на черном фоне окна пользователя сообщение Runtime error и иногда золотыми буквами на красном фоне краткое описание ошибки и ставит курсор в то место программы, где, по его мнению, она находится.

Вот наиболее типичные для начинающих сообщения об ошибках того и другого рода:

Сообщение

Перевод

Вероятная причина ошибки

Unexpected end of file

Неожиданный конец файла

Вы забыли поставить точку после последнего END. Или не совпадает количество begin и количество end

“;” expected

Ждал точку с запятой

Вы забыли поставить точку с запятой после предыдущего оператора

“,” expected

Ждал запятую

Вы указали слишком мало параметров в обращении к подпрограмме

“)” expected

Ждал скобку “)”

Вы указали слишком много параметров в обращении к подпрограмме

Unknown identifier

Неизвестное имя

Вы забыли описать это имя в разделе описаний

Неправильно записали стандартное имя, например, ReedLn вместо ReadLn

Type mismatch

Несовпадение типов

В вашей программе встречаются примерно такие «сладкие парочки»: VAR c:String; … c:=1+2 или VAR h:Integer; … h:=9/7

Duplicate identifier

Дубль имени

Одно и то же имя описано два раза. Например, VAR a, c, a :String;

Syntax error

Синтаксическая ошибка

Паскаль затрудняется назвать причину ошибки. Часто причина в том, что вы забыли взять строковую константу в кавычки

BEGIN expected

Ждал BEGIN

Возможно, не совпадает количество begin и количество end

END expected

Ждал END

Возможно, не совпадает количество begin и количество end

String constant exeeds line

Строковая константа превышает допустимую длину

Вы забыли закрыть кавычки в строковой константе

Line too long

Строчка слишком длинна

Слишком длинная строчка в программе (не путать со строковой константой, которую нужно брать в кавычки). Не рекомендую залезать программным текстом за правый край экрана

Disk full

Диск заполнен

На вашем диске не осталось места. Надо что-то стереть

Lower bound greater than upper bound

Нижняя граница диапазона больше верхней

Например, вы вместо array[2..5] написали array[5..2].

Invalid floating point operation

Неправильная операция с вещественным результатом

Sqrt(-25) или a/0 или что-нибудь в этом роде

Ordinal expression expected

Ждал выражение порядкового типа

Например, вы вместо for i:=1 to 8 написали for i:=1 to 8.5

Error in expression

Ошибка в выражении

Например, вы вместо k:=а*8 написали k:=а**8

Range check error

Ошибка проверки диапазона

Переменная в процессе выполнения программы вышла за пределы допустимого диапазона, как например, в 1.9

Constant out of range

Константа не в диапазоне

Величина константы в программе превосходит допустимый диапазон

Invalid numeric format

Неправильный числовой формат

Если, например, вы по оператору ReadLn(k) в программе VAR k:Integer; …. ReadLn(k) … пытаетесь ввести число 25.3

Более подробное описание некоторых ошибок вы найдете в 0.3.

Понять смысл многих других сообщений об ошибках вам поможет перевод некоторых часто встречающихся в сообщениях слов:

expected ждал

identifier имя

invalid неправильный

operation операция

error ошибка

variable переменная

Невозможно создать компилятор, который бы всегда точно находил место и причину ошибки. Поэтому приготовьтесь к тому, что некоторые сообщения вы будете долго разглядывать в недоумении. Считайте их не реальными ошибками, а намеками на реальные ошибки.

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]