Java. Цикли for, while, do … while. Приклади використання. Розв’язки задач з використанням циклів

Цикли for, while, do … while. Приклади використання. Розв’язки задач з використанням циклів


Зміст



1. Для чого в мовах програмування використовуються цикли?

При розв’язку сучасних задач, часто виникає потреба у багатократному виконанні однієї й тієї ж послідовності дій (операторів). Причому, кількість дій часто буває наперед невідомою і залежить від введених даних, отриманих проміжних результатів тощо.

Для забезпечення повторюваності обчислювального процесу у мові програмування Java введено оператори циклу. Послідовність дій, що повинна виконуватись за один раз в операторі циклу, називається ітерацією.

2. Які види операторів циклу використовуються у мові Java?

Мова Java має такі самі базові оператори циклу, як і інші мови програмування (C++, C#, Pascal та інші):

  • цикл з параметром for;
  • цикл з передумовою while;
  • цикл з постумовою do..while.

Кожен з вищенаведених операторів циклу має свій власний синтаксис та особливості застосування.

3. Яка загальна форма оператора циклу while?

Загальна форма циклу while

while (умова)
{
    // тіло_циклу
    // ...
}

Цикл while працює наступним чином. Якщо значення умова рівно true, то виконується тіло_циклу. Як тільки значення умови стає рівним false, виконання циклічного процесу припиняється і програма виконує оператор, що слідує за оператором while.

4. Яка загальна форма оператора циклу for?

Оператор циклу for є досить поширеною конструкцією. У мові програмування Java оператор for має різноманітні варіанти опису. У найбільш поширеному випадку оператор циклу має вигляд:

for (початкова_ініціалізація; умова; приріст)
{
    // тіло циклу
    // ...
}

де

  • початкова_ініціалізація – початкове присвоєння значення змінній (змінним), яка бере участь в умові та прирості. Ініціалізація виконується тільки один раз. Змінна, що бере участь в умові та прирості, називається змінною керування циклом;
  • умова – умовний вираз згідно синтаксису мови Java. В умові повинна брати участь (не обов’язково) змінна керування циклом. Якщо значення умови рівне true, то виконується тіло циклу. Якщо значення умови стає рівне false, то виконання циклу припиняється і управління передається наступному за циклом for оператору. У мові Java умова в операторі циклу for є обов’язковим елементом;
  • приріст – дія (операція), що виконується над змінною керування циклом. Приріст може змінювати змінну керування циклом як в зростаючому, так і в спадному порядку на різну величину. Після виконання приросту, відбувається перевірка умови з подальшим виконанням (не виконанням) тіла циклу.

Цикл працює наступним чином. Спочатку виконується (один раз) ініціалізація змінної циклу. Потім перевіряється умова. Якщо результат виконання умови рівний true, тоді виконується тіло циклу. Після виконання тіла циклу здійснюється приріст змінної управління циклом на деяку величину. Робота циклу завершується, коли значення умови стане рівне false.

5. Яка загальна форма оператора циклу do..while?

Цикл do..while доцільно застосовувати у випадках, коли потрібно хоча б один раз виконати тіло циклу. Загальна форма циклу do..while наступна:

do
{
    // тіло циклу
    // ...
}
while (умова);

Цикл працює наступним чином. Спочатку виконується тіло циклу. Потім відбувається перевірка умови. Якщо результат умови рівний true, то тіло циклу виконується ще раз. Якщо результат умови рівний false, то відбувається вихід з циклу і управління передається наступному за циклом do..while оператору.

6. Приклади розв’язку задач з використанням циклу while

Приклад 1. Використовуючи цикл while визначити суму

2 + 4 + 6 + … + 2n

Фрагмент коду, що розв’язує дану задачу (ввід даних опущено)

// цикл while - обчислення суми
int i;
int n;
int sum;

// ввід n
// ...

i=1;
sum=0;

while (i<=n)
{
    sum += 2*i;
    i++;
}

Приклад 2. Обчислити:

Дану задачу можна розв’язувати двома способами:

  • з допомогою рекурсії. У цьому випадку потрібно реалізовувати власну функцію, що буде отримувати вхідним параметром значення (1, 3, …, 103);
  • з допомогою ітераційного процесу, для якого ідеально підходить цикл while. У цьому випадку потрібно проводити обчислення з кінця до початку. Це означає, що потрібно змінювати значення лічильника від 103 до 1 (103, 101, 99, …, 3, 1).

Фрагмент коду, що розв’язує дану задачу з допомогою циклу while (другий спосіб):

// цикл while - обчислення складного виразу
int i; // змінна-лічильник: i = 103, 101, 99, ..., 1
int n = 103; // нижня межа
float res; // результат

i=n; // початкова ініціалізація
res = i;

while (i>1)
{
    res = 1 / res;
    i-=2;
    res = i + res;
}
res = 1/res;

7. Приклади розв’язку задач з використанням циклу for

Приклад 1. Використовуючи цикл for написати фрагмент коду, що знаходить суму для заданого n:

5 + 10 + 15 + … + 5·n

Фрагмент коду, що розв’язує дану задачу

int i, n;
int sum; // результат - сума

// ввід n
// ...

sum = 0;

// цикл for
for (i=1; i<=n; i=i+1 )
    sum += 5*i;

Приклад 2. Дано натуральне число n. Обчислити:

Фрагмент коду, що розв’язує дану задачу (ввід значення n опущено):

int k, n;
double sum; // результат - сума

// ввід значення n
// ...

sum = 0;

// цикл for
for (k=1; k<=n; k++)
    sum += Math.sqrt(k);

8. Приклади розв’язку задач з використанням циклу do … while

Приклад 1. Знайти з точністю 6 знаків після коми значення виразу:

Фрагмент коду, що розв’язує дану задачу

// цикл do..while
int i;
double eps = 1e-6;
double t;
double sum;

i=0;
sum = 0;

do
{
    i++;
    t = 1.0/(i*i);
    sum = sum + t;
}
while (t>eps);
// Результат: t = 1.6439345666815615

Приклад 2. Знайти найбільше додатне n, для якого виконується умова:

3n2 – 730·n < 0

Фрагмент коду, що розв’язує дану задачу:

int n;
int t;

n=0;

do
{
    n++;
    t = 3*n*n - 730*n;
}
while (t<0);

n--;
// n = 243


Зв’язані теми