Отладка программы

Массивы символов.

Массивы символов и массивы строк удобно использовать, когда количество символов в обрабатываемой последовательности более 255. Максимальное количество символов в массивах символов и строк не должно превышать 216 . Для массивов строк должно выполняться условие M * (N+1) < 216 , где M - количество элементов в строковом массиве; N - размер строки.

Правила.

Массиву символов можно сразу присвоить значение строковой константы, если длина константы равна длине массива. Например

Var MS, Mt : Array [1..6] Of Char;

. . . . . . . . .

Ms := '123456'; .

Если символьные массивы одного типа, то можно применять операцию присваивания, например

Ms := Mt;

 

4.15.6. Обработка символьных данных.

1.Обработка проводится в соответствии с алгоритмом. Например, если надо определить класс символа (цифра это или буква) то условный оператор можно записать так

If ( Ms[k] >= '0' ) And ( Ms[k] <='9') Tnen . . . .

2.Ввод и вывод. Для строковых достаточно прость указать имя

Var St: String[10];

. . . . . . .Read ( St );

Write ( St ) ; {нельзя Read[St[k]}.

При вводе символьных массивов можно использовать следующие варианты:

- ввод заданного количества символов

For K := 1 To N Do Read (Ms[k]);

- ввод до специального признака

Const Pk = ' # ';

K := 1 ; Repeat

Read ( Ms[k] ) ; K := K+1;

Until Ms[k-1] = Pk ;

- ввод до признака конца строки, например так

- K := 1;

- While Not Eoln Do Begin

Read (Ms[K]); K := K+1;

End; {это ввод с клавиатуры}

Этот вариант работает, выход по признаку EOLN. Если сделать EOF , то если на строке набрать АВС , то в массиве будет АВС#13#10 и далее снова ожидает ввода. Если сделать Not Eoln, то работает нормально, причем если длина массива меньше, чем количество введенных символов, то цикл продолжается пока не достигнет конца строки. (возможно, что был отключен контроль массива и поэтому продолжает вводить в область после массива - уточнить).

 

Отладка программы - это этап разработки программы, на котором с помощью ЭВМ осуществляется поиск и исправление ошибок в программе. Цель отладки - показать, что программа правильно решает поставленную задачу. Ошибки в программе могут быть двух типов: ошибки в записи предложений программы и ошибки в алгоритме. Такое деление является достаточно условным, т. к. некоторые синтаксические ошибки могут приводить к ошибкам алгоритмического характера.

Поиск и исправление синтаксических ошибок в программе называется синтаксической отладкой. Поиск и исправление алгоритмических ошибок в программе называется алгоритмической отладкой.

 

4.16.1. Синтаксическая отладка.

После ввода текста программы в ЭВМ сначала надо преобразовать ее в машинную программу с помощью специальной программы, называемой компилятором (транслятором). В процессе этого преобразования компилятор проверяет исходный текст программы на соответствии правилам языка программирования. Если в программе встречается синтаксическая ошибка, то компилятор прекращает обработку программы и выдает диагностическое сообщение, причем курсор располагается в том месте программы, где компилятор обнаружил нарушение правил языка программирования.

Следует иметь в виду, что компилятор обнаруживает не все ошибки в программе и не все предложения, указанные как ошибочные, действительно содержат ошибки. Например, компилятор не может обнаружить ошибки в арифметических операциях (" + " вместо " - ", умножение вместь деления и т.п.), ошибки в списках фактических и формальных параметров процедур и функций (например, несоответствие списков по порядку следования) и т.п.

В процессе отладки по отношению к каждой ошибке надо выполнять четыре действия:

- обнаружение ошибки;

- определение причины ошибки;

- исправление ошибки;

- проверка правильности исправления ошибки.

При анализе диагностических сообщений необходимо иметь в виду, что транслятор реагирует не на причину ошибки, а на ее последствия. Поэтому, например, если в выражении Y:=z*1.25 будет пропущен символ операции умножения (т. е. записано Y:= z125), то компилятор выдаст сообщение "unknown identifier" (неизвестный идентификатор z125), так как последовательность символов справа от оператора присваивания он будет понимать как имя переменной, а не как математическое выражение.. Аналогичное сообщение будет выдано и в случае, когда в программе используется переменная не объявленная в разделе Var. Очевидно, что в первом случае надо исправлять арифметическое выражение, а во втором - указать тип переменной в разделе Var.

В процессе синтаксической отладки необходимо вручную проверить следующее:

- правильность записи арифметических выражений, если арифметическое выражение из программы снова записать в алгебраической форме, то должно получиться исходное выражение;

- правильность записи списков фактических и формальных параметров подпрограмм (соответствие по количеству, порядку следования и типу);

- все ли переменные определены к моменту выполнения того или иного предложения.

Переменная будет определена если она появляется до проверяемого предложения:

- в левой части оператора присваивания;

- в списке процедуры ввода;

- в списке выходных фактических параметров.

-

4.16.2. Алгоритмическая отладка.

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

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

Одной из функций операционной системы является обработка прерываний, возникающих при нарушении нормального хода выполнения программы. Обычно при этом ЭВМ прекращает выполнение программы и выдает диагностическое сообщение об ошибке (часто их называют ошибками периода выполнения ). При выполнении программы сообщение об ошибках периода выполнения могут появляться в следующих случаях:

- если значение результата вычисления арифметического выражения выходит за пределы допустимого диапазона значений;

- если аргумент библиотечной функции имеет недопустимое значение (например, отрицательное значение под знаком корня или логарифма);

- если ЭВМ не может выполнить операцию (например, делитель равен нулю);

- если значение переменной не определено к моменту выполнения той или иной операции с этой переменной.

-

4.16.3. Отладка программы в системе программирования.

В основе системы программирования Delphi лежит язык Object Pascal (объектный Паскаль), который является расширением языка Turbo Pascal. Средства и основные приемы отладки программ, рассматриваемые здесь можно использовать при создании программ как в Turbo Pascal, в Object Pascal, так и в системе программирования Delphi.

1. Пошаговый режим выполнения программы.

Для выполнения программы в пошаговом режиме используются следующие команды меню Run (или соответствующие им функциональные клавиши).

Run/Goto Cursor (или клавиша F4) - в этом случае будет выполнена часть программы до строки, на которой располагается курсор и затем ЭВМ переходит в режим ожидания дальнейших команд. В этом режиме можно установить курсор на новую строку и, нажав F4, продолжить выполнения программы до строки с курсором.

Trace Into (F7) - в этом случае программа останавливается на первом выполняемом операторе программы, т. е. на ключевом слове Begin раздела операторов. При каждом нажатии на клавишу F7 выполняется по одной строке программы (независимо от количества операторов на строке). Если в программе используются подпрограммы, то они также выполняются в пошаговом режиме.

Step Over (F8) - этот режим аналогичен предыдущему, но подпрограммы выполняются не по шагам, а полностью. Все эти режимы можно комбинировать в одном сеансе отладки. Для выхода из этих режимов отладки необходимо нажать комбинацию клавиш Ctrl + F2.

2. Контроль значений переменных.

Для наблюдения за значениями переменных в режимах Trace Into и Step Over в среде программирования имеется специальное окно Watches, для использования которого необходимо:

- установить курсор на имя переменной, значение которой надо выводить в окне отладки;

- выполнить команды:Debug/AddWatch (или Ctrl + F7) - появится окно AddWatch;

- если имя переменной в этом окне указано правильно, то можно нажать OK.

В нижней части экрана монитора появится окно Watches, в котором будет строка с именем выбранной переменной. Подобным образом можно указать в окне Watches и другие переменные, за значениями которых программист желает наблюдать в процессе выполнения программы. Окно Watches закрывается при активизации окна редактирования. Открыть окно Watches можно с помощью команды Debug/Watch. Заметим, что имя переменной можно просто напечатать в окне AddWatch.