JavaScript. Інструкції break та continue в операторах циклу

Інструкції break та continue в операторах циклу. Приклади розв’язку задач


Зміст


Пошук на інших ресурсах:

1. Інструкції break та continue. Призначення

У мові JavaScript є засоби, які дозволяють перервати поточну ітерацію циклу. До цих засобів належать інструкції (оператори):

  • break – здійснює безумовний вихід з циклу;
  • continue – здійснює перехід до наступної ітерації циклу. Всі оператори, які ще не виконались в поточній ітерації, пропускаються.

Як правило, інструкції break та continue використовуються у поєднанні з оператором умовного переходу if, коли в залежності від виконання деякої умови потрібно перервати поточну ітерацію.

Оператори break та continue дають широкий спектр можливостей розв’язку задач з використанням циклів.

JavaScript. Використання оператора break в різних видах циклів у поєднанні з оператором if

Рисунок 1. Використання оператора break в різних видах циклів у поєднанні з оператором if: a) – цикл for; b) – цикл while; c) – цикл do-while

 

JavaScript. Використання оператора continue в різних видах циклів

Рисунок 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)

 


Споріднені теми