Внимательно рассмотрите условие продолжения цикла. В каком случае выполнение цикла продолжается? В каких случаях осуществляется выход из цикла?
В примере 3 выполняется последовательный поиск элемента, равного p, в массиве a[1..n], где n=10:
i:=1;
while (i<=n) and (a[i]<>p) do i:=i+1;
if i=n+1
then writeln('Искомого элемента в массиве нет')
else writeln('Искомый элемент a[', i, '] = ', a[i])
По определению логической операции and из §i<=n означает, что индекс ещё находится в пределах массива. Вторая часть a[i]<>p означает, что текущий элемент не равен искомому.
По правилу цикла с предусловием while тело выполняется, пока условие истинно. Поэтому поиск продолжается, если текущий элемент существует и ещё не подходит. Команда i:=i+ переводит поиск к следующему элементу.
Первая причина выхода — найден элемент: при некотором индексе от a[i]=p. Тогда вторая часть условия ложна. Индекс больше не увеличивается, а ветвь else выводит найденный элемент и его положение. Поскольку просмотр идёт слева направо, находится первое вхождение p.
Вторая причина выхода — просмотрены все элементы. После проверки последнего неподходящего элемента индекс увеличится с n до n+i=n+ подтверждает отсутствие p в массиве.
Например, при начале массива ложно, поэтому найден индекс
При выполнении исходной программы нужно использовать сокращённое вычисление логического and: когда i<=n ложно, обращение к a[i] уже не должно вычисляться. Иначе при i=n+{$B-}. Таким образом, два штатных результата поиска — первое совпадение или отсутствие элемента.
Цикл продолжается при i<=n и a[i]<>p. Выход: найдено первое совпадение a[i]=p либо достигнуто i=n+ и элемента нет. Условие следует вычислять сокращённо, без обращения к a[n+
