You are on page 1of 26

1

Урок № 4

Цикл for

Зміст
1. Конструкція for............................................................ 3
Деякі особливості синтаксису for....................................6
Умова.......................................................................................8
Оператор break.....................................................................9
Оператор continue.............................................................13
Коментарі до прикладу.....................................................14
2. Практичні приклади................................................. 15
Приклад 1.............................................................................15
Приклад 2.............................................................................16
Приклад 3.............................................................................17
Приклад 4.............................................................................19
3. Домашнє завдання.................................................... 24

Додаткові матеріали уроку прикріплені до даного PDF-файлу.


Для доступу до матеріалів, урок необхідно відкрити в програмі
Adobe Acrobat Reader.

2
1. Конструкція for

1. Конструкція for
У минулому уроці ми розібрали поняття циклу і дві
його конструкції — while і do while. А тепер настала черга
розглянути ще одну конструкцію циклу — оператор for.
Суть його роботи теж полягає в повторенні дій, але із
заданою кількістю разів. Оператор for містить додаткову
змінну у вигляді лічильника. Саме для неї і налаштову-
ється сам цикл.
Розглянемо приклад, коли вчитель фізкультури по-
просив учня поприсідати 5 разів. Ця ситуація розділена
на дві частини: учитель робить підрахунок присідань,
а учень виконує дії. Так, у той момент, коли вимовля-
ються 1, 2, 3 ..., якраз і спрацьовує лічильник, а сам цикл
повторення дій виконує учень. Тобто ми можемо від-
стежити початковий момент, кінцевий момент і зміну
лічильника.
А тепер приступимо до вивчення самої конструкції.
Загальний синтаксис і принцип роботи конструкції for:

for(ініціалізація змінної; перевірка умови;


зміна змінної)
{
дія;
}

Принцип виконання циклу:


1. Ініціалізація змінної.
2. Перевірка умови.

3
Урок № 4

3. Виконання дії, якщо умова є істиною.


4. Якщо умова є брехнею, виконання наступної за ци-
клом оператора.
5. Якщо умова була істиною, зміна керуючої змінної.
6. Перевірка умови. Далі знову пункт 3 або 4.
Давайте тепер напишемо програму про нашого учня
на уроці фізкультури.

#include<iostream>
using namespace std;

int main() {
for (int count = 1; count <= 5; count++)
{
cout << "The student squatted " << count <<
" time\n";
}

return 0;
}

Малюнок 1

Зараз більш детально розглянемо послідовність ви-


конання всіх кроків цієї програми (мал. 2).

4
1. Конструкція for

Малюнок 2

Коментар до прикладу
1. Усередині циклу оголошується змінна count що дорів-
нює 1. Це й буде керуюча змінна.
2. Потім здійснюється перевірка значення цієї змінної
за допомогою умови count<=5;
3. Якщо умова є істиною (а так буде, поки count не досяг-
не значення 6), виконується показ значення count на
екран (cout <<"The student squatted "<<count << "time\n";)
і зміна керуючої змінної count на 1 (count ++). Потім,
знову перевіряється умова.
4. Якщо умова є брехнею (тобто значення count стало
дорівнювати 6), то програма переходить на наступний
рядок після закриття фігурної дужки циклу.
Примітка. Зверніть увагу, що перший крок —
СТВОРЕННЯ ТА ІНІЦІАЛІЗАЦІЯ ЗМІННОЇ —
завжди виконується тільки один раз.
Найчастіше, на відміну від звичайного життя, у про-
грамуванні відлік йде не з одиниці, а з нуля. Тому є ще
один спосіб реалізації цього прикладу.

5
Урок № 4

#include<iostream>
using namespace std;

int main() {
for (int count = 0; count < 5; count++)
{
cout << "The student squatted " << count <<
" time\n";
}
return 0;
}

Деякі особливості синтаксису for


Незважаючи на простоту роботи оператора, він має
деякі особливості форм запису.
Ініціалізація керуючої змінної
1. Ініціалізація і створення змінної проводиться в циклі.

// вивід цілих чисел від 1 до 10 з кроком зміни 1


for (int x = 1; x <= 10; x++)
{
cout << x << " ";
}
cout << endl;

Малюнок 3
2. Створення змінної проводиться до циклу, а ініціалі-
зація — у циклі.

6
1. Конструкція for

// вивід чисел від 0 до 10 з кроком зміни 2


int x;
for (x = 0; x <= 10; x += 2)
{
cout << x << " ";
}
cout << endl;

Малюнок 4

3. Ініціалізація і створення змінної виконуються до циклу.

// вивід чисел від 0 до 1 з кроком зміни 0.2


float x = 0;
for (; x <= 1; x = x + 0.2)
{
cout << x << " ";
}
cout << endl;

Малюнок 5
Усі три приклади є абсолютно функціонуючими та
рівноважними.
Зміна керуючої змінної
Зміну керуючої змінної можна перенести всередину
тіла циклу, як це відбувається у while і do while.

7
Урок № 4

// вивід чисел від 1 до 5 з кроком зміни 1


for (int x = 1; x <= 5; )
{
cout << x << " ";
x++;
}
cout << endl;

Малюнок 6

Умова
Умову конструкції також можна пропустити, однак у
цьому разі вона буде вважатися за замовчуванням істин-
ною. Таким чином, ми отримуємо постійно справжню
умову і, як наслідок — НЕСКІНЧЕННИЙ ЦИКЛ.

// нескінченний цикл
for (int x = 1; ; x++)
{
cout << x << " ";
}
cout << endl;

Малюнок 7

8
1. Конструкція for

Примітка. Як пропустити умову й уникнути нескін-


ченного циклу — читайте наступний розділ уроку.
З оглядом на вищенаведене, ми можемо зробити наступ-
ний висновок: Жодна з частин циклу for не є обов,язковою.
Як бачите, робота for проста й аналогічна роботі while.
Що вибрати?! Це залежить від поставленого завдання і
від вашого рішення.
Оператор break
Нерідко при роботі з циклами виникає необхідність
штучно перервати виконання циклу. Для цього вико-
ристовується вже знайомий вам (після вивчення switch),
оператор break. Цей оператор має перебувати в тілі циклу,
у тому місці, де необхідно зробити зупинку. Наприклад,
саме за допомогою цього оператора ми можемо вирішити
проблему нескінченного циклу в ситуації, коли умова в
циклі for не вказується.
Розглянемо приклад:

#include <iostream>
using namespace std;
int main()
{
for (int x = 1;; x++)
{
if (x == 4) break; // якщо x стане дорівнювати 4,
// зупинити цикл
cout << x << " ";
}
cout << "Bye!\n";
return 0;
}

9
Урок № 4

Знімок екрану виконання програми:

Малюнок 8

Коментарі до прикладу
1. Згідно з правилом, умова циклу завжди є істиною,
адже її просто немає.
2. При значеннях 1, 2 і 3 змінної x умова оператора if
виконуватися не буде. break, звісно, не спрацює, тому
що він знаходиться в тілі if. Тим часом, на екран по-
слідовно будуть виводитися числа 1, 2, 3.
3. Коли х стане дорівнювати 4, програма потрапить у тіло
if і виконається break. Цикл одразу ж буде зупинений,
а виконання програми перейде на наступний рядок
після закриття фігурної дужки оператора for.
4. На екрані з,явиться напис Bye!
5. Цифра 4 на екрані ніколи не з,явиться, тому що, якщо
спрацював break, усе, що знаходиться в циклі нижче
за нього, уже не виконається.
Примітка. break може бути використаний або в
циклі, або в операторі switch. Будь-яке інше розмі-
щення призводить до помилки на етапі компіляції.
Крім цього, оператор break може використовува-
тися не тільки для переривання нескінченного циклу.
Припустимо, ми загадали ціле число в межах від 1 до 10.
Наша програма пропонуватиме вгадати це число за п,ять
спроб. У цьому завданні цикл має виконатися 5 разів (for

10
1. Конструкція for

(int n = 1; n <= 5; n++){}). Щоправда, користувач може


відгадати раніше, ніж на п’ятій спробі. Тому програма має
щоразу перевіряти, чи відгадали її число, і в разі вводу
правильної відповіді, перервати цикл.

#include <iostream>
using namespace std;

int main(){
// оголошуємо змінну з задуманим числом
int magicNum = 2;
cout << "==================================\n\n";
cout << " My magic number between 1 and 10\n";
cout << "==================================\n\n";
int user = 0;
for (int n = 1; n <= 5; n++)
{
cout << "Your number is -> ";
cin >> user;
// перевіряємо, чи вгадав користувач наше
// число; якщо так, виводимо привітання
// і перериваємо цикл
if (user == magicNum)
{
cout << "Congrats!!!\n";
break;
}
else
{
// інакше, користувач ще не відгадав
cout << "That’s not my number\n";
}
// якщо лічильник досяг 5, виводимо повідомлення
// спробувати зіграти знову
if (n == 5)
{
cout << "Try again later\n";
}

11
Урок № 4

}
return 0;
}

Варіанти виконання програми


Користувач НЕ відгадав число за п,ять спроб

Малюнок 9

Користувач відгадав число

Малюнок 10

12
1. Конструкція for

Оператор continue
Оператор continue використовується для перери-
вання поточної ітерації циклу і здійснення переходу на
наступний крок. У ряді випадків, такі дії є необхідни-
ми. Якщо виконується оператор continue, то, залежно
від виду циклу, відбувається наступне: Цикли while
і do while зупиняють виконання кроку і переходять до
перевірки умови.
Цикл for також зупиняє виконання кроку. Але спо-
чатку переходить до зміни керуючої змінної, а потім уже
до перевірки умови.
Розглянемо приклад: показати на екран усі непарні
цілі числа в діапазоні від нуля до 25 включно.

#include <iostream>
using namespace std;

int main()
{
for (int i = 0; i < 26; i++)
{

if (i % 2 == 0) // якщо число ділиться на два


// без залишку
{
continue; // зупинити ітерацію циклу
// і перейти до i++
}
cout << i << " ";
}
cout << endl;
return 0;
}

13
Урок № 4

Знімок екрану виконання програми:

Малюнок 11

Коментарі до прикладу
Цикл починає свій рух з нуля і проходить ітерації до
25 включно.
Усередині циклу передбачена умова: якщо число i —
парне, потрібно зупинити поточний крок циклу (continue;)
і перейти до конструкції i++.
Те, що розташовується нижче за оператор continue,
що спрацював, на поточному кроці вже не виконається.
Якщо умова if не виконується, значить число i непарне,
if буде проігноровано, а число — відображено на екрані.
Тепер, коли ми познайомилися з теоретичними мате-
ріалами уроку, давайте перейдемо до наступного розділу,
де буде розглянуто кілька практичних завдань.

14
2. Практичні приклади

2. Практичні приклади
Приклад 1
Постановка задачі
Годинник б,є щогодини стільки разів, скільки зараз
годин. Написати програму, яка підрахує, скільки разів
проб,є годинник за 12 годин.
Код реалізації

#include <iostream>
using namespace std;

int main() {
int sum = 0;
for (int bom = 1; bom <= 12; bom++)
{
sum += bom; // накопичення суми ударів
}
// Годинник пробив 78 разів.
cout << " Hours have punched " << sum
<< " times.\n\n";
return 0;
}

Знімок екрану виконання програми:

Малюнок 12

15
Урок № 4

Коментарі до коду
1. Спочатку оголошується змінна sum, яка дорівнює нулю.
2. Цикл формується з трьох конструкцій int bom=1; —
початкова ініціалізація, bom<=12; — умова, bom++ —
зміна керуючої змінної.
3. Усередині тіла циклу накопичується сума ударів шля-
хом додавання керуючої змінної до значення загальної
суми.
4. Коли i досягне значення 13, цикл зупиниться, і на екрані
з’явиться результат.

Приклад 2

Постановка задачі
Користувач з клавіатури послідовно вводить цілі числа.
Щойно користувач ввів 0, необхідно показати на екрані
суму всіх введених чисел.
Код реалізації

#include <iostream>
using namespace std;

int main() {
int digit, sum = 0;
for (;;) { // реалізація нескінченного циклу
cout << "Enter digit:";
cin >> digit; // ввід числа
if (digit == 0) // якщо введено 0
break; // зупинити цикл
sum += digit; // накопичення суми
}

16
2. Практичні приклади

// показ результату
cout << "Sum of digits" << sum << "\n\n";
return 0;
}

Знімок екрану виконання програми:

Малюнок 13

Коментарі до коду
1. У програмі реалізований умовно нескінченний цикл. Тобто
зупинка циклу відбувається штучним шляхом (break).
2. На кожній ітерації користувач вводить число.
3. Здійснюється перевірка, якщо це число — 0, значить
час зупинити цикл, якщо не 0, необхідно додати число
до загальної суми.
4. Після того, як відпрацює break і цикл припинить ро-
боту, на екран виведеться сума всіх введених з клаві-
атури чисел.

Приклад 3
Постановка задачі
Написати програму, яка показує всі числа, яким кратне
число, введене з клавіатури.

17
Урок № 4

Код реалізації

#include <iostream>
using namespace std;

int main() {
int digit;
cout << "Enter digit:";
cin >> digit;
// цикл перебирає числа від 2 до введеного числа
for (int i = 2; i < digit; i++) {
// якщо число не ділиться на поточне значення i
// без залишку, зупинити цей крок і перейти
// до наступного
if (digit%i != 0)continue;
// показати i на екрані
cout<<i<<" ";
}
cout << endl << endl;
return 0;
}

Знімок екрану виконання програми:

Малюнок 14

Коментарі до коду
1. Користувач вводить число для аналізу.
2. Цикл послідовно перебирає всі числа від 2 до вихід-
ного. Здійснюється перевірка: якщо шукане число на

18
2. Практичні приклади

поточне без залишку не ділиться, необхідно перервати


цей крок циклу і перейти до частини i++. (continue).
3. Якщо шукане число на поточне без залишку ділиться,
то на екран виводиться поточне число.

Приклад 4
Постановка задачі
За добу на заводі виготовляється 4 деталі. Сумарний
час виготовлення однієї деталі не має перевищувати
120 хвилин. При цьому кожна деталь проходить по 2 вер-
стати. Розробити програму, яка має підрахувати кількість
якісно виготовлених деталей за добу без порушення
технології виробництва.
Код реалізації

#include <iostream>
using namespace std;

int main() {
// кількість якісних деталей
int amount = 0;
// цикл для перебору 4 деталей
for (int d = 1; d <= 4; d++)
{
// сумарний час виготовлення деталі
int alltime = 0;
// змінна для зберігання часу на верстаті
int time = 0;
// запитуємо час на першому верстаті
cout << "How much time the first machine "
"spends for " << d << " part\n";
cin >> time;

19
Урок № 4

alltime += time;
// перевіряємо, чи не перевищено ліміт часу

if (alltime > 120)


{
cout << "That part is defective. "
"The time limit exceeded\n";
continue;
}

// запитуємо час на другому верстаті


cout << "How much time the second machine "
"spends for " << d << " part\n";
cin >> time;
alltime += time;
// перевіряємо, чи не перевищено ліміт часу

if (alltime > 120)


{
cout << "That part is defective. "
"The time limit exceeded\n";
continue;
}

// якщо час не було превищено на обох


// верстатах, збільшуємо кількість правильно
// виготовленої деталі
amount++;
}

cout << "\nThe factory manufactured " << amount <<


" parts\n\n";
return 0;
}

Знімок екрану виконання програми (мал. 15).

20
2. Практичні приклади

Малюнок 15

Коментарі до коду
1. Оголошуємо змінну amount зі значенням нуль. Саме
вона буде накопичувати значення тільки тих деталей,
які були виготовлені без порушення технології.
2. Налаштовуємо цикл for для змінної d, яка буде змі-
нюватися від 1 до 4 (перебір усіх деталей фабрики за
добу — for (int d = 1; d <= 4; d++)).
3. Спочатку змінна d зберігає номер першої деталі.
4. Перевіряємо, цей номер менше або дорівнює чотирьом?
Якщо так, переходимо до пункту 3, а якщо ні — до
пункту 10.
5. Описуємо тіло циклу, яке буде виконуватися для кож-
ної з 4 деталей. Оголошуємо дві змінні з початковим
значенням нуль для часу виготовлення поточної деталі:

21
Урок № 4

■■ alltime — накопичення часу виготовлення поточної


деталі;
■■ time — час для виготовлення деталі на верстаті.
6. Запитуємо час виготовлення поточної деталі на пер-
шому верстаті (cin>> time;). Використовуючи скоро-
чену форму присвоєння (+=), додаємо введений час
до загального (alltime +=time;).
7. Робимо перевірку  — чи не перевищено ліміт часу
(if(altime > 120))?
8. Якщо так, виготовляти цю деталь більше немає сен-
су, тому що була порушена технологія виробництва.
Виводимо відповідне повідомлення (cout<< "That part
is defective. The time limit exceeded\n";). Перериваємо
виконання поточної ітерації (continue;) і переходимо
знову в налаштування циклу for з новим значенням
змінної d (до пунку 2 -> d++).
9. Якщо ні, рухаємося нижче за алгоритмом.
10. Запитуємо час виготовлення поточної деталі на друго-
му верстаті (cin>> time;). Використовуючи скорочену
форму присвоєння (+=), знову додаємо введений час
до загального (alltime += time;).
11. Робимо перевірку  — чи не перевищено зараз ліміт
часу (if(altime > 120))?
12. Якщо так, виготовляти цю деталь також більше не-
має сенсу, тому що порушена технологія виробництва.
Виводимо відповідне повідомлення (cout<< "That part
is defective. The time limit exceeded\n";). Перериваємо
виконання поточної ітерації (continue;) і переходимо

22
2. Практичні приклади

знову в налаштування циклу for з новим значенням


змінної d (до пункту 2 -> d++).
13. Якщо ні, рухаємося нижче за алгоритмом.
14. Якщо пункти 5 і 7 не спрацювали, це значить, що деталь
сумарно виготовлялася менше за 120 хвилин. Тому
змінна amount збільшиться на одиницю (amount++;).
15. Переходимо до пункту 2 для виготовлення наступної
в черзі деталі (d++).
16. Коли цикл збільшив змінну d до значення 5, умова
продовження циклу стала брехнею. Тому виконання
алгоритму триває протягом усього тілу циклу, тобто
спрацьовує оператор виведення повідомлення з кіль-
кістю правильно виготовлених деталей (cout << "\nThe
factory manufactured "<<amount << " parts\n\n";).

23
Урок № 4

3. Домашнє завдання
1. Користувач вводить з клавіатури число більше за нуль,
необхідно вивести всі його цифри, починаючи з кінця.
Примітка. Наприклад, користувач ввів число 12345.
На екрані має з,явитися число, записане навпаки —
54321.
2. Користувач вводить з клавіатури число, необхідно
показати на екран суму його цифр.
Примітка. Наприклад, користувач ввів число 12345.
На екрані має з,явитися повідомлення про те, що
сума цифр числа є 15.
3. У перший день равлик проповз 15 см. Кожен наступ-
ний день він проповзав на 2 см далі. Визначити, яку
загальну відстань проповзе равлик через N днів.
Примітка. Наприклад, користувач ввів число 4.
Отже, равлик повз 4 дні, тому сумарний шлях
складе 72 см.
4. Для прийняття рішення студент Д. підкидав монету
9 разів. Якщо в результаті кількість монеток, що ви-
пали стороною «орел», була парним числом, приймав
рішення в позитивну сторону, інакше, у негативну.
Напишіть програму, яка 9 разів запитує число 1 або
0 (орел/решка) і видає відповідний результат розв,я-
зання проблеми студента Д.
5. Вивести на дисплей календар на обраний місяць з ура-
хуванням зазначеного номера дня тижня для початку
місяця.
24
3. Домашнє завдання

Підказка. Програму умовно розбити на дві части-


ни. Перший цикл виводитиме потрібну кількість
порожніх клітин. Другий же цикл почне виводити
календар з першого дня до останнього дня в заданому
місяці. Перехід на новий рядок вважати кратним
семи із зазначеним зсувом номера дня тижня.
Бонусне завдання: визначити кількість вихідних
у заданому місяці.
6. Приклад виконання програми:

Малюнок 16

25
Урок № 4
Цикл for

© Тетяна Лапшун
© Компьютерна Академія «Шаг», www.itstep.org

Усі права на захищені авторським правом фото, аудіо та відеотвори,


фрагменти яких використані в матеріалі, належать їхнім законним влас-
никам. Фрагменти творів використовуються з ілюстративною метою
в обсязі, виправданому поставленим завданням, в межах навчального
процесу і в навчальних цілях Відповідно до ст. 1274 ч. 4 ГК РФ і ст. 21 і 23
Закону України «Про авторське право й суміжні права». Обсяг і спосіб
цитованих творів відповідає прийнятим нормам, не завдає шкоди
нормальному використанню об'єктів авторського права і не обмежує
законні інтереси автора та правовласників. Цитовані фрагменти творів
на момент використання не можуть бути замінені альтернативними,
що незахищені авторським правом аналогами, і як такі відповідають
критеріям сумлінного і чесного використання.
Усі права захищені. Повне або часткове використання матеріалів
заборонено. Узгодження використання творів або їхніх фрагментів
проводиться з авторами і правовласниками. Узгоджене використання
матеріалів можливе лише за умов згадування джерела.
Відповідальність за несанкціоноване копіювання і комерційне вико-
ристання матеріалів визначається чинним законодавством України.

You might also like