You are on page 1of 49

Тема 4.

Циклічні оператори
«Основи програмування»
для спеціальності
121 – Інженерія програмного
забезпечення
Оператор циклу for ()
Алгоритм, в якому є послідовність операцій (група
операторів), яка повинна бути виконана декілька
разів, називається циклічним, а сама послідовність
операцій іменується тілом циклу.
Оператори циклу дозволяють багаторазово
виконувати серії однотипних дій. Дії виконуються
до тих пір, поки залишається дійсною (або поки не
буде виконано) деяка умова.

Основи програмування
Оператор циклу for ()
Цикл for ще називається циклом з параметром.

Загальний синтаксис оператора for () наступний:

for (ініціалізація; умова; приріст)


{
// послідовність операторів (команди)
//
}

Основи програмування
Оператор циклу for ()
В круглих дужках після ключового слова for
вказується програмний код з трьох блоків (при
цьому кожен з блоків може бути порожнім). Блоки
розділяються крапкою з комою.
Перший блок є блоком ініціалізації.
Другий блок – умова виконання оператора циклу.
Третій блок – це блок зміни індексних змінних,
приріст визначає, як буде змінюватись значення
змінної циклу після кожної ітерації.

Основи програмування
Оператор циклу for ()
Виконання оператора циклу:
• Спочатку виконуються команди, зазначені в першому
блоці оператора for ().
• Після цього перевіряється умова, вказана у другому
блоці оператора.
• Після виконання команд у фігурних дужках виконуються
команди третього блоку у круглих дужках після
ключового слова for.
• Далі знову перевіряється умова (другий блок).

Основи програмування
Оператор циклу for ()

Основи програмування
Оператор циклу for ()
Розберемо використання циклу на прикладі
обчислення суми натуральних чисел:
#include <iostream>
using namespace std;
int main(){
int n,i,s=0;
cout<<"Enter number n=";
cin>>n;
for(i=0; i<=n; i++){
s+=i;
}
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
} Основи програмування
Оператор циклу for ()
Основу програми становить оператор циклу:
for (i = 0; i <= n; i ++) {S + = i;}
• Перший блок – команда ініціалізації індексної
змінної i=0 з початковим значенням.
• Другий блок – це умова i<=n, яка перевіряється.
• У третьому блоці вказана інструкція i++,
збільшення значення індексної змінної на
одиницю
• У основному блоці оператора циклу (у фігурних
дужках) використана команда s+=i, якій на
кожному кроці цілочислова змінна s збільшується
на значення індексної змінної i.
Основи програмування
Оператор циклу for ()
Процедура виконання оператора циклу:
• Спочатку індексній змінній присвоюється середнє
арифметичне значення.
• Потім перевіряється умова і якщо індексна змінна
менше значення n, виконується команда s + = i (з
поточними значеннями змінних s і i).
• Далі виконується команда i++, що збільшує на
одиницю індексну змінну, після чого знову
перевіряється умова.
• Після виконання оператора циклу значення
змінної s визначається сумою натуральних чисел
від 0 до n.
Основи програмування
Оператор циклу for ()
Деякі блоки у круглих дужках після ключового слова for
можуть бути порожніми. Наприклад,
#include <iostream>
using namespace std;
int main(){
int n,i=0,s=0;
cout<<"Enter number n=";
cin>>n;
for(; i<=n; i++){
s+=i;
}
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
}
Основи програмування
Оператор циклу for ()
В цьому випадку необхідності в першому блоці ініціалізації
значень немає, оскільки така ініціалізація для індексної змінної
виконана при її оголошенні, наприклад:
#include <iostream>
using namespace std;
int main(){
int n,i=0,s=0;
cout<<"Enter number n=";
cin>>n;
for(;i<=n;){
s+=i;
i++;
}
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
} Основи програмування
Оператор циклу for ()
В інструкції for (; i <= n;) відсутні як перший, так і
третій блоки. Команда зміни на одиницю значення
індексної змінної винесена в основний блок
оператора циклу.
Тож, можна відмовитися і від блоку з умовою
виконання циклу.

Основи програмування
Оператор циклу for ()
#include <iostream>
using namespace std;
int main(){
int n,i=0,s=0;
cout<<"Enter number n=";
cin>>n;
for(;;){
s+=i;
i++;
if( i>n ) break;
}
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
}
Основи програмування
Оператор циклу for ()
Тепер, оскільки всі три блоки в круглих дужках після
інструкції for відсутні:
• ініціалізацію;
• зміну значення індексної змінної;
• перевірку умови
необхідно реалізовувати при оголошенні змінних,
до початку оператора циклу і в основному блоці
оператора циклу.

Основи програмування
Оператор циклу for ()
Користувач повинен самостійно передбачити
можливість завершення оператора циклу!
В даному випадку цикл буде завершено завдяки
інструкції if (i> n) break в основному блоці
оператора for (). Як тільки значення змінної i
перевищить значення n, буде виконаний оператор
break, в результаті чого виконання оператора циклу
буде завершено.
Виконання цієї інструкції всередині циклу будь-
якого виду перериває й завершує цикл; далі
виконуються дії, наступні за цим циклом.
Основи програмування
Оператор циклу for ()
Якщо блок у for-операторі містить декілька команд,
вони розділяються комою. Більш того, в операторі
циклу for() в блоці ініціалізації можна оголошувати
змінні. Використання цих властивостей оператора
циклу for(), часто домагаються значно скоротити
програмний код.

Основи програмування
Оператор циклу for ()
Отже, програма стане такою:
#include <iostream>
using namespace std;
int main(){
int n,s;
cout<<"Enter number n=";
cin>>n;
for(int i=1, s=0; i<=n; s+=i++);
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
}

Основи програмування
Оператор циклу for ()
Основна частина програми складається з інструкції
for (int i = 1, s = 0; i <= n; s + = i ++ )
У блоці ініціалізації оголошуються також дві змінні:
i зі значенням 1 і s зі значенням 0. Перевіряємо
умову i <= n.
Третій блок складається з однієї команди
s + = i ++, якій значення індексної змінної i
збільшується на одиницю, а значення змінної s
збільшується на величину індексної змінної.

Основи програмування
Оператор циклу for ()
У наступному коді наведено приклад програми, в якій роль
індексної змінної, якщо цей термін взагалі тут доречний,
виконує змінна типу char. Програма вгадування букви
#include <iostream>
using namespace std;
int main(){
for(char x='a'; x!='z'; ){
cout<<"Guess a symbol: ";
cin>>x;
}
cout<<"Correct!\n";
return 0;
} Основи програмування
Оператор циклу for ()
Основу програми становить оператор циклу з
заголовком:
for (char x = 'a'; x! = 'z';),
в якому змінна x типу char ініціалізуєтся зі
значенням 'a'. Умовою, яка перевіряється є
x! = 'Z', що означає продовження оператора
циклу до тих пір, доки значення змінної x не стане
рівним 'z'. Третього блоку взагалі немає.

Основи програмування
Оператор циклу for ()
Звернемо увагу, на використання вкладених
операторів циклу.
Йдеться про те, що в рамках одного оператора
циклу використовується інший оператор циклу. До
такої ситуації призводять різні задачі.
Наприклад, розглянемо програму по виведенню
натуральних чисел від 0 до 14 у п'ять стовпчиків.

Основи програмування
Оператор циклу for ()
#include <iostream>
using namespace std;
int main()
{
int i,j;
for(i=0;i<3;i++)
{
for(j=0;j<5;j++)
{
cout<<3*(j)+i<<"\t";
}
cout<<"\n";
}
return 0;
}
0 3 6 9 12
1 4 7 10 13
2 5 8 11 14
Основи програмування
Оператор циклу for ()
Індексна змінна i зовнішнього оператора циклу
приймає значення від 1 до 3 включно. Ця змінна
визначає номер рядка, в якій відображається число.
Номер стовпця визначається індексною змінною j
внутрішнього оператора циклу.
Ця змінна при кожному фіксованому значенні
змінної i пробігає значення від 1 до 5.

Основи програмування
Оператор циклу for ()
У внутрішньому операторі циклу виконується всього
одна команда:
cout << 3 * (j) + i << " ",
за допомогою якої виводяться числа у відповідному
рядку.
У зовнішньому операторі циклу, в рамках кожного
циклу виконується дві команди: внутрішній
оператор циклу (виводяться числа в рядку) і
команда cout << "\ n" (для переходу до нового
рядка).

Основи програмування
Оператор циклу for ()
Слід чітко розуміти різницю між двома (або більше)
вкладеними операторами циклу і одним
оператором циклу з декількома індексними
змінними.

Основи програмування
Оператор циклу for ()
#include <iostream>
using namespace std;
int main(){
int i,j;
for(i=10, j=90; i<j; i+=5, j-=10)
cout<<i<<" "<<j<<"\n";
return 0;
}
10 90
15 80
20 70
25 60
30 50
35 40
Основи програмування
Оператор циклу for ()
На відміну від випадку вкладених операторів, в
даній ситуації обидві індексні змінні i та j
змінюються синхронно.
Змінна i ініціалізуєтся зі значенням 10, а змінна j –
зі значенням 90.
За кожен цикл значення змінної i збільшується на
5, а значення змінної j зменшується на 10.
Значення змінних виводяться на екран. Процес
триває до тих пір, поки значення змінної i менше
значення змінної j.

Основи програмування
Оператор циклу for ()

Основи програмування
Оператор циклу for ()

Основи програмування
Оператор циклу for ()
fact=1; k=1; поки (k <= n)
повторювати { fact*=k; k=k+1;}

• fact=1; // початкове значення добутку


• k=1; // початок перебирання множників
• k<=n; // перевірка умови продовження
• k++; // перехідна дія перед наступним кроком
після закінчення повторень k=n+1, fact=n!
fact=1;
for (k=1; k<=n; k++)
fact=fact*k;
Основи програмування
Оператор циклу while ()
Синтаксис виклику оператора while () наступний:
while(умова){
команди
}
Цей цикл ще називають циклом з передумовою.
Слово while є зарезервованим, дужки обов'язкові,
while (умова) – це заголовок циклу, а інструкція –
тіло.

Основи програмування
Оператор циклу while ()

Основи програмування
Оператор циклу while ()
Наприклад.
За цілим a≥0 обчислити найменше n, за якого n!>a.
Будемо в циклі обчислювати послідовні значення
n!, поки вони не стануть більше a. Коли цю умову
буде порушено, n буде на 1 більше потрібного
значення.

Основи програмування
Оператор циклу while ()
int main()
{ int num, fact=1, n=1;
cin>>a;
while(fact<=a)
{
fact*=n;
n++;
}
cout<<"res = "<<fact<<endl;
return 0;
}

Основи програмування
Оператор циклу while ()
Інструкція циклу з післяумовою, або do-інструкція,
має загальний вигляд:
do{
команди
}
while(умова)
В операторі циклу do-while () виконуються команди
(вкладені у фігурні дужки) вказуються після
ключового слова do.
Далі перевіряється умова, вказана у круглих дужках
після ключового слова while. Якщо умова виконана,
знову виконуються команди після ключового слова
do і т. д.
Основи програмування
Оператор циклу while ()

Основи програмування
Оператор циклу while ()
Умова перевіряється після виконання тіла циклу,
тому її називають післяумовою. Тіло циклу,
заданого do-інструкцією, виконується обов'язково
хоча б один раз (на відміну від while-інструкції).
Інструкцію циклу з післяумовою використовують,
коли потрібно спочатку виконати тіло циклу, і лише
потім перевіряти умову продовження.

Основи програмування
Оператор циклу while ()
Приклад. Обчислити суму натуральних чисел за
допомогою оператора циклу while().
#include <iostream>
using namespace std;
int main(){
int n,i=1,s=0;
cout<<"Enter number n=";
cin>>n;
while(i<=n){
s+=i;
i++;}
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
}
Основи програмування
Оператор циклу while ()
В цілому процес обчислень, в порівнянні з випадком, коли
використовувався оператор циклу for (), змінився мало. Це саме можна
сказати і до оператора do-while ().
#include <iostream>
using namespace std;
int main(){
int n,i=1,s=0;
cout<<"Enter number n=";
cin>>n;
do{
s+=i;
i++;
}while(i<=n);
cout<<"Sum of natural numbers is: "<<s<<"\n";
return 0;
} Основи програмування
Задача 1

Основи програмування
Розв’язок

Основи програмування
Розв’язок

Основи програмування
Розв’язок

Основи програмування
Розв’язок
#include <iostream>
#include <math.h>
using namespace std;
int main()
{
cout << "Input precission e:\t";
double e;
cin >> e;
double k = 1, S = 0;
while (1/(k*k)> e){
S = S+1/(k*k);
k++;
}
cout<<"S="<<S<<endl<<"k="<<k;
return 0;
}

Основи програмування
Задача 2

Основи програмування
Розв’язок

Основи програмування
Розв’язок

Основи програмування
Задача 3

Основи програмування
Розв’язок

Основи програмування

You might also like