Проверяйте ситуацию ВЫХОД ЗА ПРЕДЕЛЫ МАССИВА!
· Установите автоматическую проверку выхода за пределы массива
В меню Project выберите пункт Options (условия) и в открывшемся окне Project Options (рисунок 3.6) установите галочку для автоматической проверки выхода за пределы массива – Compile/Range checking.
Если в процессе работы программы происходит выход за пределы массива, то выполнение будет прервано и выдано сообщение об ошибке. Таким образом, в процессе отладки программы Вы будете проинформированы о возникновении этой ситуации и сможете устранить ее причину.
Рисунок 3.6 – Установка свойства Range checking для проверки выхода за пределы массива
· Пример. Поиск в массиве
Рассмотрим реализацию алгоритма поиска наименьшего номера K элемента массива (A: array[1..N] of integer), значение которого равно заданному X: .
Вариант 1
i:=1;
while (A[ i ]< >X) and (i <= N) do
i:=i+1;
if A[ i ] = X then
K:=i
Else
. .. {элемент не найден};
Этот, очевидный на первый взгляд, код содержит фатальную ошибку.
Пусть i = N и A[ i ]< >X – в этом случае условие продолжение цикла истинно. Тогда i = i + 1 = N+1 и при вычислении выражения A[ i ]< >X в заголовке цикла происходит выход за пределы массива – A[ i ] à A[N+1]!
|
|
Надеюсь, Вы легко исправите заголовок цикла так, чтобы исключить выход за пределы массива.
Вариант 2
Исключим из заголовка цикла проверку A[ i ]< >X. Вместо этого будем использовать логическую переменную Found.
i:=1;
Found:= false; // элемент не найден
while (not Found) and (i <= N) do
if A[ i ] = X then
Found:= true // элемент найден
Else
i:=i+1;