Инструкции break и continue в операторах цикла. Примеры решения задач
Содержание
- 1. Инструкции break и continue. Назначение
- 2. Примеры решения задач с использованием оператора break
- 3. Примеры решения задач с использованием оператора continue
- Связанные темы
Поиск на других ресурсах:
1. Инструкции break и continue. Назначение
В языке JavaScript есть средства, позволяющие прервать текущую итерацию цикла. К этим средствам относятся инструкции (операторы):
- break – осуществляет безусловный выход из цикла;
- continue – осуществляет переход к следующей итерации цикла. Все операторы, еще не выполнившиеся в текущей итерации, пропускаются.
Как правило, инструкции break и continue используются в сочетании с оператором условного перехода, если в зависимости от выполнения некоторого условия нужно прервать текущую итерацию.
Операторы break и continue предоставляют широкий спектр возможностей решения задач с использованием циклов.
Рисунок 1. Использование оператора break в разных видах циклов в сочетании с оператором if: a) — цикл for; b) — цикл while; c) — цикл do-while
Рисунок 2. Использование оператора continue в разных видах циклов: a) — цикл for; b) — цикл while; c) — цикл do-while
⇑
2. Примеры решения задач с использованием оператора break
2.1. Поиск элемента в массиве
Условие задачи.
Задан массив чисел. Реализуйте поиск элемента в массиве. Массив чисел и элемент вводится с клавиатуры.
Решение.
Текст программы на JavaScript, решающий данную задачу.
// Оператор break // Поиск элемента в массиве // 1. Формирование массива var A = [] // 1.1. Ввести количество элементов в массиве var n = prompt("Input n:") // 1.2. С помощью цикла for ввести элементы массива for (var i = 0; i<n; i++) { A[i] = prompt("Input A[" + i + "]:") } // 2. Вывести введенный массив для контроля, сформировать массив как строку var s = "" for (var i = 0; i < A.length; i++) { s = s + A[i] + " "; } alert("A = [ " + s + " ]") // 3. Ввести элемент var item = prompt("Input item:") // 4. Цикл поиска элемента в массиве var pos = -1 // позиция элемента в массиве for (var i = 0; i < n; i++) { if (item == A[i]) { // если элемент найден, то запомнить позицию и выйти из цикла, // дальнейший поиск не имеет смысла pos = i break; // выход из цикла } } // 5. Вывод результата if (pos != -1) alert("Item " + item + " is in the array A at position " + pos) else alert("Item is not in the array A")
В пункте 4 программы происходит сравнение каждого элемента массива с искомым элементом. Как только найден искомый элемент, дальнейшие итерации бессмысленны, поскольку элемент уже найден. Здесь нужно исходить из цикла, что и было сделано с помощью оператора break.
⇑
2.2. Вычисление суммы с заданной точностью
Условие задачи.
Вычислить с заданной точностью значение суммы
Решение.
При выполнении задачи организуется якобы вечный цикл. В цикле вычисляется текущее значение выражения, которое прилагается к общей сумме. Также запоминается значение суммы, которое было на предварительной итерации цикла. Как только разница предыдущего и следующего значения будет меньше некоторой заданной точности ε (ε > 0), происходит выход из цикла с помощью оператора break.
Текст программы, решающей данную задачу, следующий
// Оператор break // Задача. Вычислить сумму значений 1/i!, где i = 1, 2, 3, ... // 1. Объявить переменные var epsilon // непосредственно точность, например, 0.01 або 0.000001 var sum // искомая сумма var prev_sum // предыдущее значение суммы var i // счетчик текущей итерации var fact // fact = i! // 2. Ввести точность вычисления суммы epsilon = prompt("Input epsilon") // 3. Цикл вычисления суммы sum = 0 prev_sum = 0 fact = 1 i = 1 while (true) { // якобы вечный цикл sum += 1/fact // Проверка изменения текущего значения суммы, // если точность вычисления достигнута, то выход из цикла if (Math.abs(sum-prev_sum)<epsilon) break i++ fact = fact*i prev_sum = sum } // 4. Вывести сумму alert("sum = " + sum)
⇑
2.3. Определить, образуют ли цифры числа неубывающую последовательность
Условие задачи.
Задано число. Определить, образуют ли цифры числа неубывающую последовательность. Например, для числа 23344 ответ должен быть «Да».
Решение.
При определении неубывающей последовательности достаточно, чтобы между двумя соседними цифрами числа первая цифра (высшего порядка) была не больше (<=) второй цифры. Как только окажется, что первая цифра больше второй, сразу состоится выход из циклического процесса с помощью оператора break.
Текст программы, решающий данную задачу следующий
// Оператор break // Определить, образуют ли цифры числа неубывающую последовательность // 1. Ввести число var num = prompt("Input number:") // 2. Проверка, есть ли число как минимум двузначным if (num >= 10) { // 3. Цикл определения неубывающей последовательности var t = num, t1, t2 var f_non_decr // флажок результата // В начале принять, что последовательность неубывающая f_non_decr = true do { t1 = t%10 // взять последнее число t2 = parseInt((t%100)/10) // взять предпоследнее число // Сравнить числа if (t2 > t1) { // если последовательность неубывающая, то выход из цикла // с помощью оператора break f_non_decr = false break; } t = parseInt(t/10) } while (t > 0) // 4. Вывод результата на основе флажка f_non_decr if (f_non_decr) alert("The sequence is nondecreasing") else alert("The sequence is not nondecreasing") } else { alert("Incorrect input") }
⇑
3. Примеры решения задач с использованием оператора continue
3.1. Вычислить сумму элементов массива, лежащих на четных позициях
Условие задачи. Задан массив чисел. Вычислить сумму элементов массива, размещаемых на четных позициях (0, 2, 4, 6, …).
Решение.
В циклическом процессе, при определении суммы, нечетные позиции пропускаются с помощью оператора continue.
// Оператор continue // Задача. Вычислить сумму элементов, лежащих на парных позициях // 1. Объявить массив и заполнить его значениями var A = [ 2, 8, -1, 3, 9, 12, 0, 15, 18 ] // 2. Цикл вычисления суммы var sum = 0 for (var i=0; i<A.length; i++) { if (i%2==1) // если позиция нечетная, continue; // то перейти к следующей итерации цикла sum += A[i] } // 3. Вывести сумму alert("sum = " + sum)
⇑
3.2. Создать список строк согласно условию
Условие задачи. С клавиатуры вводятся строки. Конец ввода – пустая строка. На основе введенных строк создать список строк, длина которых не более 5 символов.
Решение.
Лучше всего для организации ввода строк с клавиатуры подходит цикл с постусловием do-while, поскольку нужно сначала получить строку, а затем ее обработать (обработать условие).
В этом цикле в массив добавляются строки. Если длина добавленной строки больше 5 символов, то происходит переход к следующей итерации цикла оператором continue, то есть, строка не добавляется к массиву.
// Оператор continue // Задача. Создать список строк согласно условию // 1. Объявить переменные var AS = [] var s var i // 2. Цикл ввода строк, одновременно создается массив AS i=0 do { // 2.1. Ввод строки s = prompt("Enter string:") // 2.2. Обработка строки согласно условию if (s.length > 5) // если длина строки > 5, continue; // то переход к следующей итерации // 2.3. Добавить строку к массиву AS AS[i] = s i++ } while (s != "") // 3. Вывести массив var resStr = "[ " for (var i=0; i<AS.length; i++) resStr += AS[i] + " "; resStr += " ]" alert("AS = " + resStr)
⇑
3.3. Вычислить сумму чисел, лежащих в заданном диапазоне
Условие задачи. С клавиатуры вводятся числа. Конец ввода – число 0. Вычислить сумму чисел, находящихся в диапазоне [5; 10].
Решение.
// Оператор continue // Задача. Вычислить сумму введенных чисел, находящихся в диапазоне [5; 10] // 1. Объявить переменные var num // вводимое число var sum // сумма // 2. Цикл ввода чисел и вычисление суммы sum = 0 do { num = prompt("Enter number:") if ((num<5)||(num>10)) continue; sum = sum + parseInt(num) } while (num!=0) // 3. Вывести результат alert("sum = " + sum)
⇑
Связанные темы
⇑