Как работает цикл while. Циклы. Примеры использования оператора цикла for
Одним из важнейших инструментов в программировании являются циклы. Они полезны в случаях, когда нужно сделать что-то определённое кол-во раз.
Если будет такая задача, например, вывести на экран строку "всем привет" 1000 раз. То, без использования цикла, во первых это займёт много времени и во вторых, это будет смотреться не очень красиво. Поэтому циклы нужно знать на отлично , потому что они используются очень и очень часто.
В программировании существуют четыре цикла, это while, do-while, for и foreach . Каждый из них имеет свой синтаксис и каждый используется в определённых случаях.
Чаще всего используются циклы for и foreach, затем while, а цикл do-while встречается очень редко.
И начнём мы с цикла while.
Синтаксис цикла while следующий:
Сначала объявляем переменную i, которая является счётчиком и внутри цикла мы этот счётчик инкрементируем. Внутри круглых скобок пишем условие входа/выхода из цикла.
Замечание! Пишите условие выхода правильно, иначе может получиться бесконечный цикл и тогда скрипт зависнет . Такой цикл может получиться, если например, в условие выхода, напишем просто true.
Для примера выведем строку "Всем привет!" 10 раз.
Var i = 0; while(i "); i++; }
Переменная i, может начаться как с 0 так и с 1 или с другого любого числа.
Условие выхода является в тоже время и условием входа. Цикл работает следующим образом: Сначала проверяется если переменная i, меньше 10, и если условие истина, то мы входим в цикл, иначе, нет. В данном случае если переменная i будет равна 30, например, то цикл не выполнится, потому что 30 не меньше 10.
Зашли цикл, вывели строчку "Всем привет", инкрементировали счётчик и опять переходим к условию, где опять проверяем если значение переменной i, меньше 10, то мы входим в цикл, иначе выходим из него. И так происходит до того момента когда условие входа станет лож, то есть значение переменной i будет 10. 10 не меньше 10, поэтому мы уже не входим в цикл, а идём дальше.
Замечание! Не забудьте инкрементировать счётчик (i++), иначе опять же получится бесконечный цикл.
С циклом while разобрались, теперь перейдём к циклу do-while.
Синтаксис цикла do-while следующий:
Разница между циклом while и do-while состоит в том, что цикл do-while может выполниться хотя бы один раз, независимости от условия, тогда как у цикла while если условие лож, то он вообще не выполнится.
Замечание! Как и у цикла while, не забудьте инкрементировать счётчик i.
Перейдём к практике. Для примера посчитаем произведение чисел от 1 до 10.
Var i = 1; var production = 1; do{ production *= i; i++; }while(i
Результатом будет число 3628800. На первом шаге мы сразу вошли в цикл, несмотря на его условие, где выполнилось операция production *= i (это тоже самое что и production = production * 1). Потом инкрементируем счётчик. После инкрементации он имеет значение 2. И в конце проверяем условие, если значение счётчика меньше либо равно 10, то мы идём к следующей итерации цикла, иначе мы выходим из цикла и идём дальше.
Цикл for
Как я уже написал выше цикл for, встречается достаточно часто, поэтому его нужно знать очень хорошо.
Синтаксис цикла for следующий:
Для лучшего понимания решим простую задачу. Допустим нам нужно посчитать сумму чисел от 1 до 1000 с помощью цикла for.
Var summa = 0; for(var i = 1; i
Сохраняем документ, открываем его в браузере и видим, что результат равен 500500.
Замечание! Если в цикле находится только одни оператор, то фигурные скобки использовать необязательно.
Для демонстрации выведем на экран 5 раз, какую то строку, например " Здравствуйте! ".
For(var i = 1; i
Замечание! После выполнения цикла в переменной i, остаётся последнее значение.
Теперь решим задачу чуть по сложнее, например нам нужно вывести строку "Привет" 100 раз. И для того чтобы это все не вывелось в один ряд, то после каждой 10-ой итерации, перейдём на новую строку. И в конце выведем значение переменной i.
For(var i = 1; i <= 100; i++){
document.write("привет!");
if(i % 10 == 0) document.write("
");
}
document.write("
Переменная i = " + i + "
"); // i = 101Цикл foreach обычно используется для перебора объектов и массивов. Поэтому о нем я расскажу в статье описывающая работу с массивами.
Оператор break предназначен для того чтобы принудительно выйти из цикла.
Оператор continue позволяет прервать текущую итерацию цикла, и перейти к следующей.
Для лучшего понимания, тоже решим простую задачу. Допустим, мы хотим посчитать сумму нечётных чисел с 1 до 20. И когда дойдём до 15-ой итерации, то выйдем из цикла.
Var summa = 0;
for(var i = 1; i <= 20; i++){
//Пропускаем текущею итерацию цикла
if(i % 2 == 0) continue;
summa += i;
//Выходим совсем из цикла.
if(i == 15) break;
document.write(i + ". Итерация
");
}
document.write("
summa = " + summa + "
"); //summa = 64Сохраняем документ, открываем его в браузере и смотрим на результат.
Для тренировки попробуйте изменить написанный скрипт, таким образом, чтобы он посчитал сумму чётных чисел.
На этом заканчивается эта статья. Теперь Вы знаете синтаксис циклов while, do-while, for и как с ними работать . Также познакомились с операторами break и continue .
Цикл Do While... Loop в VBA Excel, его синтаксис и описание отдельных компонентов. Примеры использования цикла Do While... Loop.
Цикл Do While... Loop в VBA Excel предназначен для повторения блока операторов пока выполняется заданное условие (возвращается значение True). Синтаксис этого цикла аналогичен синтаксису , который повторяется до тех пор, пока условие не выполняется (возвращается значение False).
Синтаксис цикла Do While... Loop
Синтаксис цикла Do While... Loop существует в двух вариантах, определяющих, когда проверяется условие.
Условие проверяется до выполнения операторов:
Do While condition [ statements ] [ Exit Do ] [ statements ] Loop
Условие проверяется после выполнения операторов:
Do [ statements ] [ Exit Do ] [ statements ] Loop While condition
В квадратных скобках указаны необязательные атрибуты цикла Do While... Loop.
Компоненты цикла Do While... Loop
*Если не использовать в цикле свой код, смысл применения цикла теряется.
**Очень полезный оператор для цикла Do While... Loop, так как при некоторых обстоятельствах он может стать бесконечным. Если такой риск существует, следует предусмотреть возможность выхода из бесконечного цикла VBA с помощью оператора Exit Do.
Примеры циклов Do While... Loop
Простейшие циклы
Цикл Do While... Loop с условием до исполняемых операторов:
Sub test1() Dim a As Byte Do While a < 10 a = a + 1 Loop MsgBox a End Sub
Цикл Do While... Loop с условием после исполняемых операторов:
Sub test2() Dim a As Byte Do a = a + 1 Loop While a < 10 MsgBox a End Sub
В обоих случаях окно MsgBox выведет число 10. Когда значение переменной a будет равно 10, проверяемое условие выдаст значение False , и цикл будет остановлен.
Проход по строкам листа
У двух белок дупла расположены напротив друг друга. В каждом дупле по 100 шишек. В свободное время они бросают шишки в дупло напротив, попадают не всегда. Ниже, в таблице, указано количество шишек, брошенных каждой белкой, и сколько их попало в цель.
Исходя из этих данных необходимо узнать, сколько шишек осталось у Белки 1 в дупле. Для этого необходимо вычесть из 100 шишек количество выброшенных Белкой 1 и прибавить шишки, заброшенные в ее дупло Белкой 2. Вычисления начинаем со второй строки (в первой заголовки) и в условии для цикла Do While... Loop указываем «первая ячейка текущей строки не является пустой». Таблица должна начинаться с первой ячейки рабочего листа «A1», и под ней, как минимум, одна строка должна быть пустой, точнее, первая ячейка этой строки.
Sub test3() Dim i As Long, n As Long i = 2 n = 100 Do While Cells(i, 1) <> "" If Cells(i, 2) = "Белка 1" Then n = n - Cells(i, 3) Else n = n + Cells(i, 4) End If i = i + 1 Loop MsgBox n End Sub
Результат, выведенный в информационном сообщении MsgBox, будет равен 40. Вы можете скопировать таблицу на рабочий лист книги Excel и поэкспериментировать с кодом VBA.
Бесконечный цикл и Exit Do
Пример бесконечного цикла:
Sub test4() Dim a As Byte Do While a < 10 a = a + 1 If a = 9 Then a = 0 End If Loop End Sub
При запуске этой процедуры цикл Do While... Loop начинает выполняться бесконечно. Мне приходилось останавливать бесконечные циклы VBA в Excel 2000 и Excel 2016. В Excel 2000 помогло сочетание клавиш Ctrl+Break , а в Excel 2016 при закрытии редактора VBA крестиком появляется окно:
Ожидать отклика программы нет смысла, поэтому нажимаем «Перезапустить программу» или «Закрыть программу».
Пример использования оператора Exit Do :
Sub test5() Dim a As Byte, n As Long Do While a < 10 a = a + 1 n = n + 1 If a = 9 Then a = 0 End If If n = 1000 Then Exit Do End If Loop MsgBox n End Sub
Когда число итераций цикла дойдет до 1000, он будет завершен, и информационное сообщение MsgBox выведет на экран число повторений цикла Do While... Loop из этого примера.
В некоторых случаях необходимо выполнять код до тех пор, пока не будет достигнут нужный результат. Для этого PHP предоставляет циклы while , for и foreach .
Синтаксис цикла while в PHP
Синтаксис цикла while :
Пример использования цикла while в PHP :
В примере цикла while в php , приведенном выше, сначала инициализируется переменная счётчика $ i значением 0 .
Условие цикла while – это $ i < 10 . Это означает, что мы проверяем, меньше ли переменная, чем 10.
Всё, что заключено в фигурные скобки – это инструкции (тело ) цикла. Они повторяются до тех пор, пока условие возвращает значение true . В примере, приведенном выше, $ i выводится на экран, а затем переменная счётчика увеличивается на 1. Это важно чтобы условие цикла, в конце концов, перестало соблюдаться. Если условие цикла соблюдается всегда, например, потому что вы забыли увеличить переменную счётчика $ i , тогда скрипт войдёт в бесконечный цикл. К счастью, через некоторое время PHP прекратит выполнение вашего скрипта.
Вы можете сделать как условие цикла, так и тело цикла сколь угодно сложными. Например, использовать while внутри while php, использовать php while для перебора массива (array ) или определить более одной переменной счётчика:
$min) {
echo "count1: $count1; count2: $count2
";
$ counter1 += 2; // Сокращённое выражение для $counter1 = $counter1 + 2;
$counter2 -= 3; // Сокращённое выражение для $count2 = $count2-3;
}
?>
В примере определяются две переменные: $ counter 1 и $ counter 2 . Одна переменная увеличивается на 2, а другая уменьшается на 3. Цикл while выполняется, пока соблюдаются оба условия $ count 1 < $ max и $ count 2 > $ min .
Влияние ключевых слов break и continue на цикл
С помощью команды break можно прервать процесс выполнения цикла while в PHP . Допустим, мы ищем определённого пользователя. Тогда можно пройти по всем пользователям в цикле while . Если найдём нужного пользователя, то остановим цикл с помощью ключевого слова break .
Простой пример использования ключевого слова break :
while ($count < $max) { if ($count == 10) { echo "Останавливаемся на числе 10"; break; } echo "$count,"; $counter += $increment; // увеличивает $count на значение $increment } ?>
Этот код перебирает числа по возрастанию от 0 до $max = 30 , прибавляя к переменной $ count значение $ increment , другими словами число 2. Но если переменная $ count будет равна 10, произойдет выход из цикла while в php .
Ключевое слово continue не завершает цикл while в php полностью , а лишь пропускает оставшуюся часть тела цикла. Приведенный ниже пример демонстрирует это:
while ($count < $max) {
$counter += $increment; // увеличивает $payer на $increment
if ($count >= 10 && $count <= 15) {
echo "Число между 10 и 15
";
continue;
}
echo "$count
";
}
?>
Этот цикл начинается с 0 и увеличивает счётчик до значения $ max . Переменная $ counter всегда увеличивается на значение переменной $ increment . То есть принимает значения 0, 2, 4 и т.д.
Если переменная $ count имеет значение между 10 и 15, на экран будет выведен текст и оператор continue пропустит остальные выражения в теле цикла. В результате мы видим, что числа 10, 12 и 14 не выводятся.
Цикл do-while в PHP
Небольшой модификацией while является цикл do — while . В данном случае условие цикла проверяется только после выполнения его тела. Это значит, что тело цикла выполнится хотя бы один раз.
Синтаксис цикла do-while :
Предположим, что мы хотим сгенерировать случайное число, которое должно быть либо между 0 и 10, либо между 20 и 30. Согласно определению функции rand ($ min , $ max ) , можно случайным образом сгенерировать число между $ min и $ max :
10 && $random < 20) {
$random = rand (0, 30);
}
echo "Наше случайное число: $random";
?>
Используя php цикл do — while , можно получить значение выражения без инициализации переменной $ random . Тело цикла выполняется перед тем, как проверяется условие. Тогда пример, приведенный выше, будет выглядеть следующим образом:
10 && $random < 20);
echo " Наше случайное число: $random";
?>
Новичка цикл do-while может слегка сбить с толку. Если вы до конца не понимаете его цели, то это не проблема. Циклы do-while редко используются на практике.
В этой статье будут рассмотрены еще два цикла: while и do while . Они очень похожи между собой. Их синтаксис:
Рис.1 – синтаксис while
Рис.2 – синтаксис do while
Отличие состоит только в том, что при начале выполнения цикла while , сразу происходит проверка условия. Если оно возвращает ложь (false ), то тело цикла не выполнится ни разу. А при использовании do while , сразу выполнится оператор(-ы) в теле цикла, а потом будет проверено условие в круглых скобках () после ключевого слова while . И аналогично, при возврате false , цикл завершает работу, иначе – выполняется следующий шаг (итерация). То есть тело цикла do while выполнится хотя бы один раз, при любом раскладе.
Поговорим о них в отдельности. Начнем с while . Как говорилось выше, чтобы выполнилось тело цикла, необходимо чтобы при проверке условия в круглых скобках () , была возвращена истина (true ).
Проверка условия и выполнение тела будет происходить, пока условие не вернет false . Из этого выходит, что для прерывания цикла, в его теле должно происходить что-либо, что повлияет на проверку условия.
Это может быть или введенное пользователем с клавиатуры значение переменной, которая присутствует в проверочном условии цикла. Или это может быть увеличение либо уменьшение управляющей переменной, которая так же задействована в проверочном условии.
Рассмотрим пример с изменением значения управляющей переменной в теле цикла. Постановка задачи: пользователь хочет пополнить карточный счет через терминал. Он вводит сумму с клавиатуры. Предусмотреть в программе возможность изменения ошибочно введенной суммы.
Пример - цикл while C++
#include
#include using namespace std ; int main () double payment = 0 ; int exit = 1 ; // управляющая переменная while (exit == 1 ) cout << ; cin >> payment ; cout << ; cin >> exit ; // изменение управляющей переменной cout << ; cout << "Ваш счет пополнен на " << payment << "$ Спасибо! До свидания!" ; cout << "\n\n~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~\n\n" ; return 0 ; |
Управляющая переменная exit объявляется и инициализируется единицей до цикла while – строка 9. Поэтому при входе в цикл, проверка условия while (exit == 1) вернет true (подробнее об этом можно почитать ) и программа перейдет к выполнению тела цикла. Подобное условие часто записывают таким способом: while (exit) . С таким условием программа работает, как и с предыдущим. Объясняется это тем, что любое значение переменной exit отличное от нуля будет восприниматься компилятором, как true . Тело цикла будет выполняться, пока пользователь не изменит значение этой переменной на 0. Тогда while (exit) будет равнозначно while (0) . То есть проверочное условие ложно. Такая запись встречается чаще, так как она более короткая, хотя и не настолько ясна, как та, что в примере. К этому просто надо привыкнуть.
В строках 16 – 17 пользователю задается вопрос и предлагается сделать выбор: cout << “Оплатить и выйти – нажмите 0. Изменить сумму – нажмите 1: “; То есть если он совершил ошибку при вводе суммы пополнения, у него есть возможность исправить её, нажав 1.
Как только пользователь введет верную сумму и нажмет 0 (что соответствует “Оплатить и выйти”), произойдет выход из цикла и программа продолжит работу. В итоге на экране покажется сообщение о сумме пополнения счета – строки 20 – 22.
Результат:
Эту же задачу можно решить применяя цикл do while . В этом случае, изначально значение переменной exit может быть каким угодно. Цикл в любом случае выполнит тело и предложит сделать выбор. Смотрим:
#include
#include using namespace std ; int main () setlocale (LC_ALL , "rus" ) ; double payment = 0 ; int exit = 0 ; cout << "Введите сумму для пополнения счета: " ; cin >> payment ; cout << "Оплатить и выйти - нажмите 0. Изменить сумму - нажмите 1: " ; cin >> exit ; |