Название: Ошибки при выполнении программы. Опции компилятора
Вид работы: статья
Рубрика: Информатика и программирование
Размер файла: 15.29 Kb
Скачать файл: referat.me-140626.docx
Краткое описание работы: Умея пользоваться массивами, условными операторами и операторами цикла, вы мо-жете писать довольно серьезные программы. При выполнении этих программ неизбежно будут возникать критические ошибки, приводящие к аварийному завершению программы.
Ошибки при выполнении программы. Опции компилятора
С.А. Григорьев
Умея пользоваться массивами, условными операторами и операторами цикла, вы можете писать довольно серьезные программы. При выполнении этих программ неизбежно будут возникать критические ошибки, приводящие к аварийному завершению программы. Такие ошибки по английски называются Run-time errors - ошибки времени выполнения. Рассмотрим пока только наиболее часто встречающиеся арифметические ошибки:
Division by zero - код ошибки 200;
Arithmetic overflow - кодошибки 215;
Range check error - кодошибки 201;
Floating point overflow - кодошибки 205;
Invalid floating point operation - кодошибки 207.
Ошибка Division by zero - деление на ноль - возникает при выполнении операций DIV, MOD и /, когда делитель равен нулю.
Ошибка Arithmetic overflow - целочисленное переполнение - возникает при выполнении арифметической операции над целыми числами, когда результат операции выходит за границы соответствующего типа. Такая ошибка произойдет, например, при выполнении программы
VAR a,b : Word; c : Integer; BEGIN a:=100; b:=200; c:=a-b; END.
Ошибка произошла, когда вычислилось значение выражения a-b, равное
-100. Мы знаем, что при выполнении операции над операндами типа Word результат будет иметь тип Word, а -100 не является допустимым значением этого типа. То обстоятельство, что это значение мы собирались присвоить переменной типа Integer, не имеет значения, т.к. ошибка произошла до присваивания. Интересно, что, если описать a и b как Byte, то ошибки не будет (см. таблицу 2 в главе 5).
Ошибка Range check error - ошибка проверки диапазона - происходит в двух случаях. Во-первых, при попытке присвоить целочисленной переменной недопустимое значение, и, во-вторых, при использовании недопустимого индексного выражения для элемента любого массива. Проиллюстрируем оба эти случая на простых примерах.
VAR a,b,c : Word; BEGIN a:=$FFFF; b:=1; c:=a+b; END.
Мы попытались присвоить переменной типа Word значение 65536, которое не является допустимым для этого типа.
VAR x : ARRAY[2..8] OF Real; i : Byte;
BEGIN FOR i:=8 DOWNTO 1 DO x[i]:=Sqrt(i); END.
Ошибка произошла при обращении к первому элементу массива, который не существует. Фактически этот второй случай полностью аналогичен первому - мы попытались "присвоить" индексу массива, тип которого-2..8, значение 1.
Ошибка Floating point overflow - вещественное переполнение - возникает при выполнении операции над вещественными числами, когда результат операции слишком велик, или при попытке присвоить вещественной переменной слишком большое значение. Когда речь идет о вещественных числах, термин "слишком большое" следует понимать как большое по абсолютной величине - знак числа не имеет значения. Приведем пример программы, содержащей такую ошибку.
VAR r : Real; BEGIN r:=-1E20; r:=Sqr(r); END.
При возведении в квадрат величины r мы получим слишком большое для типа Real число 1E40.
Ошибка Invalid floating point operation возникает в трех случаях:
1) при вычислении корня из отрицательного числа;
2) при вычислении логарифма неположительного числа;
3) при вычислении функций Trunc и Round от слишком большого (по абсолютной величине) вещественного числа. Эта ошибка довольно очевидна, и мы не станем ее иллюстрировать.
Как же должен поступать программист, когда при выполнении его программы возникают ошибки? Прежде всего нужно локализовать ошибку, то есть найти оператор, в котором она произошла. В этом вам может помочь среда Turbo Pascal, если в ней правильно установлены опции компилятора. Опции компилятора позволяют изменять режим компиляции и задаются в подменю Compiler меню Options среды Turbo Pascal. Поканасбудутинтересоватьлишьпятьопций: Range checking, Stack cheking, I/O checking, Overflow checking, Debug information. Если они включены, то настройка среды благоприятна для отладки вашей программы. Если они выключены, то их обязательно следует включить, а еще лучше задать их непосредственно в тексте своей программы. Опции записываются в программе в виде:
{$ буква + / - }
Каждой опции соответствует своя буква (эти буквы выделены в подменю Compiler цветом), символ "+" означает включить, а символ "-" - выключить. В программе можно задать одну опцию, например, {$R+} или несколько опций - {$R+,I-,S+} . Некоторые опции можно записывать только в самом начале программы, другие могут размещаться в любом ее месте.
Опция Range checking (R) отвечает за контроль ошибок Range check error, Overflow checking (C) - за контроль ошибок Ariphmetic overflow, I/O cheking (I) - за контроль ошибок ввода-вывода. Смысл опции Stack cheking (S) будет объяснен несколько позже, а опция Debug information (D) включает в код программы отладочную информацию, что позволяет среде Turbo Pascal при аварийном завершении программы показать курсором оператор, в котором произошла ошибка. Позаботьтесь, чтобы при отладке программы перед первым ее оператором была строка {$R+,C+,I+,S+,D+} - это поможет вам найти и устранить все ошибки. Некоторые неопытные программисты выключают эти опции, тогда программа не прерывается при некоторых ошибках, а продолжает выполняться, на этом основании делается вывод, что программа верна. Это самообман - программа выполняется, но выполняется неправильно и никак не сообщает об ошибках.
Похожие работы
-
Интервальные типы данных. Оператор TYPE. Массивы
Интервальный тип - это некоторый подтип порядкового типа данных (вспомним, что порядковые типы - это ShortInt, Byte, Integer, Word, LongInt, Char и Boolean).
-
Операторы ввода-вывода
Простейший оператор ввода в Паскале - оператор READ, он записывается в виде: READ(имя,имя,...); где имя - имена переменных или типизированных констант. Вводимые значения задаются в виде допустимых в Паскале констант.
-
Обработка ошибочных ситуаций во встроенном языке системы 1С:Предприятие 7.7
В предыдущих версиях системы 1С:Предприятие любая ошибка, происшедшая при выполнении модулей встроенного языка приводила к завершению выполнения модуля и выдаче в окно сообщений информации о характере ошибки и модуле, в котором она произошла.
-
Программа "Учет выдачи и возврата книг"
Создание программы для учета выдачи и возврата книг. Методы создания четырех таблиц-справочников и основной таблицы. Создание базового, перекрестного, итогового запросов. Формирование форм. Формирование отчета по читателям и выданным книгам с итогами.
-
Операторы цикла в языке программирования Си++"
Рассмотрение принципов работы операторов, реализующих циклические алгоритмы: while (выполнение условия, пока заданное выражение истинное), do-while, for, break (прекращение работы из-за обнаружения ошибки), continue (пропуск "оставшейся" части итерации).
-
Прерывание BIOS
INT 13H: Дисковый ввод-вывод Этот сервис предоставляет прямой доступ к адаптерам дискеты и твердого диска. Рекомендуется там, где это возможно, использовать
-
Проблемы интеграции: Mercury Interactive QuickTest & TestDirector
Эта статья ориентирована на тестировщиков со средним и выше уровнем подготовки. Поэтому предполагается, что тестировщик знаком с такими инструментами компании Mercury Interactive как QuickTest (функциональное тестирование) и TestDirector.
-
Циклы в Паскале
Операторы цикла, присутствующие в языках программирования. Простой арифметический оператор цикла Паскаля, управление циклом с помощью переменной порядкового типа. Арифметический оператор цикла Паскаля с произвольным шагом, оператор цикла с предусловием.
-
Понятие и элементы массива
Массив - это коллекция переменных, которые имеют общее имя и базовый тип. Функциональные возможности, виды массивов и их характеристика. Основные требования к входным и выходным данным массива. Использование IF THEN для перехвата всех возможных ошибок.
-
Алгоритмические языки: использование процедур при работе с двумерными массивами
Особенности работы с процедурами и двумерными массивами, последовательность вызова процедур. Способы описания и использования многомерных массивов, назначение процедур, их описание и обращение к ним. Набор программы, ее отладка и тестирование данных.