Циклы for while. Циклы. Операторы цикла for, while, do…while

Циклы JavaScript обеспечивают многократное выполнение повторяющихся вычислений. Они оптимизируют процесс написания кода, выполняя одну и ту же инструкцию или блок инструкций, образующих тело цикла, заданное число раз (используя переменную-счётчик) или пока заданное условие истинно. Циклы выполняют обход последовательности значений. Однократное выполнение цикла называется итерацией .

На производительность цикла влияют количество итераций и количество операций, выполняемых в теле цикла каждой итерации.

В JavaScript существуют следующие операторы цикла:

1) for используется когда вы заранее знаете, сколько раз вам нужно что-то сделать;
2) for...in используется для обхода свойств объектов;
3) while используется когда вы не знаете, сколько раз нужно что-то сделать;
4) do...while работает аналогично с оператором while . Отличается тем, что do...while всегда выполняет выражение в фигурных скобках, по крайней мере один раз, даже если проверка условия возвращает false .

Типы циклов в JavaScript, управление циклом

1. Цикл for

Цикл for используется для выполнения итераций по элементам массивов или объектов, напоминающих массивы, таких как arguments и HTMLCollection . Условие проверяется перед каждой итерацией цикла. В случае успешной проверки выполняется код внутри цикла, в противном случае код внутри цикла не выполняется и программа продолжает работу с первой строки, следующей непосредственно после цикла.

Следующий цикл выведет на консоль строчку Hello, JavaScript! пять раз.

For (var i = 0; i < 5; i++) { console.log(i + ": Hello, JavaScript!"); }
Рис. 1. Результат выполнения цикла for на консоли

1.1. Как работает цикл for

Цикл for состоит из трёх разных операций:

Шаг 1. инициализация var i = 0; — объявление переменной-счётчика, которая будет проверяться во время выполнения цикла. Эта переменная инициализируется со значением 0 . Чаще всего в качестве счётчиков цикла выступают переменные с именами i , j и k .

Шаг 2. проверка условия i < 5; — условное выражение, если оно возвращает true , тело цикла (инструкция в фигурных скобках) будет выполнено. В данном примере проверка условия идёт до тех пор, пока значение счётчика меньше 5 .

Шаг 3. завершающая операция i++ — операция приращения счётчика, увеличивает значение переменной var i на единицу. Вместо операции инкремента также может использоваться операция декремента.

По завершении цикла в переменной var i сохраняется значение 1 . Следующий виток цикла выполняется для for (var i = 1; i < 5; i++) { } . Условное выражение вычисляется снова, чтобы проверить, является ли значение счётчика i всё ещё меньше 5 . Если это так, операторы в теле цикла выполняются ещё раз. Завершающая операция снова увеличивает значение переменной на единицу. Шаги 2 и 3 повторяются до тех пор, пока условие i < 5; возвращает true .

1.2. Вывод значений массива

Чтобы вывести значения массива с помощью цикла for , нужно задействовать свойство массива length . Это поможет определить количество элементов в массиве и выполнить цикл такое же количество раз.

Приведённый ниже скрипт выведет на экран пять сообщений с названиями цветов:

Var flowers = ["Rose", "Lily", "Tulip", "Jasmine", "Orchid"]; for (var i = 0; i < flowers.length; i++){ alert(flowers[i] + " - это цветок."); }

Если значение свойства length не изменяется в ходе выполнения цикла, можно сохранить его в локальной переменной, а затем использовать эту переменную в условном выражении. Таким образом можно повысить скорость выполнения цикла, так как значение свойства length будет извлекаться всего один раз за всё время работы цикла.

Var flowers = ["Rose", "Lily", "Tulip", "Jasmine", "Orchid"], len = flowers.length; for (var i = 0; i

2. Цикл for...in

Циклы for...in используются для обхода свойств объектов, не являющихся массивами. Такой обход также называется перечислением . При обходе рекомендуется использовать метод hasOwnProperty() , чтобы отфильтровать свойства, которые были унаследованы от прототипа.

Для примера создадим объект с помощью литерала объекта.

Var user = { name: "Alice", age: 25, country: "Russia" }; for (var prop in user) { console.log(prop + ": " + user); }
Рис. 2. Результат выполнения цикла for...in на консоли

Предположим, что в сценарии до или после создания объекта user прототип объекта Object был расширен дополнительным методом clone() .

If (typeof Object.prototype.clone === "undefined") { Object.prototype.clone = function () {}; }

Так как цепочка наследования прототипа постоянно проверяется интерпретатором, то все объекты автоматически получают доступ к новому методу.

Рис. 3. Результат повторного выполнения цикла for...in на консоли

Чтобы избежать обнаружения этого метода в процессе перечисления свойств объекта user , используется метод hasOwnProperty() , который отфильтрует свойства прототипа.

Var user = { name: "Alice", age: 25, country: "Russia" }; if (typeof Object.prototype.clone === "undefined") { Object.prototype.clone = function () {}; } for (var prop in user) { if (user.hasOwnProperty(prop)) { console.log(prop + ": " + user); } }
Рис. 4. Результат перечисления свойств объекта с помощью метода hasOwnProperty()

3. Цикл while

Цикл while - цикл с предварительной проверкой условного выражения. Инструкция внутри цикла (блок кода в фигурных скобках) будет выполняться в случае, если условное выражение вычисляется в true . Если первая проверка даст результат false , блок инструкций не выполнится ни разу.

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

Данный цикл выведет на экран таблицу умножения для числа 3:

Var i = 1; var msg = ""; while (i < 10) { msg+= i + " x 3 = " + (i * 3) + "
"; i++; } document.write(msg);
Рис. 5. Результат выполнения цикла while

4. Цикл do...while

Цикл do...while; проверяет условие продолжения после выполнения цикла. В отличие от цикла while , в do...while; тело цикла выполняется как минимум один раз, так как условие проверяется в конце цикла, а не в начале. Данный цикл используется реже, чем while , так как на практике ситуация, когда требуется хотя бы однократное исполнение цикла, встречается редко.

Var result = ""; var i = 0; do { i += 1; result += i + " "; } while (i < 5); document.write(result);
Рис. 6. Результат выполнения цикла do...while

В следующем примере операторы внутри цикла выполняются один раз, даже если условие не выполняется.

Var i = 10; do { document.write(i + " "); i++; } while (i < 10);

5. Бесконечные циклы

При создании любого цикла можно создать бесконечный цикл, который никогда не завершится. Такой цикл может потенциально продолжать работать до тех пор, пока работает компьютер пользователя. Большинство современных браузеров могут обнаружить это и предложат пользователю остановить выполнение скрипта. Чтобы избежать создания бесконечного цикла, вы должны быть уверены, что заданное условие в какой-то момент вернёт false . Например, следующий цикл задаёт условие, которое никогда не возвращает ложь, так как переменная i никогда не будет меньше 10:

For (var i = 25; i > 10; i++) { document.write("Это предложение будет выводиться бесконечно...
"); }

6. Вложенные циклы

Цикл внутри другого цикла называется вложенным . При каждой итерации цикла вложенный цикл выполняется полностью. Вложенные циклы можно создавать с помощью цикла for и цикла while .

For (var count = 1; count < 3; count++) { document.write(count + ". Строка цикла
"); for (var nestcount = 1; nestcount< 3; nestcount++) { document.write("Строка вложенного цикла
"); } }
Рис. 7. Результат выполнения вложенного цикла for

7. Управление циклом

Циклом можно управлять с помощью операторов break; и continue; .

7.1. Оператор break;

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

Когда оператор break; используется без метки, он позволяет выйти из цикла или из инструкции switch . В следующем примере создаётся счётчик, значения которого должны изменяться от 1 до 99 , однако оператор break прерывает цикл после 14 итераций.

For (var i = 1; i < 100; i++) { if (i == 15) { break; } document.write(i); document.write("
"); }
Рис. 8. Результат работы оператора break в цикле for

Для вложенных циклов оператор break; используется с меткой, с помощью которой завершается работа именованной инструкции. Метка позволяет выйти из любого блока кода. Именованной инструкцией может быть любая инструкция, внешняя по отношению к оператору break; . В качестве метки может быть имя инструкции if или имя блока инструкций, заключенных в фигурные скобки только для присвоения метки этому блоку. Между ключевым словом break; и именем метки не допускается перевод строки.

Outerloop: for(var i = 0; i < 10; i++) { innerloop: for(var j = 0; j < 10; j++) { if (j > 3) break; // Выход из самого внутреннего цикла if (i == 2) break innerloop; // То же самое if (i == 4) break outerloop; // Выход из внешнего цикла document.write("i = " + i + " j = " + j + "
"); } } document.write("FINAL i = " + i + " j = " + j + "
");

7.2. Оператор continue;

Оператор continue; останавливает текущую итерацию цикла и запускает новую итерацию. При этом, цикл while возвращается непосредственно к своему условию, а цикл for сначала вычисляет выражение инкремента, а затем возвращается к условию.

В этом примере на экран будут выведены все чётные числа:

Var i; for(i = 1; i <= 10; i++) { if (i % 2 !== 0) { continue; } document.write("
чётное число = " + i); }
Рис. 9. Результат работы оператора continue в цикле for

Оператор continue; также может применяться во вложенных циклах с меткой.

Outerloop: for (var i = 0; i "); for (var j = 0; j "); } } document.write("Все циклы выполнены"+"
");
Рис. 10. Результат работы оператора 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 из этого примера.

Тем, что в do while сначала выполняется тело цикла, а затем проверяется условие продолжения цикла. Из-за такой особенности do while называют циклом с постусловием. Таким образом, если условие do while заведомо ложное, то хотя бы один раз блок операторов в теле цикла do while выполнится. В итоге do while отличается от цикла while структурой. Если в while сначала выполняется проверка условия продолжения цикла, и если условие истинно, то только тогда выполняется тело цикла. Цикл do while работает сточностью до наоборот, сначала выполняется тело цикла, а потом проверяется условие, вот почему тело цикла do while , хотя бы раз, выполнится.

// форма записи оператора цикла do while: do // начало цикла do while { /*блок операторов*/; } while (/*условие выполнения цикла*/); // конец цикла do while

В начале цикла do while пишется зарезервированное слово do , после идут фигурные скобочки, которые можно опускать, в случае использования одного оператора в теле цикла do while . После закрывающей фигурной скобочки, обозначающей конец тела цикла do while , стоит условие цикла do while , после которого обязательно нужно ставить точку с запятой. Рассмотрим программу с циклом do while , которая выполняет некоторые транзакции с денежным счётом в банке.

// do_while.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include #include using namespace std; int main(int argc, char* argv) { srand(time(0)); int balance = 8; // баланс do // начало цикла do while { cout << "balance = " << balance << endl; // показать баланс int removal = rand() % 3; // переменная, для хранения вычитаемого значения cout << "removal = " << removal << endl; // показать вычитаемое значение balance -= removal; // управление условием } while (balance > 0); // конец цикла do while system("pause"); return 0; }

В строке 11 объявлена переменная balance , она отвечает за остаток денежных средств на счету. С 12-й по 19-ю строки записан цикл do while. Вцикле do while выполняются все транзакции со счётом balance , а именно — перевод денежных средств на какой-то другой счёт, строка 17 . Строка 14 показывает остаток денежных средств на счету balance . В строке 15 объявлена переменная, в которой хранится вычитаемое значение, причём это значение генерируется случайно в интервале . Переменная removal один раз объявляется в теле цикла do while , и каждый раз при повторении цикла эта переменная не переопределяется. А вот её значение меняется, в зависимости от того, какое число сгенерировалось. В строке 19 записано условие цикла do while , как только условие станет ложным, программа передаст управление следующему оператору, после цикла do while , строка 20 . Результат работы программы показан на рисунке 1.

Рисунок 1 Цикл do while в C++

Сначала показан остаток, а затем снятие суммы, после чего опять идёт остаток и так до тех пор, пока на счету не окажется денег. Последней выводимой строкой оказалась строка со снимаемой суммой, а потом цикл завершил свою работу. Хотя и не видно последнего остатка на счету, можно и так сказать, что он равен 0.

Вспомним программу «Угадай число», из раздела: . В этой задаче правильней было бы использовать цикл do while , код уменьшится на две строки.

// ygadai2.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include #include using namespace std; int main(int argc, char* argv) { srand(time(0)); int unknown_number = 1 + rand() % 10; // загадываемое число int enter_number; // переменная для хранения введённого числа do { cout << "Enter unknown number : "; cin >> enter_number; // отгадываем } while (enter_number != unknown_number); cout << "You win!!!\n"; system("pause"); return 0; }

Так как while — цикл с предусловием, то нам необходимо было сначала считать число перед началом while , а потом уже выполнять проверку продолжения цикла while . В случае с do while нам не нужно считывать число до начала цикла, так как проверка условия в do while идет в конце цикла. В зависимости от ситуации, используется цикл while или do while ,они друг друга дополняют.

Для закрепления материала, разработаем ещё одну программу, которая вычисляет сумму чисел в заданном интервале.

// dowhile.cpp: определяет точку входа для консольного приложения. #include "stdafx.h" #include using namespace std; int main(int argc, char* argv) { cout << "Enter the first limit: "; // начальное значение из интервала int first_limit; cin >> first_limit; cout << "Enter the second limit: "; // конечное значение из интервала int second_limit; cin >> second_limit; int sum = 0, count = first_limit; do { sum += count; // наращивание суммы count++; // инкремент начального значения из задаваемого интервала } while (count <= second_limit); // конец цикла do while cout << "sum = " << sum << endl; // печать суммы system("pause"); return 0; }

После запуска программы необходимо ввести пределы интервала, первый и второй. После этого начинает работать цикл do while ,строка 13 .переменная sum предназначена для хранения накапливаемой суммы, строка 15 . В строке 16 инкрементируется начальное значение предела, после каждого повторения цикла. Результат работы программы (см. Рисунок 2).

Рисунок 2 Цикл do while в C++

Интервал указан от -6 до 10 включительно, [-6;10]. Программа суммирует все целые числа из заданного интервала. Сумма формируется так: -6 -5 -4 -3 -2 -1 + 0 +1 +2 + 3 + 4 + 5 + 6 + 7 + 8 + 9 + 10 = 34. Таким образом, циклически выполняется действие суммирования всех целых чисел из, указанного пользователем, интервала.

Часто, при программировании задач, нужно, чтобы одна и та же последовательность команд выполнялась несколько раз. Такой процесс называется циклическим. Алгоритм, в котором определенная последовательность команд повторяется несколько раз с новыми входными данными называется циклическим.

Для реализации циклического процесса, в языках программирования применяются циклы. Язык программирования C/C++ имеет в наличии удобные для работы операторы цикла.

2. Виды операторов цикла в языке C++

В языке C++ существует 3 вида операторов цикла:

  • цикл for ;
  • цикл while с предусловием;
  • цикл do…while с постусловием.

Каждый из операторов цикла имеет свои особенности применения. Любой из вышеприведенных операторов цикла может быть заменен другим.

3. Цикл for. Общая форма оператора цикла for

В языке C++ цикл for может иметь очень широкую реализацию и применение. Цикл for еще называется циклом с параметром.

Общая форма оператора цикла for :

for (инициализация ; выражение ; прирост ) { // ... }
  • инициализация – операция присваивания, в которой устанавливается начальное значение переменной цикла. Эта переменная есть счетчиком, который управляет работой цикла. Количество переменных, управляющих циклом for, может быть две и больше;
  • выражение – условное выражение, в котором проверяется значение переменной цикла. На этом этапе определяется дальнейшее выполнение цикла;
  • прирост – определяет, как будет изменяться значение переменной цикла после каждой итерации.

Цикл for выполняется до тех пор, пока значение выражение равно true. Как только значение выражение станет false, выполнение цикла прекращается и выполняется оператор, который следует за циклом for.

4. Примеры использования оператора цикла for

Пример 1. Найти сумму всех целых чисел от 100 до 300.

// сумма чисел от 100 до 300 int sum; int i; sum = 0; for (i = 100; i<=300; i++) sum = sum + i; // sum = 40200

Пример 2. Дано натуральное число n . Вычислить сумму:

Фрагмент кода, который решает данную задачу.

// s = 1 + 1/2 + 1/3 + ... + 1/n int n; float s = 0; int i; // ввод значения n n = 4; for (i = 1; i<=n; i++) s = s + 1.0/i; // s = 2.08333

В данном примере, чтобы получить вещественное значение, вместо числа 1 (целый тип) вводится число 1.0 (вещественный тип). Операция деления

дает вещественный результат.

Пример 3. Вычислить сумму

Фрагмент кода, который решает данную задачу.

float s; int i; s = 0; for (i=50; i>=1; i--) s = i + Math::Sqrt(s); s = Math::Sqrt(s); // s = 1.7579

В данном примере значение счетчика i в цикле for изменяется по убыванию. Это значение уменьшается на 1 в каждой итерации цикла. При решении подобных задач значение счетчика цикла должно изменяться от последнего к первому значению. В данном случае от 50 до 1.

В вычислениях использована функция Sqrt() из библиотеки Math.

5. Какие существуют варианты реализации цикла for ?

Цикл for может иметь несколько разновидностей реализации. Количество переменных, управляющих циклом for может быть одна, две и более.

В цикле for может отсутствовать любой из элементов заголовка цикла:

  • инициализация;
  • выражение;
  • прирост.

Пример оператора цикла for , в котором есть 2 управляющие переменные. Найти значения произведения:

D = (1 + cos(9)) · (2 + cos(8)) · … · (9 + cos(1))

Фрагмент кода, который решает данную задачу.

// D = (1 + cos(9))*(2 + cos(8))* ... *(9 + cos(1)) int i, j; float d; d = 1; for (i = 1, j = 9; i<=9; i++, j--) d = d * (i + Math::Cos(j));

В вышеприведенном фрагменте кода в цикле for используются две переменные, которые изменяют свое значение (i , j ).

6. Цикл while . Общая форма

Цикл while называется циклом с предусловием. Общая форма цикла while следующая:

while (выражение ) { // последовательность операторов // ... }

где выражение – любое допустимое выражение в языке C++. Последовательность операторов выполняется до тех пор, пока условное выражение возвращает значение true . Как только выражение становится равным false , выполнение цикла while прекращается и управление передается следующему за циклом while оператору.

7. Примеры использования оператора цикла while

Пример 1. Дано вещественное число a . Найти такое наименьшее n , при котором

Соображения. В начале значение суммы есть меньше чем значение a . При прохождении каждой итерации значение суммы постепенно увеличивается. В какой-то момент (при каком-то значении n ) эта сумма станет выше значения a . Этот момент (значение n ) нужно зафиксировать. Для вычисления n , удобно подходит цикл while .

Фрагмент кода, который решает данную задачу.

float a; int n; float sum; // ввод значения a a = 2.2; n = 1; sum = 1.0/n; while (sum < a) { n++; sum = sum + 1.0/n; } // n = 5; sum = 2.283334

Пример 2. Дано натуральное число. Определить количество цифр 3 в нем.

Фрагмент кода, который решает данную задачу.

// количество цифр 3 в числе int n; // заданное натуральное число int k; // количество цифр 3 в числе int t, d; // дополнительные переменные // ввод значения n n = 12343; t = n; // делаем копию из n k = 0; while (t>0) { d = t % 10; // выделить последнюю цифру if (d == 3) k++; t = t / 10; // уменьшить разрядность числа } // k = 2

В данном примере, значение исходного числа будет делиться на 10 при каждой итерации. Таким образом, будет уменьшаться разрядность числа. На каждой итерации, с помощью операции % языка C++ берется остаток от деления на 10, то есть определяется последняя цифра числа. Если эта цифра равна 3, то счетчик k увеличивается на 1.

8. Общая форма оператора цикла do…while

Цикл do … while целесообразно использовать в случаях, когда итерацию нужно сделать хотя бы 1 раз. В отличие от циклов for и while , в цикле do…while условие проверяется при выходе из цикла (а не при входе в цикл). Цикл do…while еще называется циклом с постусловием.

Общая форма оператора цикла do…while :

do { // последовательность операторов // ... } while (выражение );

где выражение – условное выражение, в котором проверяется значение переменной цикла. На этом этапе определяется дальнейшее выполнение цикла.

Фигурные скобки в этом цикле необязательны.

Цикл работает следующим образом. Сначала происходит выполнение тела цикла. Потом проверяется значение выражение (условное выражение). Если значение выражение есть истинным (true ), выполняется снова тело цикла. Как только значение выражение станет false , выполнение цикла прекращается

9. Примеры использования оператора цикла do…while

Пример. Используя цикл do…while , найти значение суммы:

S = 1 + 3 + … + 99

Фрагмент кода, который решает данную задачу.

// s = 1 + 3 + ... + 99 int t; int s; s = 0; t = 1; do { s = s + t; t = t + 2; } while (t<=99); // s = 2500
10. Вложенные циклы. Примеры использования

Вложенные циклы могут быть использованы, например, при работе с двумерными (многомерными) массивами (обнуление массива, вычисление сумм, произведений и прочее).

Пример 1. Вычислить произведение

D = 1 · (1 + 2) · (1 + 2 + 3) · … · (1 + 2 + … + 9)

Фрагмент кода, который решает данную задачу.

// D = 1 * (1+2) * (1+2+3) * ... * (1+2+...+9) float d; // результат - произведение int i, j; // счетчики циклов int s; // дополнительная переменная d = 1; for (i = 1; i<=9; i++) { s = 0; for (j = 1; j<=i; j++) s = s + j; d = d * s; } // d = 2.571912E+09

В данном примере в цикле for со счетчиком i выполняется цикл for со счетчиком j .

Пример 2. Дан двумерный массив целых чисел размером 6×9. Записать во все элементы массива значение 5.

int M; // двумерный массив целых чисел int i, j; for (i=0; i<6; i++) for (j=0; j<9; j++) M[i][j] = 5;
11. Что такое бесконечный цикл?

Бесконечный цикл – это цикл, который никогда не заканчивается.

При программировании циклических процессов, программист по ошибке может написать код цикла, который никогда не заканчивается.

Кроме того, иногда нужно, чтобы циклы содержали код специального завершения с помощью инструкции break .

Пример 1. Бесконечный цикл с оператором for :

for (; ;) { // последовательность операторов C++ . Оператор выбора switch

В некоторых случаях необходимо выполнять код до тех пор, пока не будет достигнут нужный результат. Для этого 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 редко используются на практике.