ВУЗ:
Составители:
Рубрика:
143
{ если обработан элемент a[i],
то обработать a[j]; j:=j+1;
иначе обработать a[i]; i:=i+1 }
Анализируя рассмотренные схемы перебора, можно заметить, что в правильно
построенной схеме обязательно должны присутствовать блок установки начальных
значений индексов массива, блок проверки индекса (индекс не должен выходить за
границы индексов массива), блок изменения индекса для перехода к следующему
элементу массива, причем
, за блоком изменения индекса по времени выполнения
должен располагаться блок проверки индекса на принадлежность интервалу,
определенному границами массива. Если будет нарушено хотя бы одно из
перечисленных условий, то в процессе выполнения программы возникнут ошибки.
Рассмотрим пример. Пусть схема перебора элементов массива по одному
запрограммирована следующим фрагментом:
i:=1;
while i<=n do
begin i:=i+1;
{обработка a[i]}
end.
В этом
фрагменте элемент a[1] не будет обработан, кроме этого будет
осуществлена попытка обратиться к элементу массива a[n+1], а так как такого
элемента не существует, то это приведет к ошибке. В данном примере нарушено
требование обязательной проверки индекса после его изменения. Для исправления
ошибок заметим, чтобы индекс попадал в интервал от 1 до n, условие окончания
цикла должно проверять индекс на попадание в интервал от 0 до n-1. Тогда
фрагмент с исправлениями будет иметь вид
i:=0;
while i<n do
begin i:=i+1;
{обработка a[i]}
end.
Рассмотрим еще один пример. Пусть задача предыдущего примера реализована
следующим фрагментом:
i:=1;
while i<=n do
{обработка a[i]};
i:=i+1;
При попытке исполнения приведенного фрагмента компьютер зациклится.
Здесь нарушено условие, требующее обязательного изменения индекса массива
после обработки очередного элемента
. Ошибка возникла потому, что по правилам
Паскаля телом оператора цикла является только один, следующий за ключевым
словом do оператор (до ближайшей точки с запятой). Если в тело цикла входит
более одного оператора, то из них необходимо образовать составной оператор,
объединив несколько операторов в один с помощью операторных скобок begin end.
После исправления получим
фрагмент, совпадающий с первым случаем.
Случай 4. Перебрать элементы массива с четными индексами, двигаясь от
начала к концу.
143
{ если обработан элемент a[i],
то обработать a[j]; j:=j+1;
иначе обработать a[i]; i:=i+1 }
Анализируя рассмотренные схемы перебора, можно заметить, что в правильно
построенной схеме обязательно должны присутствовать блок установки начальных
значений индексов массива, блок проверки индекса (индекс не должен выходить за
границы индексов массива), блок изменения индекса для перехода к следующему
элементу массива, причем, за блоком изменения индекса по времени выполнения
должен располагаться блок проверки индекса на принадлежность интервалу,
определенному границами массива. Если будет нарушено хотя бы одно из
перечисленных условий, то в процессе выполнения программы возникнут ошибки.
Рассмотрим пример. Пусть схема перебора элементов массива по одному
запрограммирована следующим фрагментом:
i:=1;
while i<=n do
begin i:=i+1;
{обработка a[i]}
end.
В этом фрагменте элемент a[1] не будет обработан, кроме этого будет
осуществлена попытка обратиться к элементу массива a[n+1], а так как такого
элемента не существует, то это приведет к ошибке. В данном примере нарушено
требование обязательной проверки индекса после его изменения. Для исправления
ошибок заметим, чтобы индекс попадал в интервал от 1 до n, условие окончания
цикла должно проверять индекс на попадание в интервал от 0 до n-1. Тогда
фрагмент с исправлениями будет иметь вид
i:=0;
while iСтраницы
- « первая
- ‹ предыдущая
- …
- 139
- 140
- 141
- 142
- 143
- …
- следующая ›
- последняя »
