Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Технології програмування Лабораторний Практикум...doc
Скачиваний:
7
Добавлен:
09.11.2019
Размер:
9.09 Mб
Скачать

2.1. Програма роботи

2.1.1. Підготувати бланк завдання та отримати завдання.

2.1.2. Запрограмувати логічні функції згідно з вказівками до виконання роботи.

2.1.3. Виконати одновимірне табулювання логічних функцій згідно з вказівками до виконання роботи.

2.1.4. Виконати двовимірне табулювання логічних функцій згідно з вказівками до виконання роботи.

2.1.5. Підготувати власні коректні вхідні дані для кожної з виконуваних задач, провести відповідні розрахунки і проаналізувати їх.

2.1.6. Оформити звіт про роботу та захистити її.

2.2. Вказівки до виконання роботи

2.2.1. Курсант/студент, відповідно до порядкового номера в журналі викладача, вибирає для себе індивідуальне завдання з розд. 2.4, яке складається з декількох задач, і записує його до бланку завдання (у документ Word).

2.2.2. У середовищі Borland C++ Builder 6 логічні функції необхідно запрограмувати двома способами: з введенням і без введення допоміжних змінних, логічні функції курсант/студент програмує на власний розсуд, не забуваючи при цьому про свої знання та навики програмування.

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

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

2.2.5. Власних вхідних даних потрібно підготувати не менше двох комплектів. Їхні значення мають бути коректними, знаходитися в розумних межах і не суперечити своїм логічним виразам (наприклад, щоб значення аргумента кореня квадратного чи логарифма натурального не були від'ємними, аргумент експоненти – не занадто великим і т.д.). Після проведення розрахунків потрібно їх проаналізувати, зробити відповідні висновки, внести власні пропозиції та занести їх до звіту.

2.2.6. Звіт з виконаної роботи має містити такі розділи:

  • бланк індивідуального завдання з записаними на ньому умовами задач;

  • код програми, який планується реалізувати у середовищі Borland C++;

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

  • аналіз отриманих результатів, висновки про особливості розв'язання задач і пропозиції щодо їх удосконалення.

2.3. Зразок виконання роботи

Задача 2.1. Задано такі дійсні числа: x = 1.53ln(№ + 0.5), y = 2.7ln(№ + 1.5), z = -2.15ln(№ + 1.5) (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значень логічної функції с[x, y, z, b] та математичної функції b[x, y, z] згідно з такими математичними виразами:

і .

Код програми 2.1. Обчислення значень логічних функцій

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

#include <math> // Для математичних функцій

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

// Обчислення значення математичної функції b[x, y, z]

double Fn_b(double, double, double);

// Обчислення значення логічної функції c[x, y, z, b]

double Fn_c(double, double, double, double);

int main()

{

// Задання точності

cout.precision(3); // Формат #.###

cout.setf(ios_base::fixed); // Формат #.###

SetConsoleOutputCP(1251); // Виведення кирилиці

// Опис змінних

double x, y, z, c;

// Введення вхідних даних

int Nv; cout << "Введіть значення Nv = "; cin >> Nv;

// Розрахунок значень x, y, z

x = 1.53 * log(Nv + 0.5); cout << "Значення x = " << setw(7) << x << "." << endl;

y = 2.7 * log(Nv + 1.5); cout << "Значення y = " << setw(7) << y << "." << endl;

z = -2.15 * log(Nv + 1.5); cout << "Значення z = " << setw(7) << z << endl << endl;

cout << "Завдання 2.1. Обчислення значень математичної та логічної функцій" << endl;

// Розрахунок значення математичної функції b[x, y, z]

double b1 = (y - x)/(z + 1.2); cout << "Значення b1 = " << setw(8) << b1 << endl;

double b2 = pow(y - x, 2)/pow(sin(pow(z, 3)), 2); cout << "Значення b2 = " << setw(8) << b2 << endl;

double b3 = pow(y - x, 3)/cos(z * z); cout << "Значення b3 = " << setw(8) << b3 << endl;

double b = b1 + b2 + b3; cout << "Значення функції b [] = " << setw(6) << b << endl;

double bb = (y - x)/(z + 1.2) + pow(y - x, 2)/pow(sin(pow(z, 3)), 2) + pow(y - x, 3)/cos(z * z);

cout << "Значення функції b'[] = " << setw(6) << bb << endl;

cout << "Значення функції b\"[] = " << setw(6) << Fn_b(x, y, z) << endl << endl;

// Розрахунок значення логічної функції c[x, y, z, b]

if(x < - 0.5)

c = pow(fabs(x * y + 2 * b), 1./3);

else if(x >= - 0.3 && x < 0.3)

c = b + (x * x + y * y)/(z + (b/2));

else

c = pow(pow(fabs(0.4 * b * b - pow(x, 3)), 0.3), 1./2);

cout << "Значення функції c [] = " << setw(6) << c << endl;

cout << "Значення функції c\"[] = " << setw(6) << Fn_c(x, y, z, b) << endl;

getch(); return 0;

}

// Обчислення значення математичної функції b[x, y, z]

double Fn_b(double x, double y, double z)

{

double b1 = (y - x)/(z + 1.2);

double b2 = pow(y - x, 2)/pow(sin(pow(z, 3)), 2);

double b3 = pow(y - x, 3)/cos(z * z);

return b1 + b2 + b3;

}

// Обчислення значення логічної функції c[x, y, z, b]

double Fn_c(double x, double y, double z, double b)

{

if(x < - 0.5)

return pow(fabs(x * y + 2 * b), 1./3);

else if(x >= - 0.3 && x < 0.3)

return b + (x * x + y * y)/(z + (b/2));

else

return pow(pow(fabs(0.4 * b * b - pow(x, 3)), 0.3), 1./2);

}

Результат обчислення значень логічних функцій

Задача 2.2. Для аргумента x задано межі та крок його зміни: xп = -1.83ln(№ + 0.5), xк = 2.38ln(№ + 0.5), x = (xк – xп)/8, а також дійсні числа y = 2.7ln(№ + 1.5), z = -2.15ln(№ + 1.5) (де № = 4 – номер варіанта). Потрібно розробити код програми для одновимірного табулювання логічної функції c = f[x, y, z, b] та математичної функції b = f[x, y, z] за аргументом х, використовуючи математичні вирази, наведені у задачі 2.1.

Код програми 2.2. Одновимірне табулювання логічних функцій

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

#include <math> // Для математичних функцій

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

// Обчислення значення математичної функції b[x, y, z]

double Fn_b(double, double, double);

// Обчислення значення логічної функції c[x, y, z, b]

double Fn_c(double, double, double, double);

int main()

{

// Задання точності

cout.precision(3); // Формат #.###

cout.setf(ios_base::fixed); // Формат #.###

SetConsoleOutputCP(1251); // Виведення кирилиці

// Опис змінних

double dx, xp, xk, x, y, z, b, c;

cout << "Завдання 2.2. Одновимірне табулювання математичної та логічної функцій" << endl << endl;

// Введення вхідних даних

int Nv; cout << "Введіть значення Nv= "; cin >> Nv;

xp = -1.83 * log(Nv + 0.5); cout << "Значення xp = " << setw(6) << xp << "; ";

xk = 2.38 * log(Nv + 0.5); cout << setw(8) << "Значення xk = " << setw(6) << xk << "; ";

dx = (xk - xp)/8; cout << setw(8) << "Значення dx = " << setw(6) << dx << "." << endl;

y = 2.7 * log(Nv + 1.5); cout << "Значення y = " << setw(7) << y << "; ";

z = - 2.15 * log(Nv + 1.5); cout << setw(8) << "Значення z = " << setw(6) << z << "." << endl << endl;

// Табулювання функції за змінною x

for(x = xp; x <= xk + dx/2; x += dx)

{

cout << setw(4) << "x= " << setw(6) << x << "; ";

// Розрахунок значення функцій b[x, y, z] та c[x, y, z, b]

b = Fn_b(x, y, z); cout << setw(8) << "b[]= " << setw(7) << b;

c = Fn_c(x, y, z, b); cout << setw(8) << "c[]= " << setw(7) << c << endl;

}

getch(); return 0;

}

Результат одновимірного табулювання логічних функцій

Задача 2.3. Для аргументів x та y задано відповідні межі та крок їх зміни: xп = -1.38ln(№ + 0.5), xк = 2.83ln(№ + 1.5), x = (xк – xп)/8, yп = -0.74ln(№ + 1.5), yк = 0.86ln(№ + 1.5), y = (yк – yп)/10, z = -2.15ln(№ + 1.5) (де № = 4 – номер варіанта). Потрібно розробити код програми для двовимірного табулювання логічної функції c = f[x, y, z, b] та математичної функції b = f[x, y, z] за аргументами х і у, використовуючи математичні вирази, наведені у задачі 2.1.

Код програми 1.2. Двовимірне табулювання логічних функцій

#include <vcl>

#include <iostream> // Для потокового введення-виведення

#include <iomanip> // Використання маніпуляторів введення-виведення

#include <math> // Для математичних функцій

#include <conio> // Для консольного режиму роботи

using namespace std; // Використання стандартного простору імен

// Обчислення значення математичної функції b[x, y, z]

double Fn_b(double, double, double);

// Обчислення значення логічної функції c[x, y, z, b]

double Fn_c(double, double, double, double);

int main()

{

// Задання точності

cout.precision(3); // Формат #.###

cout.setf(ios_base::fixed); // Формат #.##

SetConsoleOutputCP(1251); // Виведення кирилиці

// Опис змінних

double dx, xp, xk, x, y, yp, yk, dy, z, b, c;

cout << "Завдання 2.3. Двовимірне табулювання логічних функцій" << endl << endl;

int Nv; cout << "Введіть значення Nv= "; cin >> Nv;

xp = -1.38 * log( Nv + 0.5); cout << "Значення xp = " << setw(6) << xp << "; ";

xk = 2.83 * log( Nv + 1.5); cout << setw(14) << "Значення xk = " << setw(6) << xk << "; ";

dx = (xk - xp)/8; cout << setw(14) << "Значення dx = " << setw(6) << dx << "." << endl;

yp = -0.74 * log( Nv + 1.5); cout << "Значення yp = " << setw(6) << yp << "; ";

yk = 0.86 * log( Nv + 1.5); cout << setw(14) << "Значення yk = " << setw(6) << yk << "; ";

dy = (yk - yp)/10; cout << setw(14) << "Значення dy = " << setw(6) << dy << "." << endl;

z = -2.15 * log( Nv + 1.5) ; cout << "Значення z = " << setw(7) << z << "." << endl << endl;

cout << "Двовимірне табулювання функції b[x, y, z]" << endl;

cout << setw(12) << " y/x -- > ";

for(x = xp; x <= xk; x += dx)

cout << setw(8) << x << "; ";

cout << endl;

for(y = yp; y <= yk; y += dy)

{

cout << setw(6) << y << " -- > ";

for(x = xp; x <= xk; x += dx)

cout << setw(8) << Fn_b(x, y, z); // Розрахунок значення функцій b[x, y, z]

cout << endl;

}

cout << endl;

cout << "Двовимірне табулювання логічної функції c[x, y, z, b]" << endl;

cout << setw(12) << " y/x -- > ";

for(x = xp; x <= xk; x += dx)

cout << setw(8) << x << "; ";

cout << endl;

for(y = yp; y <= yk; y += dy)

{

cout << setw(6) << y << " -- > ";

for(x = xp; x <= xk; x += dx)

{

// Розрахунок значення функцій b[x, y, z] та c[x, y, z, b]

b = Fn_b(x, y, z); cout << setw(8) << Fn_c(x, y, z, b);

}

cout << endl;

}

getch(); return 0;

}

Результат двовимірного табулювання логічних функцій

2.4. Індивідуальні завдання

Задача 2.1. Задано такі дійсні числа: x = 0.48ln(№ + 1.5), y = 1.47ln(№ + 0.5), z = -1.3ln(№ + 1.5) (де № – номер варіанта). Потрібно розробити код програми для обчислення значень логічної функції с[x, y, z, b] та математичної функції b[x, y, z] за наведеними нижче математичними виразами:

Задача 2.2. Для аргумента x задано межі та крок його зміни: xп = -1.83ln(№ + 0.5), xк = 2.38ln(№ + 0.5), x = (xк – xп)/8, а також дійсні числа y = 1.47ln(№ + 0.5), z = -1.3ln(№ + 1.5), де № – номер варіанта. Потрібно розробити код програми для одновимірного табулювання логічної функції с = f[x, y, z, b] та математичної функції b = f[x,y,x] за аргументом х, використовуючи математичні вирази, наведені у задачі 2.1.

Задача 2.3. Для аргументів x та y задано відповідні межі та крок їх зміни: xп = -1.83ln(№ + 0.5), xк = 2.38ln(№ + 0.5), x = (xк – xп)/8, yп = -0.74ln(№ + 1.3), yк = 0.86ln(№ + 1.7), y = (yк – yп)/10, а також задано дійсне число z = -1.3ln(№ + 1.5). Потрібно розробити код програми для двовимірного табулювання логічної функції с = f[x, y, z, b] та математичної функції b = f[x, y, z] за аргументами х і у, використовуючи математичні вирази, наведені у задачі 2.1.

Лабораторна робота № 3. ХАРАКТЕРНІ МЕХАНІЗМИ НАКОПИЧЕННЯ СУМИ І ДОБУТКУ