Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Pascal.doc
Скачиваний:
32
Добавлен:
12.03.2016
Размер:
3.29 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 переменная

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

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