Professional Documents
Culture Documents
Лабораторна робота7
Лабораторна робота7
Теоретичні відомості
Оператори з передумовою та післяумовою використовуються для органі-
зації циклів і є альтернативними операторові for. Звичайно цикл з передумо-
вою використовується, якщо кількість повторювань заздалегідь є невідома або
немає явно вираженого кроку змінювання параметра циклу. А для багаторазо-
вих повторювань тіла циклу відомим є вираз умови, за істинності якої цикл про-
довжує виконання. Цю умову слід перевіряти кожного разу перед черговим по-
вторенням.
Синтаксис циклу з передумовою:
while (<умова>)
{ <тіло циклу> };
Послідовність операторів (тіло циклу) виконуєть-
ся, доки умова є істинна (true, має ненульове значення), а Ні
Умова?
вихід з циклу здійснюється, коли умова стане хибною
Так
(false, матиме нульове значення). Якщо умова є хибною
Оператори
при входженні до циклу, то послідовність операторів не
виконуватиметься жодного разу, а керування передава-
тиметься до наступного оператора програми.
Цикл з післяумовою використовується, якщо є потреба перевіряти умову
кожного разу після чергового повторення. Відмінність циклу з передумовою від
циклу з післяумовою полягає в першій ітерації: цикл з післяумовою завжди ви-
конується принаймні одноразово незалежно від умови.
Синтаксис циклу з післяумовою:
do {
<тіло циклу>
} while (<умова>);
Послідовність операторів (тіло циклу) виконуєть-
ся один чи кілька разів, доки умова стане хибною (false Оператори
чи дорівнюватиме нулю). Якщо умова є істинна (нену-
льова), то оператори тіла циклу виконуються повторно. Так
Умова?
Оператор циклу do-while використовується в тих випа- Ні
дках, коли є потреба виконати тіло циклу хоча б однора-
зово, оскільки перевірка умови здійснюється після вико-
нання операторів.
Якщо тіло циклу складається з одного оператора, то операторні дужки {}
не є обов’язкові.
Оператори while та do-while можуть завчасно завершитись при вико-
нанні операторів break, goto, return усередині тіла циклу.
Варто зауважити, що в тілі циклу слід передбачати змінювання парамет-
рів, які беруть участь в умові, інакше умову виходу з циклу ніколи не буде ви-
конано й відбуватиметься зациклювання.
Наведемо відмінності роботи різних операторів циклу на прикладі обчис-
лення суми всіх непарних чисел у діапазоні від 10 до 100:
1) з використанням оператора for
int i, s=0;
for (i=11; i<100; i += 2) s += i;
2) з використанням оператора while
int s=0, i=11;
while (i<100) { s += i; i += 2; }
3) з використанням оператора do-while
int s=0, i=11;
do { s += i; i += 2;} while (i<100);
Приклади програм
2k +1
Приклад 1. Обчислити суму S= x , підсумовуючи члени
ряду 3 (2k - 1)!
k
поряд роз-
k
(k + 3)(2k)!
міщених членів ряду: u3 = R u2 ,…, uk = R uk -1 ,
u2 = R u1 ,
звідки
.
- 1k +1 x2k -1
Для визначення R в цю формулу uk = та u . Для
k-
слід підставити (k + 3)(2k)!
1
uk
обчислення підставимо у вираз для uk (k – 1) замість k:
-1 -1k
uk -1 = - 1 x
k 2(k -1)-1 2k -3
x ;
=
(k + 2)(2k - 2)! (k + 2)(2k - 2)!
u - 1
k +1
x
2k -
1 (k + 2)(2k - (-1)k +1 x2k -1 (k + 2) (2k -
2)!
R= k
= k
u (k + 3)(2k)!
x -1
2)! (-1)k x2k -3 (k + 3) =
2k -3
=
k -1 (2k)!
(-1)k +1-k x2k -1-(2k -3) (k + 2) 1 2 ... (2k - 2)
= = x2 k + 2 .
–
(k + 3) 1 2 ... (2k - 2) (2k -1) 2k(k + 3)(2k -1)
· 2k
Крім рекурентного множника R, треба обчислити 2 перший член ряду за k = 1:
-1 x x
u1 =
= 4 .8
(2)!
Текст програми:
#include <iostream>
#include <math.h> using
namespace std; int main()
{
setlocale(0,".1251"); double x, u,
r, s=0, eps; int i, f, k=0;
cout<<"Введiть значення x= "; cin>> x;
cout<<"Введiть значення точностi "; cin>> eps;
cout<< "\nРезультати:\n"; u = x/8;
s = u;
do { k++;
cout<< "доданок " << k << ": " << u << endl;
r = -x*x*(k+2)/((3+k)*(2*k) *(2*k-1)); u *= r
; s += u;
} while(fabs(u) >= eps); cout <<
"Сума = " << s << endl;
cout << "Кiлькiсть доданкiв = " << k << endl;
system("pause>>void");
return 0;
}
Результати роботи:
Введiть значення x= 2.4
Введiть значення точностi 0.0001
Результати:
доданок 1: 0.3
доданок 2: -0.648
доданок 3: 0.248832
доданок 4: -0.0398131
доданок 5: 0.00351005
доданок 6: -0.0001196563
Сума = -0.13566
Кiлькiсть доданкiв = 6
S=0 S = 0, k = 1 S = 0, k = 1
Введення Введення
Введення х х
х k <= 5
Так Ні S=S+ xk+1/(2k +k)
k = 1, 5
k=k+1
S=S+ xk+1/(2k +k)
S=S+ xk+1/(2k +k)
k=k+1 Такk <= 5
Ні Виведення S
Кінець
Виведення Виведення
S S
Кінець
Кінець
a б в
Схеми алгоритмів програм з різними операторами циклу:
a) for; б) while; в) do-while
Приклад 4. Визначити і вивести всі дільники введеного натурального числа.
Текст програми:
#include <iostream>
int main()
{ unsigned int x, i; std::cout <<
"Enter x: "; std::cin >> x;
std::cout << std::endl;
for (i=1; i<x; i++ )
if (x%i == 0) // Якщо ділиться без остачі,
std::cout << i << "\t"; // вивести черговий дільник
std::cin.get();
std::cin.get()
; return 0;
}
Приклад 5. Визначити кількість цифр введеного натурального числа.
Текст програми:
#include <iostream>
using namespace
std; int main()
{ unsigned int N, kol; cout
<< "N="; cin >> N;
for (kol=1; N/10>0; kol++,N/=10);
cout << "kol=" << kol << endl;
system("pause>>void");
return 0;
}
Приклад 6. Визначити найменшу та найбільшу цифру введеного натураль-
ного числа.
Текст програми:
#include
<iostream> using
namespace std; int
main()
{ unsigned int N, z, min, max;
cout<<"N="; cin>>N;
for (max=min=N%10; N>0; N/=10)
{ z=N%10;
if (z>max)
max=z; if (z<min)
min=z;
}
cout << "min=" << min << endl << "max=" << max << endl;
system("pause>>void");
return 0;
}
Приклад 7. Перевірити чи є введене натуральне число паліндромом.
Паліндром – це число (слово чи фраза), яке однаково читається в обох на-
прямках, або, інакше кажучи, будь-який симетричний відносно своєї середини
набір символів. Наприклад, числа 404, 12521 – паліндроми.
Текст програми:
#include <iostream>
using namespace std;
int main()
{
setlocale(0,".1251");
unsigned long long n,m,d; // int kol, i; bool Fl;
cout<<"N="; cin>>n; d
= 0; m = n;
while ( m!=0)
{ d = d*10 + m%10; m
/= 10;
}
if (d==n) cout<<"Так, число є палiндромом"<<endl; else cout<<"Нi, число не є
палiндромом "<<endl; system("pause>>void");
return 0;
}
Таблиця 8.3
Індивідуальні завдання високого рівня складності
№
Завдання
вар.
1 Ввести натуральне число та визначити суму цифр числа
Ввести натуральне число та визначити першу цифру числа, наприклад, для
2
числа 3406 цифра 3
3 Ввести натуральне число та визначити суму всіх його дільників
4 Ввести натуральне число та визначити кількість парних цифр числа
5 Ввести натуральне число та визначити найбільшу цифру числа
Ввести натуральне число та змінити порядок цифр числа, наприклад, було
6
1234, стало 4321
7 Ввести натуральне число та визначити його цифри, які кратні 3
Закінчення табл. 8.3
№
Варіанти завдань
вар.
8 Ввести натуральне число та дописати в нього по 1 у початок і кінець
Ввести натуральне число та визначити скільки разів його перша цифра
9 зустрічається у числі
10 Ввести натуральне число та визначити кількість його дільників менших 10
11 Ввести натуральне число та визначити чи є воно степенем числа 3
Ввести натуральне число та поміняти місцями першу й останню цифру чи-
12
сла, наприклад, з числа 1234 отримати 4231
Ввести натуральне число та дописати до нього таке само число, наприклад,
13
з числа 1234 отримати 12341234
14 Ввести натуральне число та визначити кількість його парних дільників
Приписати до введеного числа таке само число, наприклад, з числа 1234
15
здобути 12341234
16 Ввести натуральне число та визначити кількість непарних цифр числа
17 Ввести натуральне число та визначити найменшу цифру числа
18 Ввести натуральне число та визначити його цифри, які кратні 5
19 Ввести натуральне число та визначити чи є воно степенем числа 2
20 Ввести натуральне число та визначити кількість його непарних дільників
21 Вивести всі двозначні числа, які діляться на 5 і містять цифру 5
Вивести всі трьохзначні числа, які при діленні на 47 дають в залишку 43, а
22 при діленні на 43 дають в залишку 47
23 Ввести натуральне число та визначити кількість його дільників
24 Ввести натуральне число та визначити суму парних дільників
25 Вивести всі трьохзначні числа, кратні 7, і сума цифр яких також кратна 7
26 Вивести всі двозначні числа, які діляться на 9 або містять цифру 9
27 Вивести всі двозначні числа, сума квадратів цифр яких ділиться на 13
28 Ввести натуральне число та визначити суму непарних дільників
Ввести натуральне число та поміняти місцями першу і другу цифру числа,
29
наприклад, з числа 1234 отримати 2134
Ввести натуральне число та продублювати кожну з цифр числа двічі,
30
наприклад, з числа 1234 отримати 11223344