You are on page 1of 14

МІНІСТЕРСТВО ОСВІТИ І НАУКИ УКРАЇНИ

Національний аерокосмічний університет ім. М. Є. Жуковського


«Харківський авіаційний інститут»

факультет програмної інженерії та бізнесу

кафедра інженерії програмного забезпечення

Лабораторна робота № 5
з дисципліни « Основи програмування »
назва дисципліни
на тему: «ЦИКЛІЧНІ АЛГОРИТМИ. РЕКУРЕНТНІ СПІВВІДНОШЕННЯ»

Виконав: студент 1 курсу групи № 611п


освітньої програми
121 інженерія програмного забезпечення
(шифр і назва ОП)
Гордеюк Руслан Олександрович
(прізвище й ініціали студента)
Прийняв: доцент кафедри інженерії
Соколова Є.В.
(посада, науковий ступінь, прізвище й ініціали)
Кількість балів:

Харків – 2022
2
ПОСТАНОВКА ЗАДАЧІ

Скласти алгоритм у вигляді блок-схеми та програму обчислення суми ряду


з використанням рекурентного співвідношення. У цій же програмі обчислити
контрольний вираз. Значення х увести з клавіатури ( 0 < x < 1 ).
Виконати завдання двома способами:
1. Обчислити суму ряду Sк, якщо число членів розкладання дорівнює
n. Значення n увести з клавіатури.
2. Додавання виконувати з точністю ε доти, поки ε >|S k −S k−1|. Значення
ε увести з клавіатури.
Результати обчислення суми ряду та контрольного виразу для одного
значення x мають бути розташовані на одному екрані.
Написати звіт.
3
ТЕОРЕТИЧНИЙ ВСТУП

Оператори циклу

Оператори циклу призначено для організації циклів (повторів). Цикл являє


собою послідовність операторів, яка може виконуватися більше одного разу.
Групу повторюваних операторів називають тілом циклу.
Усього є три види операторів циклу:
1. з параметром;
2. з передумовою;
3. з постумовою.

Цикл з параметром

Оператор циклу з параметром має формат (рисунок 1):

for(Ініціалізація; Умова; Модифікації) <Оператор>;

Рисунок 1 – Подання оператора for у вигляді блок-схеми

Ініціалізація використовується для встановлення початкового значення


змінних, які керують циклом.
Вираз визначає умову, при якій тіло циклу буде виконуватися.
Модифікації визначають зміну змінних, які керують циклом після кожного
виконання тіла циклу.
Оператор являє собою тіло циклу.

Оператор циклу з передумовою

Оператор циклу з передумовою доцільно використовувати у випадках, коли


кількість повторень тіла циклу заздалегідь невідома і тіло циклу може жодного
разу не виконатися. Формат оператора циклу з передумовою:

while (<Умова>)
<Оператор>;
4
Оператор тіла циклу виконується доти, поки логічний вираз набуде
значення False. Блок-схему оператора показано на рисунку 2.

Рисунок 2 – блок-схема оператора while

Оператор циклу з постумовою

Оператор циклу з постумовою доцільно використовувати у випадках, коли


тіло циклу необхідно виконати не менше одного разу і заздалегідь невідома
загальна кількість повторень циклу. Оператор циклу з постумовою має такий
формат:

do
<Оператор>;
while (<Умова>);

Умова являє собою вираз логічного типу. Тіло циклу повторюється при
значенні логічного виразу, який дорівнює True. Оскільки умова перевіряється
тільки в кінці циклу, то оператори тіла циклу виконуються мінімум один раз.
Блок-схему оператора зображено на рисунку 3.

Рисунок 3 – блок-схема оператора do..while


5
ВИКОНАННЯ РОБОТИ

Варіант 6

Завдання

Заданий числовий ряд та контрольний вираз (рисунок 4):

Рисунок 4 – завдання згідно до варіанту

Алгоритм розв’язання задачі у вигляді блок-схеми

Рисунок 5 – алгоритм розв'язання завдання у вигляді блок-схеми


6
7

Рисунок 6 – продовження рисунку 5


8
Опис вхідних і вихідних даних програми

Вхідні дані:
x – змінна дробового типу (float), складова елементу обчислюваного ряду;
n – змінна цілочисельного типу (int), кількість членів розкладання;
e– змінна дробового типу (float), задана точність обчислень;
a – змінна цілочисельного типу (int), відповідає за повтор обчислень.

Вихідні дані:
текстове повідомлення 1 – “Input x: ”, cповіщає про те що треба ввести х;
текстове повідомлення 2 – “Error. Out of range.”, якщо введене значення для
x перевищує 1 або менше за 0;
текстове повідомлення 3 – “Input n: ”, cповіщає про те що треба ввести n;
текстове повідомлення 4 – “Error. Out of range or negative num.”, якщо
введене значення для n перевищує максимальне значення int або менше за 0;
текстове повідомлення 5 – “Input e: ”, cповіщає про те що треба ввести e;
текстове повідомлення 6 – “Error. Out of range.”, якщо введене значення для
e перевищує max float або менше за min float;
текстове повідомлення 7 – “S: ” + sum, обчислене значення першої суми;
текстове повідомлення 8 – “S with e: ” + sum, обчислене значення першої
суми з точністю ε доти;
текстове повідомлення 8 – “C: ” + c, обчислене значення другої суми;
текстове повідомлення 10 – “ If you want to stop press - 0: ”, запитує чи хоче
користувач повторити обчислення.
9
Лістинг програми

#include <iostream>
#include <windows.h>
#include <math.h>
using namespace std;
int main()
{
SetConsoleOutputCP(1251);
int n, a = true;
float x, e, b, sum, up, dw, c;
while (a)
{
cout << "Input x: ";
cin >> x;
while (x <= 0 || x >= 1)
{
cout << "Error. Out of range";
cout << "Input x: ";
cin >> x;
}
cout << "Input n: ";
cin >> n;
while (n <= 0 || n >= MAXINT32)
{
cout << "Error. Out of range or negative
num.";
cout << "Input n: ";
cin >> n;
}
cout << "Input e: ";
cin >> e;
while (e < 0 || e > 1)
{
cout << "Error. Out of range";
cout << "Input e: ";
cin >> e;
}
up = x;
dw = 2;
sum = 0;
for (int k = 1; k <= n;)
{
b = up * (4 * k - 2 * k * x + x) / dw;
up *= x * x;
k++;
10
dw = (2 * k - 1) * 2 * k;
sum += b;
}
cout << "S: " << sum << endl;
for (int k = 1; fabs(b) >= e;)
{
b = up * (4 * k - 2 * k * x + x) / dw;
up *= x * x;
k++;
dw = (2 * k - 1) * 2 * k;
sum += b;
}
cout << "S with e: " << sum << endl;
c = log(sqrt(pow(1 + x, 3) / (1 - x)));
cout << "C: " << c << endl;
cout << "If you want to stop press - 0: ";
cin >> a;
if (a == 0) return 0;
}
}
11
Тестування програми

Таблиця 1 – Тестові приклади

Вхідні дані Вихідні дані


Очікуваний Отриманий
№ x n e repeat результат результат

String – –
float int float int
“Error. Out of Рис.
1 200 – – – нормальний
range.” №7
“Error.
Рис.
2 0.5 2147483648 – – Out of range or аномальний
№8
negative num.”
3.402823466E+3 “Error. Out of Рис.
3 0.56 472 – аномальний
9 range.” №9
Рис.
4 0.22 73 1e-10 – 0.422507 №1 нормальний
0
Рис.
5 0.47 475 0.3 0 0.895333 №1 нормальний
1
2385 1e-10 1 1.05664
Рис.
6 0.55 №1 нормальний
1 1 0 1.05664 2
12
Результати роботи програми

Результати тестових обчислень (екранні форми з результатами обчислень


тестових прикладів згідно таблиці 1) наведено на рисунках 7 – 12.

Рисунок 7 – Результат тесту №1

Рисунок 8 – Результат тесту №2

Рисунок 9 – Результат тесту №3

Рисунок 10 – Результат тесту №4


13

Рисунок 11 – Результат тесту №5

Рисунок 12 – Результат тесту №6

Аналізи результатів

Для перевірки програми було проведено 6 тестів.


Нормальні результати – 4: тест №1, 4, 5, – очікуваний результат збігається з
дійсним; тест №6 – суми не зовсім збігаються з результатом контрольного
виразу, через особливість заданого числового ряду, але результат задовільний.
Аномальні результати – 2 : тест №2, 3 – було введено числові значення, що
перебільшують діапазон типу даних, через що програма увійшла в нескінченний
цикл.
14
ВИСНОВКИ

Під час виконання цієї лабораторної роботи було отримано навчки


використання рекурентних співвідношень та на практиці опрацьовано
програмування циклічних алгоритмів.

You might also like