Задать вопрос
@sulim000333

Циклы. While, do while, for, чем отличаются?

Прошу объяснить понятными определениями.. Я уже все перерыл и перечитывал, но мозгу все равно очень трудно осваивать это. Объясните мне как 3 летнему ребенкуXD))
  • Вопрос задан
  • 39661 просмотр
Подписаться 1 Простой 6 комментариев
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
While — сначала проверь, потом сделай, и так по кругу.
Do — сначала сделай, потом проверь, и так по кругу.

Отличаются они только случаем, когда условие не выполняется: while не пройдёт, а do пройдёт один раз.
// Пример 1.
// верно
while (впереди свободно) шаг;
// неверно — можно врезаться в препятствие, если нельзя сделать ни шагу
do шаг while (впереди свободно);

// Пример 2.
// Неверно — пока у вас в руках нет рубашки, условие цикла некорректно
while (рубашка грязная) возьми рубашку;
// верно
do возьми рубашку; while (рубашка грязная);


Циклы for, foreach и прочие — это разновидность цикла while (не do!!), сделанная для специального сценария: пройти некий набор объектов.
Ответ написан
Комментировать
Пригласить эксперта
Ответы на вопрос 4
webinar
@webinar
Учим yii: https://youtu.be/-WRMlGHLgRg
Слишком очевидный ответ, если посмотреть на примеры: www.php.su/learnphp/cs/?cycles

Допустим у Вас есть коробочка в которой хранятся бутылочки с "пивасиком" и бутылочки с "молоком"
Если Ваш батя попросил протереть все бутылки из коробочки - это foreach
Если каждую бутылку, пока в коробке не закончится пивасик - это while
Если каждую бутылку, пока протертых бутылок с пивасиком станет 4 - это тоже while
Если каждую бутылку, пока в коробке не закончится пивасик, но раз уж взял бутылку последнюю с молоком, то будь любезен протри - это do-while
Если с 3-й по 12-ю - это for
Если только с молоком - это мамка, а не батя
Ответ написан
@pestunov
Вообще, эти три цикла взаимозаменяемы, т.е. если есть программа, написана с помощью одного из них, то она всегда может быть переписана с помощью любого другого. Но по правилам хорошего стиля и для удобства рекомендации следующие:
for используется, когда число итераций известно (есть переменная или константа, которая определяет это количество).
while и do-while используются, когда число итераций заранее неизвестно.
while используется, когда существует возможность, что цикл не выполнится ни разу, а do-while следует использовать, если известно, что как минимум одна итерация всегда требуется.

Для примера:
for - выведите N чисел на экран (N определяет число итераций).
while - алгоритм Евклида для вычисления НОД (если одно из чисел 0, то итераций не будет)
do-while - реализация игры "Угадай число". (всегда требуется хотя бы одна попытка, то точное их число неизвестно).
Ответ написан
Комментировать
lxsmkv
@lxsmkv
Test automation engineer
Нам в школе так обьяснили:
while - в зависимости от условия тело цикла может быть не выполнено ни разу.
do while - тело цикла будет выполнено минимум один раз.

ну а for - будет выполняется для выбраных элементов последовательности (какие это будут элементы - указывается в условии). Тут можно задать периодичность, например, для каждого второго элемента.
Ответ написан
Комментировать
@Zanak
Как - то, почитал я ответы коллег, и остался разочарован. Понятно, что вопрос не простой, а очень простой, но можно и по аккуратнее в изложении. В общем, мои 5 копеек.
Любой цикл - это кусок кода, который обычно называют телом цикла, и который мы желаем выполнить несколько раз. Количество повторений может быть заданно заранее, например: цикл от 0 до 10, зависеть от данных, например: для каждого элемента массива или зависеть от значения, которое мы в теле цикла вычисляем, например: пока f(x) > 0 выполнять. По крайней мере, во всех известных мне языках программирования, есть оператор досрочного выхода из цикла.
while. Цикл с предварительным условием. Выполняется пока условие истинно. Проверка происходит до исполнения тела цикла. Если условие изначально ложно, то тело не выполнится ни разу. Если условие ни когда не станет ложным, то мы получим бесконечный цикл. Распространенные ошибки новичков, при использовании этого цикла:
- условие не зависит от переменных, которые изменяются в теле цикла, и оно всегда получается истинным
- условие ни когда не станет ложным, в силу его свойств, например: X * X >= 0 всегда верно
Пример на php:
$i = 1;
while ($i <= 10) {
    echo $i;
    $i++;
}

do ... while. Цикл с постусловием. Отличие от предыдущего в том, что тело цикла исполняется хотя бы один раз, и после этого происходит проверка условия выхода из цикла. К типичным ошибкам предыдущего вида циклов добавляется то, что этот цикл гарантированно исполняется один раз, что не всегда желательно.
В этом примере цикл отработает один раз, не смотря на то, что условие ложно:
$i = 0;
do {
    echo $i;
} while ($i > 0);

for. Чаще всего этот оператор описывает цикл с фиксированным количеством повторений. Вот так он может выглядеть, например, для php:
for ($i = 1; $i <= 10; $i++) {
    echo $i;
}

но есть языки, где этот - же оператор используется для описания цикла, перебирающего множество значений, например элементы массива. К возможным подводным камням этого вида циклов следует отнести порчу значения счетчика итераций. Изменять его, например для досрочного выхода из цикла, считается плохим стилем программирования, и в особо тяжелых случаях может приводить к трудно диагностируемым ошибкам.
Ответ написан
Комментировать
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Похожие вопросы