2.2 Цикл While – Wend
Перевод «While» — «пока». Здесь мы заранее не знаем, сколько будет итераций. Справа от While ставится условие. Если оно истинно, цикл выполняется. Если ложно, программа переходит к инструкции, следующей за циклом.
Важная деталь: этот цикл может не выполниться ни разу, если условие с самого начала ложно. Структура:
Пока условие истинно, выполняются инструкции внутри цикла. Предположим, условие — (x < 100). Пока x меньше 100, цикл повторяется. Подразумевается, что внутри цикла должно быть что-то, изменяющее значение x, чтобы рано или поздно оно стало равным или большим 100, и цикл завершился. Иначе цикл никогда не закончится, станет бесконечным, и компьютер «зависнет». Это считается ошибкой программирования. У цикла ВСЕГДА должен быть конец, даже если он наступит через часы или дни вычислений.
Пример цикла с конкретным условием:
Код: Выделить всё
Lee_Un_Dato(x)
While x < 100
Инструкция_1
Инструкция_2
Lee_Un_Dato(x)
Wend
Здесь из гипотетического файла читается переменная x; если она меньше 100, цикл продолжается: выполняются инструкции 1 и 2, снова читается x, и условие проверяется заново. Если условие выполняется — ещё одна итерация, если нет — программа идёт дальше после Wend.
Более надёжный вариант учитывает возможность достичь конца файла, не найдя значения, равного или большего 100. В этом случае цикл тоже должен завершиться, так как читать дальше конца файла нельзя:
Код: Выделить всё
Lee_Un_Dato(x)
While (x < 100) And Not(Eof)
Инструкция_1
Инструкция_2
Lee_Un_Dato(x)
Wend
Типичная логическая переменная во многих языках для определения конца файла — EOF (End Of File). Мы рассмотрим её в главе о файлах.
Я соединил условия x < 100 и Not(EOF) оператором AND, потому что для продолжения цикла нужно, чтобы x был меньше 100 И не был достигнут конец файла.
Первое условие я заключил в скобки (x < 100), поскольку математические и логические операции в информатике имеют приоритеты, которые можно менять скобками. Я посвящу отдельную главу этой тонкой, но важной теме: приоритеты логических и математических операторов.