JavaScript. Понятие цикла. Операторы цикла for, while, do-while

Понятие цикла. Операторы цикла for, while, 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 работает по следующему алгоритму.

  1. Сначала выполняется одно или несколько выражений инициализации init_expr.
  2. Проверяется условное выражение cond_expr. Если результат проверки условного выражения равен true (cond_expr = true), происходит переход на пункт 3. Если cond_expr=false, то происходит выход из цикла, то есть переход на пункт 6.
  3. Выполнение одной итерации тела цикла.
  4. После выполнения одной итерации тела цикл управление передается оператору modification. Здесь изменяется значение счетчика цикла.
  5. Переход на пункт 2 – проверка condition.
  6. Конец выполнения цикла.

 

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)

 


Связанные темы