Цикли. Оператори циклу for, while, do…while
Зміст
- 1. Поняття циклу в мові програмування
- 2. Види операторів циклу у мові C++
- 3. Цикл for. Загальна форма оператора циклу for
- 4. Приклади використання оператора циклу for
- 5. Які існують варіанти реалізації циклу for?
- 6. Цикл while. Загальна форма
- 7. Приклади використання оператора циклу while
- 8. Загальна форма оператора циклу do…while
- 9. Приклади використання оператора циклу do…while
- 10. Вкладені цикли. Приклади використання
- 11. Що таке нескінчений цикл?
- Зв’язані теми
Пошук на інших ресурсах:
1. Поняття циклу в мові програмування
Часто, при програмуванні задач, потрібно, щоб одна й таж послідовність команд виконувалась декілька ра0зів. Для цього у мовах програмування застосовується поняття циклічного процесу або циклу. Алгоритм, в якому певна послідовність команд повторюється декілька разів з новими вхідними даними називається циклічним.
Циклічний процес організовується з допомогою операторів циклу. Мова програмування 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 (дійсний тип). Операція ділення
1.0/i
дає дійсний результат.
Приклад 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 (вираз);
де вираз – умовний вираз, в якому перевіряється значення змінної циклу. На цьому етапі визначається подальше виконання циклу.
Фігурні дужки у цьому циклі необов‘язкові.
Цикл працює наступним чином. Спочатку відбувається виконання тіла циклу. Потім перевіряється значення вираз (умовний вираз). Якщо значення вираз є істинним (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[6][9]; // двовимірний масив цілих чисел int i, j; for (i=0; i<6; i++) for (j=0; j<9; j++) M[i][j] = 5;
11. Що таке нескінчений цикл?
Нескінчений цикл – це цикл, який ніколи не закінчується.
При програмуванні циклічних процесів, програміст помилково може написати код циклу, який ніколи не закінчується.
Крім того, інколи потрібно, щоб цикли містили код спеціального завершення з допомогою інструкції break.
Приклад 1. Нескінчений цикл з оператором for:
for (; ;) { // послідовність операторів // ... }
Приклад 2. Нескінчений цикл while.
int x; x = 5; while (x<10) { // нескінчений цикл while, значення x не зростає, // умова x<10 виконується завжди, неможливо вийти з циклу }
Вищенаведений фрагмент коду, з логічної точки зору, є помилковим. Такий цикл виконується без кінця. Тому що значення змінної x не зростає. Тобто x завжди буде менше 10.