You are on page 1of 9

Лабораторна робота №5

(2 год.)
Тема: Циклічний обчислювальний процес. Команди циклу з передумовою та
післяумовою.
Мета роботи: Оволодіти практичними навиками розробки та програмування
обчислювального процесу циклічної структури. Засвоїти запис і
використання команд циклу з передумовою та післяумовою. Навчитись
організовувати циклічний обчислювальний процес табуляції функцій при
допомозі всіх трьох команд циклу.
За час виконання лабораторної роботи студент повинен освоїти:
• Розробку алгоритмів циклічної структури з передумовою та
післяумовою.
• Синтаксис та застосування команди циклу з передумовою.
• Синтаксис та застосування команди циклу з післяумовою.
• Відмінності та сфери використання команди циклу з передумовою та
післяумовою.
• Запис складних виразів з використанням формул представлення одних
функцій через інші.
• Організацію виводу результатів в табличній формі.
Завдання на лабораторну роботу: Скласти три схеми алгоритму та три
програми на C++ обчислення значення функції на проміжку від xp до xk з
кроком h, застосовуючи команду циклу з передумовою, команду циклу з
післяумовою та команду циклу з визначеною кількістю повторень for. Вивід
результатів передбачити в виді таблиці з заголовками колонок "аргумент",
"функція".
Порядок виконання лабораторної роботи:
• Використовуючи відповідний ярлик, викликати інтегроване середовище
C++.
• Ввести текст програми, в якій циклічний обчислювальний процес
реалізований із використанням команди циклу з передумовою (в першій
стрічці обов’язково має бути коментар, в якому вказати номер роботи,
групу та прізвище виконавця). Ввід вхідних даних має бути організований
з використанням комбінації команд виводу і вводу, а вивід результатів – у
науковому форматі.
• Текст програми записати у власну папку на диску Z: (наприклад
lr5v30_1).
• Відкомпілювати програму, виправляючи при цьому можливі помилки.
• Відлагоджену програму виконати, записуючи отримані результати.
• Модифікувати створену програму, реалізувавши циклічний
обчислювальний процес із використанням команди циклу з післяумовою.
• Змінений текст програми записати у власну папку на диску Z: під зміненим
іменем (наприклад lr5v30_2)
• Відкомпілювати програму, виправляючи при цьому можливі помилки.
• Відлагоджену програму виконати, записуючи отримані результати.
• Модифікувати одну із створених програм, реалізувавши циклічний
обчислювальний процес із використанням команди циклу з визначеною
кількістю повторень FOR.
• Змінений текст програми записати у власну папку на диску Z: під зміненим
іменем (наприклад lr5v30_3)
• Відкомпілювати програму, виправляючи при цьому можливі помилки.
• Відлагоджену програму виконати, записуючи отримані результати.
• Оформити звіт про виконану роботу.
Теоретичні відомості
Команда циклу з передумовою (while) має вигляд:
while (<логічний вираз>) <команда1>;
Дія команди.
1) Обчислюється значення логічного виразу. Якщо воно істинне, то
переходимо до пункту 2), якщо хибне – до пункту 3).
2) Виконується команда1 і відбувається перехід до пункту 1).
3) Відбувається перехід до наступної після while команди.
Якщо треба перевірити декілька умов, то застосовують команду "кома".
Команда1 може бути порожньою, простою або складеною.
Для того, щоб відбувся вихід із циклу, необхідно змінювати значення
параметра циклу у команді1. Параметр циклу - це змінна, що входить у
логічний вираз.
Команда while може бути виконана нуль або більше раз.
Приклад Нехай х = 4, s = 0, d = 1. Після виконання команд
while (х <= 8) { s += х; х++;}
while (x> 10)d*=x
S = 0 + 4 + 5 + 6 + 7 + 8 = 30, Х = 9,
а змінна d свого значення (1) не змінить, оскільки значення виразу х> 10
хибне, і тому команда d *= х у циклі while виконуватись не буде.
Задача (про суму цифр натурального числа). Для заданого натурального
числа п підрахувати суму його цифр
#include <iostream>
using namespace std;
void main()
{
int S = 0, n, m;
cout << "Введіть число"; сіn >> n;
m = n;
while (m > 0)
{
S+=m% 10;
m/=10;
}
cout << "Сума цифр числа " << n << " дорівнює " << S;
}
Команда циклу з післяумовою do while має вигляд:
do <команда1>; while (<логічний вираз>);
Дія команди.
1) Виконується команда1 і обчислюється значення логічного виразу.
2) Якщо значення логічного виразу істинне, то див. пункт 1), якщо
значення логічного виразу хибне – відбувається перехід до
наступної після do while команди.
Команда1 у циклі do while, на відміну від циклу while, буде
виконуватись хоча б один раз завжди.
Приклад. Нехай цілі змінні х, у мають значення х = 5, у = 0. У
результаті виконання команд
do {
у += х; z = 2 * х; х -= 2;
}
while (x > 1);
змінні х, у, z набудуть таких значень: у = 0 + 5 + 3 = 8, z = 6, х = 1.
Задача (про розклад числа на прості множники).
Розкласти на прості множники задане натуральне число. Кількість
виведень кожного множника дорівнює його кратності у розкладі.
#include <iostream>
using namespace std;
void main()
{
int і, n;
cout << "Введіть число "; сіn >> n;
cout << "\n n = 1";
for(i = 2; і <= n; i++)
{
if (n % i) continue;
do
{
cout << " * " << i;
n /= i;
}
while (!(n%i));
}
}
Зауваження. Замість оголошення сталої const float pi = 3.1415926
можна використовувати стандартну сталу М_РІ, яка описана у модулі
math.h.

Варіанти завдань лабораторної роботи



функція a b xp xk h
п/п
1 y = lg arcsin(0.01  ax 2 ) + 3 tg( bx) + e3.7 0.12 0.11 1 3 0.2
2 y = e 2 x tg 2 (ax) + lg(arccos(0.1  bx))2 + x 3.1 0.99 0.32 2 3 0.1
7
bx 2
3 y = lg tg( ax) + − e(a + x) 0.47 0.56 0.07 0.49 0.07
arcsin x
4 y = a(arccosx) 2 − e 2.8 tg( bx) + lg 5 x 0.28 0.76 0.46 0.66 0.04

ebx
5 y = arcsin x  tg 2 (ax) − lg(2 x) + 3
0.47 0.98 0.12 0.72 0.06
x
7.1 e ab tg 2 (ax)
6 y = bx lg( ax) + 0.69 0.46 /2  /10
arccos(0.05  bx)
lg( x 2 + b) arcsin(b)
x
7 y=e 0.43 0.88 2 8 0.5
tg( 3x) + 3 xa
8 y = lg arccos(ax) + e 2.5 tg( x 2 + b) 4.1 0.19 0.33 0.22 0.82 0.06
lg( xa )
+ tg b + e (2 x − a )
x
y= −
(x + b )9
9 0.29 0.99 0.17 0.27 0.01
arccos x

10 y=
e9.2 arcsinb
tg (ax ) + 5 x + a
+ lg 2 x 2
( ) 0.37 0.46 1.5 7.5 0.5

tg ( xa )
11 y=
arcsin(0.05  ax )
+ e 3.7 lg b 2 − 3 bx ( ) 0.58 0.37 2.5 8 0.5

12 ( )
y = arccos x + tg x 2 + b − lg x + (ax )7.3 e9.4 0.26 0.11 0.08 0.8 0.08

13 y=
e 7.9
arccos( x − a )
+ lg x 2 + b 2 ( ) 3
bx  tg (ax ) 0.65 0.27 1.01 1.21 0.02

tg (xa ) lg(bx + a )
14 y = 1.2 + 0.98 0.98 0.1 0.8 0.07
e arccos x 5 x + ba 2

15 y=
( )
a3 xe 3.7 + tg 2 x 2 lg (5 x )
0.57 0.47 0.02 0.2 0.02
arcsin ( x + 0.2b )
e 4.7 3 ax + b 2 − lg(bx )
16 y= 0.37 0.59 1.3 4 0.3
tg (bx ) + arccos(b )
y = 3 a 2 + x − e3.6 tg (a + x )arcsin b 2 + ( )
( )
17 0.87 0.28 1.42 9.42 0.25
lg x + b
e1.9 arcsin (a + x ) 3 xa
18 y = lg ( ) (
x + a tg x 2 − b + ) tg b
0.05 0.49 0.07 0.7 0.07

19 y = 7 x 2 + x e1.5 lg x − arccos a + tg (2b ) 0.97 0.54 3 15 2


20 ( )
y = lg b 2 + 2 x tg (x + a ) e7.2 + arcsinb − 9 x 0.98 0.25 2.75 6.75 0.5
21 y = tg 2 x + lg x  arccos(bx ) + e1.3 3 (x + a )2 0.98 0.1 1.04 5.04 0.5

22
(
lg x + bx 2 3.9
y= 9
)
e − tg (a + b ) + arccos b 0.87 0.43 2.54 6.54 0.4
a+x
y = arcsin( xb )  lg xa 2 − ax +
23 0.37 0.75 0.04 0.44 0.04
e 0.9
 x  tg ( x + ba )
3

24 y=
e 0.8 tg ( xa ) lg ax 2 + b x
+
( ) 0.04 0.98 1 7 0.6
arccos(ax ) 3
4x2
25 ( ) (
y = lg 3 x + b + e1.2 tg a + b 2 + arcsin(bx ) ) 0.58 0.56 0.21 0.41 0.02
26 ( )
y = tg 2 b + lg x1.2 e3.8 + arccos(x + 0.2a ) 0.37 0.37 0.22 0.82 0.06
27 y = arcsin (a ) + lg ( ax + b )tg (bx ) + e x 2 0.3 3 2 0.36 0.97 5 15 1

tg (x + b ) 2
28 y= 3
+ lg( x + 2b )arcsin(bx ) + e 0.4
0.95 0.09 0.54 0.84 0.03
ax
29 y = 5 bx 2 + e 3.7 lg ( )
x + a 2 tg x − arccos(2 x ) 0.22 0.38 0.19 0.49 0.03
3
30 𝑦 = 𝑎𝑟𝑐𝑠𝑖𝑛 𝑥 − 𝑙𝑛 |𝑡𝑔 (𝑥 2 + √𝑏 3 )| 𝑒 0.4 + √𝑥 2 + 𝑎 0.77 0.88 0.2 0.6 0.05

Приклад виконання завдання


Завдання:
функція a b xp xk h
(
y = e 0.4 arcsin x − lg tg x + b + 7 x 2 + a ) 0.88 0.77 0.24 0.64 0.04

Блок схема для програми з командою while:


початок

вв. a,b,xp,xk,h

x=xp

поки х ≤ хк+h/2

вив. x,y

x=x+h

кінець циклу

кінець

Програма з командою while:


#include <iostream>
#include <math.h>
#include <iomanip.h>
using namespace std;
int main()
{
setlocate(0 , ”ukr”);
float a,b,xp,xk,h,x,y;
cout << "a= "; cin >> a;
cout << "b= "; cin >> b;
cout << "xp= "; cin >> xp;
cout << "xk= "; cin >> xk;
cout << "h= "; cin >> h;
x = xp;
cout << "аргумент" << "\t" << "функція " << endl;
cout << setiosflags(ios::scientific);
while(x <= xk + h/2)
{
y = exp(0.4) * asin(x) - log10(fabs(tan(x + sqrt(b)))) +
pow(x*x + a,1.0/7);
cout << x << "\t" << "\t" << y << endl;
x += h;
}
return 0;
}
Зауваження Ураховуючи специфіку комп'ютерної арифметики, щоб
не втратити останнього значення функції, у будові циклів while, do
while, for до останнього значення хk додаємо деяке зміщення, у цьому
випадку h/2.
Блок схема для програми з командою do while:

початок

вв. a,b,xp,xk,h

x=xp

виконати

вив. x,y

x=x+h

поки х ≤ хк+h/2

кінець

Програма з командою do while:


#include <iostream>
#include <math.h>
#include <iomanip.h>
using namespace std;
int main()
{
setlocate(0 , ”ukr”);
float a,b,xp,xk,h,x,y;
cout << "a= "; cin >> a;
cout << "b= "; cin >> b;
cout << "xp= "; cin >> xp;
cout << "xk= "; cin >> xk;
cout << "h= "; cin >> h;
x = xp;
cout << "аргумент" << "\t" << "функція " << endl;
cout << setiosflags(ios::scientific);
do
{
y = exp(0.4) * asin(x) - log10(fabs(tan(x + sqrt(b)))) +
pow(x*x + a,1.0/7);
cout << x << "\t" << "\t" << y << endl;
x += h;
}
while(x <= xk + h/2)
return 0;
}

Блок схема для програми з командою for:

початок

вв. a,b,xp,xk,h

x=xp,xk+h/2,h

вив. x,y

кінець

Програма з командою for:


#include <iostream>
#include <math.h>
#include <iomanip.h>
using namespace std;
int main()
{
setlocate(0 , ”ukr”);
float a,b,xp,xk,h,x,y;
cout << "a= "; cin >> a;
cout << "b= "; cin >> b;
cout << "xp= "; cin >> xp;
cout << "xk= "; cin >> xk;
cout << "h= "; cin >> h;
cout << "аргумент" << "\t" << "функція " << endl;
cout << setiosflags(ios::scientific);
for(x = xp; x<= xk + h/2; x+=h)
{
y = exp(0.4) * asin(x) - log10(fabs(tan(x + sqrt(b)))) +
pow(x*x + a,1.0/7);
cout << x << "\t" << "\t" << y << endl;
}
return 0;
}
Контрольні питання:
1. Команда циклу з передумовою в C++. Синтаксис та порядок роботи.
2. Команда циклу з післяумовою в C++. Синтаксис та порядок роботи.
3. Відмінності та сфери використання команд циклу з передумовою
та післяумовою.
4. Організація діалогу при вводі значень змінних в C++.
5. Логічні вирази. Правила їх запису в C++. Істинність логічних
операцій.
6. Умовна команда в C++. Синтаксис та порядок роботи.
7. Складена команда в C++. Синтаксис та порядок роботи.
8. Команда ?. Синтаксис та порядок роботи.
9. Логічні вирази. Правила їх запису в C++. Істиність логічних
операцій.
10. Основні стандартні математичні функції в С++.

Вправи
Визначте результати виконання таких команд (усно):
а)а = 5; for (і = 1; і <= 2; І++) а = а * і - 2; а++; (відповідь: а = 5);
б) а = 1; for (і = 1; і <= 3; i++) {а = а + і; а -= 1;}
в) а = 0; for (і = 1; і <= 4; i++) а += і; а += 2;
г) р = 1; for (b = 8; b >= 5; p += b—); р++;
д) s = 0; for (n = 7; n >= 4; n--) {s += n; s++;}
е) a = 4; for (i = 1; і <= 2; i++) a =a * і - 1; a += 2;
є) a = 1; for (i = 1; і <= 3; i++) {a = a + 2 * і; а -= 2;}
ж) a = -1; for (i = 1; і <= 4; i++) a = 2 * a + i; a += 2;
з) p = 30; for (b = 7; b >= 4; b--) p -= b; p += 5;
i) s = 0; for (n = 6; n >= 3; n--) {s = s + 2 * n; s--;}.

You might also like