Понятие цикла. Операторы цикла for, while, do-while. Примеры
Содержание
- 1. Понятие циклического процесса. Цикл. Виды операторов цикла в JavaScript
- 2. Цикл for. Синтаксис выполнения. Работа цикла for
- 3. Цикл while
- 4. Цикл do-while
- Связанные темы
Поиск на других ресурсах:
1. Понятие циклического процесса. Цикл. Виды операторов цикла в JavaScript
При написании программ разной сложности часто возникает потребность в многократном выполнении однотипных операций. Для выполнения часто повторяющихся операций в языке JavaScript используются операторы цикла.
Существуют следующие разновидности операторов цикла:
- for – цикл с параметром;
- for-in – цикл движения по объектам;
- while – цикл с предусловием;
- do-while – цикл с постусловием.
Программист выбирает какой из циклов нужно применять в том или ином случае. Циклы for, while, do-while могут заменять друг-друга.
⇑
2. Цикл for. Синтаксис выполнения. Работа цикла for
Реализация цикла for в языке JavaScript очень похожа на такой же цикл в языках C++, C#, Java. В общем виде цикл for можно представить следующим образом:
for (init_expr; cond_expr; modification) { // Тело цикла // ... }
здесь
- init_expr – выражение инициализации счетчика цикла. Выражений инициализации может быть несколько, в этом случае каждое выражение разделяется запятой;
- cond_expr – условное выражение;
- modification – одно или несколько выражений модификации счетчика цикла. Счетчик цикла может модифицировать свое значение как в нисходящем, так и в восходящем порядке.
Любая из частей init_expr, cond_expr, modification может отсутствовать.
Цикл for работает по следующему алгоритму.
- Сначала выполняется одно или несколько выражений инициализации init_expr.
- Проверяется условное выражение cond_expr. Если результат проверки условного выражения равен true (cond_expr = true), происходит переход на пункт 3. Если cond_expr=false, то происходит выход из цикла, то есть переход на пункт 6.
- Выполнение одной итерации тела цикла.
- После выполнения одной итерации тела цикл управление передается оператору modification. Здесь изменяется значение счетчика цикла.
- Переход на пункт 2 – проверка condition.
- Конец выполнения цикла.
⇑
2.1. Пример вычисления среднего арифметического элементов массива
В примере вычисляется среднее арифметическое элементов массива чисел с плавающей запятой. Для получения количества элементов массива используется свойство length этого массива.
// Цикл for // Вычислить среднее значение элементов массива // 1. Заданный массив var A = [2.8, 3.5, 1.4, 3.2, 1.7]; // 2. Объявить переменные var avg = 0 // результат - среднее арифметическое // 3. Цикл вычисления суммы элементов массива, // здесь A.length - количество элементов массива for (var i = 0; i < A.length; i++) avg += A[i] // 4. Получить среднее арифметическое avg = avg / A.length // 5. Вывести результат console.log("avg = ", avg)
Результат
avg = 2.5199999999999996
⇑
2.2. Пример формирования ряда Фибоначчи для заданного максимального значения
// Цикл for // Сформировать ряд Фибоначчи для заданного n // 1. Задано n var n = 50 // 2. Объявить дополнительные переменные var t1, t2, t3 var s = "" // результирующая строка сформованная из чисел // 3. Вычисление элементов ряда Фибоначчи. // Формируется результирующая строка t1 = 1 t2 = 1 t3 = t1 + t2 s = s + t1 + " " + t2 + " " for (t1 = 1, t2 = 1; t3 <= n;) { t3 = t1 + t2; s = s + t3 + " "; t1 = t2; t2 = t3; } // 4. Вывести результирующую строку s console.log(s)
Результат
1 1 2 3 5 8 13 21 34 55
⇑
2.3. Пример табуляции функции y = sin(x)
В примере показано применение цикла for для создания данных, основанных на результатах табулирования функции sin(x).
// Табулирование функции y = sin(x) // на диапазоне [a; b] с шагом h. // 1. Задан a, b - диапазон и шаг h = 0.1 var a = 0, b = 2, h = 0.1; var x, y; // 2. Циклический процесс табулирования с выводом на экран результата for (var t = a; t <= b; t += h) { // Округлить результат до 2-х знаков после запятой x = Number.parseFloat(t).toFixed(2); y = Number.parseFloat(Math.sin(t)).toFixed(2); // Вывести результат на экран console.log("x = ", x, " y = ", y); }
Результат
x = 0.00 y = 0.00 x = 0.10 y = 0.10 x = 0.20 y = 0.20 x = 0.30 y = 0.30 x = 0.40 y = 0.39 x = 0.50 y = 0.48 x = 0.60 y = 0.56 x = 0.70 y = 0.64 x = 0.80 y = 0.72 x = 0.90 y = 0.78 x = 1.00 y = 0.84 x = 1.10 y = 0.89 x = 1.20 y = 0.93 x = 1.30 y = 0.96 x = 1.40 y = 0.99 x = 1.50 y = 1.00 x = 1.60 y = 1.00 x = 1.70 y = 0.99 x = 1.80 y = 0.97 x = 1.90 y = 0.95
⇑
3. Цикл while
Цикл while еще называется циклом с предусловием. Это означает, что для выполнения первой и каждой последующей итерации цикла сначала проверяется условие выполнения цикла.
Общая форма оператора цикла while такая же как в языках C++, C#, Java:
while (condition) { // Тело цикла // ... }
здесь
- condition – некоторое условное выражение. Тело цикла выполняется итерацией по итерации если condition = true. Если при проверке условия condition становится равным false происходит выход из цикла.
⇑
3.1. Пример определения максимального значения в массиве
// Цикл while // Поиск максимума в массиве // 1. Задан массив var A = [2, 3, 8, -4, 9, 6, 7] // 2. Установить максимум на первый элемент массива var max = A[0] // 3. Цикл поиска var i = 1 while (i < A.length) { if (max < A[i]) max = A[i]; i++; } // 4. Вывести результат console.log("max = ", max)
Результат
max = 9
⇑
3.2. Поиск числа согласно с условием
Условие задачи. Задано число a для которого выполняется условие
1 <a ≤ 1.5
Среди чисел
1+1/2, 1+1/3, 1+1/4, ...
найти первое, которое меньше чем число a.
Решение.
// Цикл while // Поиск первого числа, которое меньше за число a // в ряде чисел: 1+1/2, 1+1/3, 1+1/4,... // 1. Задано число a var a = 1.05; // Объявить дополнительные переменные var res, t t = 2; res = 1 + 1 / t; while (res >= a) { t = t + 1; res = 1 + 1 / t; } console.log("t = ", t); console.log("res = ", res);
Результат
t = 21 res = 1.0476190476190477
⇑
3.3. Обработка строк в цикле while. Пример
Условие задачи. Задан текст. Определить позицию первого вхождения символа ‘+’ в этом тексте.
Решение.
// Обработка текста в цикле while. // Определить позицию первого вхождения символа '+' в тексте // 1. Ввести текст var str = prompt("Input text:") // 2. Цикл определения позиции var pos; // искомая позиция pos = 0 while (str[pos]!='+') pos++; // 3. Вывести результат alert("Position = " + pos)
⇑
4. Цикл do-while
Цикл do-while еще называется циклом с постусловием. Это означает, что сначала следует тело цикла, затем проверяется условие. Таким образом, тело цикла выполняется минимум один раз. Если рассмотреть циклы for и while, то могут быть ситуации, когда тело этих циклов не выполнится ни разу. Это основное отличие цикла do-while от циклов for, while.
Общая форма объявления цикла do-while в языке JavaScript такая же как в языках C++, C#, Java:
do { // Тело цикла // ... } while (condition);
здесь
- condition – некоторое условие. Тело цикла выполняется, если condition=true. Как только значение condition станет равно false, то происходит выход из цикла и переход к следующему оператору.
В некоторых случаях особенность цикла do-while приводит к более наглядному и сокращенному коду. Примером такого случая может являться получение данных с клавиатуры и их обработка в зависимости от ситуации. Если использовать операторы for или while, то не обойтись без повторного вызова строки ввода или ввода дополнительных флажков, определяющих первый шаг итерации в цикле. Применение же цикла do-while не вызовет лишних строк кода для корректного решения задачи (см. пример 4.1).
⇑
4.1. Обработка данных во время ввода. Пример вычисления суммы для последовательности введенных чисел
С помощью цикла do-while организуется ввод чисел с клавиатуры методом вызова диалогового окна функцией prompt(). Конец ввода – число 0. В результате вычисляется сумма введенных чисел.
// Цикл do-while // Обработка данных во время ввода. // Дана последовательность чисел, которая завершается нулем. // Вычислить сумму введенных чисел. // 1. Объявить переменные var num // число, которое будет вводиться с клавиатуры var sum = 0.0 // вычисляемая сумма // 2. Цикл вычисления do { // Вывести окно ввода числа num = prompt("Enter number: ", '0'); sum += parseFloat(num); } while (num!=0); // 3. Вывести результат document.write("sum = " + sum)
⇑
4.2. Вычисление максимальной цифры числа
Условие задачи. Дано натуральное число. Вычислить максимальную цифру этого числа.
Решение.
// Цикл do-while // Вычислить максимальную цифру числа, введенного с клавиатуры // 1. Объявить переменные var num // заданное число var max // максимальная цифра числа // 2. Ввод данных num = parseInt(prompt("Enter number: ")) // 3. Вычисление максимальной цифры числа - цикл do-while max = num%10 // взять последнюю цифру do { if (max<num%10) max = num%10 num = parseInt(num/10) } while (num>0) // 4. Вывести результат alert("max = " + max)
⇑
4.3. Обработка строк. Замена символов в тексте
Условие задачи. В заданном тексте заменить все символы ‘+’ на символы ‘-‘. Для решения использовать цикл do-while.
Решение.
При решении данной задачи следует учесть, что строки являются неизменяемыми последовательностями. Поэтому непосредственно заменить символ в тексте-оригинале не получится. В данной задаче формируется новый (другой) текст, который затем заменяет исходный текст.
// Обработка текста в цикле do-while. // В заданном тексте заменить все символы '+' на символы '-'. // 1. Ввести текст var text = prompt("Input text:") // 2. Цикл замены var i = 0 // индекс обрабатываемого символа в тексте var text2 = "" // дополнительный текст do { // Обработка символа text[i] if (text[i] == '+') text2 = text2 + "-" else text2 = text2 + text[i] // Увеличить счетчик i++ } while (i < text.length) // 3. Заменить исходный текст text = text2 // 4. Вывести результат document.write("text = " + text)
⇑
Связанные темы
⇑