§ 6.Цикли
Цикл (повторення) - це процес виконання певного набору команд деяку кількість разів. У мові C++ є три команди циклу - for, while та do-while.
1. Команда циклу з лічильником for. Команда for має вигляд
for (<вираз 1>; <логічний вираз 2>; <вираз 3>) <команда 1>;
Вираз 1 призначений для підготовки циклу і виконується один раз. Переважно тут задають початкові значення змінних циклу (підготовляють цикл). У виразі 2 записують умову виходу із циклу. У виразі 3 - команди зміни параметрів циклу. Якщо за допомогою одного із виразів необхідно виконати декілька дій, то використовують команду "кома". Вирази 1 і 3 або один із них у команді for можуть бути відсутні. У цьому випадку опускати символ ";" не можна. Наприклад, for(; i<10 ;) і++;.
Дія команди.
Обчислюються значення виразів 1 і 2.
Якщо значення виразу 2 істине - виконується команда 1. Якщо хибне - виконавець програми переходить до наступної після for команди.
Обчислюються значення виразів 3 та 2 і перевіряється пункт 2).
Приклад 1. Суму цілих чисел з проміжку від 1 до 15 можна обчислити одним із способів:
1) int n = 1,S = 0;
for (; n < 16; n++) S +=n;
for (int n = 1, S = 0; n < 16; n++) S += n;
for(int n = 1,S = 0;n<16;S+=n++);
for (int n = 1, S = 0; n < 16; S += n, n++);
У результаті виконання команд змінній S буде присвоєно значення 120. Зауважимо, що у способі 2) for (int n = 1, S = 0; n < 16; S += n, n++); змінні S і n ініціалізовано (оголошено) безпосередньо у команді циклу for.
Приклад 2. Кількість і добуток усіх парних цілих чисел із проміжку від 4 до 11 можна обчислити так:
int n, D, kil;
for (D = 1, kil = 0, n = 4; n <= 11; n += 2)
{
D*=n; kil++;
}
У результаті виконання програми одержимо D = 1920, kil = 4.
Зауваження 1. Часто у циклах корисно застосовувати команди break і continue. Команда break достроково припиняє роботу циклу і забезпечує перехід до наступної після циклу команди. Команда continue припиняє виконання поточної ітерації та починає виконувати наступну ітерацію (повторення) циклу. Зазвичай ці команди належать до деякої умовної команди. Наприклад, якщо виконуватиметься певна умова, то буде вихід з циклу, або, якщо умова не виконуватиметься, то буде перехід до наступної ітерації тощо.
2. Команда циклу з передумовою (while) має вигляд
while (<вираз>) <команда 1>;
Дія команди.
Обчислюється значення виразу. Якщо воно істинне, то переходимо до пункту 2), якщо хибне - до пункту 3).
Виконується команда 1 і відбувається перехід до пункту 1).
Відбувається перехід до наступної після while команди.
Виразом може бути довільний логічний вираз, стала або змінна цілого типу. Якщо треба перевірити декілька умов, то застосовують команду "кома". Команда 1 може бути порожньою, простою або складеною.
Команда while може бути виконана один раз, декілька разів або не бути виконана жодного разу.
Приклад 4. Нехай x = 4, s = 0, d - 1. Після виконання команд
while (x <= 8)
{s += x; x++;}
while (x> 10) d*=x;
s = 0 + 4 + 5 + 6 + 7 + 8 = 30, x - 9, а змінна d свого значення (1) не змінить, оскільки значення виразу x > 10 хибне, і тому команда d *= x у циклі while виконуватись не буде.
3. Команда циклу з післяумовою do-while має вигляд
do <команда 1>;
while (<вираз>);
Дія команди.
Виконується команда 1 і обчислюється значення виразу.
Якщо значення виразу істинне, то див. пункт 1), якщо значення виразу хибне - відбувається перехід до наступної після do-while команди.
Команда 1 у циклі do-while, на відміну від циклу while, буде виконуватись хоча б один раз завжди.
Завдання. (Про таблицю мір). Побудувати таблицю відповідності між заданими одиницями. Початкове значення кількості одиниць, крок зміни цього значення та кількість рядків у таблиці задати самостійно у режимі діалогу.
Програма. (Вказівка: програма реалізована для одиниці “унція”, реалізувати для свого варіанту; для цього необхідно змінити в поточній програмі “унцію” на одиницю свого варіанту)
// Програма відповідності мір реалізована для одиниці “унція”
#include <iostream.h>
#include <conio.h>
void main()
{
clrscr();
float uncia, gram, krok;
int kil, n;
cout « "Введіть початкове значення унцій," «"\n";
« " крок зміни та кількість рядків у таблиці", "\n";
cin » uncia » krok » kil;
cout « "_____________________" « "\n";
cout « "Унції Грами" « "\n";
cout « "_____________________" « "\n";
for (n=1;n<=kil;n++)
{
gram=28.353495*uncia;
cout « uncia « "\t" « gram;
uncial+=krok;
cout « "_____________________" « "\n";
getch();
}
