Проанализируйте следующий цикл:
while a < b do
c := a = b
В чём его особенность?
Условие a < b проверяется перед выполнением тела цикла. В теле меняется только c: в неё записывается логическое значение сравнения a = b. Значения a и b не изменяются, значит, истинность условия a < b остаётся прежней.
Если при входе a < b ложно, тело не выполнится ни разу и c не получит нового значения. Если a < b истинно, то a = b ложно; в c снова и снова записывается false. После каждого повторения условие a < b остаётся истинным, поэтому цикл бесконечен. Чтобы цикл мог завершиться, в его теле пришлось бы менять хотя бы одно из значений, участвующих в условии.
При a < b цикл бесконечен; при a >= b тело не выполнится ни разу. В теле не меняются a и b.
