- •1.1. Програма роботи
- •1.2. Вказівки до виконання роботи
- •1.3. Зразок виконання роботи
- •2.1. Програма роботи
- •2.2. Вказівки до виконання роботи
- •2.3. Зразок виконання роботи
- •3.1. Програма роботи
- •3.2. Вказівки до виконання роботи
- •3.3. Зразок виконання роботи
- •4.1. Програма роботи
- •4.2. Вказівки до виконання роботи
- •4.3. Зразок виконання роботи
- •5.1. Програма роботи
- •5.2. Вказівки до виконання роботи
- •5.3. Зразок виконання роботи
- •6.1. Програма роботи
- •6.2. Вказівки до виконання роботи
- •6.3. Зразок виконання роботи
- •7.1. Програма роботи
- •7.2. Вказівки до виконання роботи
- •7.3. Зразок виконання роботи
3.3. Зразок виконання роботи
Задача 3.1. Задано дійсне число x = 1.3ln(№ + 1.5) та додатне ціле число n = int[4ln(№ + 10)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення скінченої суми за таким математичним виразом:
.
Код програми 3.1 (фрагмент). Обчислення значення скінченої суми
// Накопичення суми
cout << "Завдання 3.1. Обчислення значення скінченої суми" << endl;
x = 1.3 * log(Nv + 1.5); cout << "Значення x = " << x << "; ";
n = 4 * log(Nv + 10); cout << setw(17) << "Значення n = " << n << "." << endl;
double c1, c2, c, s = 0;
cout << "Доданки:" << endl;
for(int i = 1; i <= n; i++)
{
c1 = pow(1.2 * x + i * i, 3./i);
c2 = i * i + Fact(i)/x + 3;
c = c1/c2; cout << setw(2) << i << setw(10) << c << endl;
s += c;
}
s += exp(-(x + n)/(pow(x, 1./n)));
cout << "Загальна сума s = " << s << endl;
cout << "Загальна сума s'= " << Fn_S(Fn_f, x, n) << endl << endl;
// Обчислення значення факторіала
double Fact(int n)
{
double f = 1;
if(n > 1) for(int i = 2; i <= n; i++) f *= i;
return f;
}
// Обчислення значення елемента суми
double Fn_f(double x, int i)
{
double c1 = pow(1.2 * x + i * i, 3./i);
double c2 = i * i + Fact(i)/x + 3;
return c1/c2;
}
// Обчислення значення скінченої суми
double Fn_S(double ( *Fn_f)(double, int), double x, int n)
{
double s = 0;
for(int i = 1; i <= n; i++)
s += Fn_f(x, i);
return s + exp(-(x + n)/(pow(x, 1./n)));
}
Результат розрахунку значення скінченої суми
Задача 3.2. Задано дійсне число x = 1.7ln(№ + 2.5) та додатне ціле число n = int[3ln(№ + 15)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення скінченого знакозмінного добутку за таким математичним виразом:
Код програми 3.2 (фрагмент). Обчислення значення скінченого знакозмінного добутку
// Накопичення добутку
cout << "Завдання 3.2. Обчислення значення скінченого знакозмінного добутку" << endl;
x = 1.7 * log(Nv + 2.5); cout << "Значення x = " << x << "; ";
n = 3 * log(Nv + 15); cout << setw(17) << "Значення n = " << n << "." << endl;
double d = 1, d1, d2, d3, f; z = -1;
cout << "Множники:" << endl;
for(int i = 1; i <= n; i++)
{
d1 = Fact(i)/x - pow(x, 1./i);
d2 = pow(i, 3) + 3 * x + 1;
d3 = sin(x * x/pow(i, 1.3));
f = z * (d1/d2 + d3); cout << setw(2) << i << setw(10) << f << endl;
d *= f; z = -z;
}
cout << "Загальний добуток d = " << d << endl;
cout << "Загальний добуток d'= " << Fn_D(Fn_d, x, n) << endl << endl;
// Обчислення значення елемента добутку
double Fn_d(double x, int i)
{
double d1 = Fact(i)/x - pow(x, 1./i);
double d2 = pow(i, 3) + 3 * x + 1;
double d3 = sin(x * x/pow(i, 1.3));
return d1/d2 + d3;
}
// Обчислення значення скінченого знакозмінного добутку
double Fn_D(double ( *Fn_d)(double, int), double x, int n)
{
double d = 1; int z = -1;
for(int i = 1; i <= n; i++)
{
d *= z * Fn_d(x, i); z = -z;
}
return d;
}
Результат розрахунку значення скінченого знакозмінного добутку
Задача 3.3. Задано дійсне число x = 1.67ln(№ + 1.5) (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення безмежної знакозмінної суми з заданою точністю = 0.001 за таким математичним виразом:
.
При накопиченні безмежної суми вважається, що необхідна її точність досягається тоді, коли обчислено суму декількох доданків, а значення поточного доданку виявилось за модулем меншим, ніж задане значення , тобто цим і всіма наступними доданками можна знехтувати.
Код програми 3.3 (фрагмент). Обчислення значення безмежної суми
cout << "Завдання 3.3. Обчислення значення безмежної суми" << endl;
double E = 0.001; s = 0; c = 0;
x = 1.67 * log(Nv + 1.5); cout << "Значення x = " << x << "." << endl;
cout << "Доданки:" << endl;
int i = 0; z = -1;
do
{
s += c; i++; z = -z;
c1 = pow(i * i + pow(x, i), 3./i);
c2 = x * x + Fact(i) + 1.3;
c = z * c1/c2; cout << setw(2) << i << setw(15) << c << endl;
} while(fabs(c) > E);
s = s - cos(1.2 * x * x/(3.4 + x));
cout << "Безмежна сума s = " << s << "." << endl;
cout << "Безмежна сума s'= " << Fn_C(Fn_c, x, E) << "." << endl << endl;
// Обчислення значення елемента суми
double Fn_c(double x, int i)
{
double c1 = pow(i * i + pow(x, i), 3./i);
double c2 = x * x + Fact(i) + 1.3;
return c1/c2;
}
// Обчислення значення безмежної знакозмінної суми
double Fn_C(double ( *Fn_c)(double, int), double x, double E)
{
double s = 0, c = 0;
int i = 0, z = -1;
do
{
s += c; i++; z = -z;
c = z * Fn_c(x, i);
} while(fabs(c) > E);
return s - cos(1.2 * x * x/(3.4 + x));
}
Результат розрахунку значення безмежної суми
Задача 3.4. Задано дійсне число x = 1.26ln(№ + 2.5) та цілі додатні числа m = int[4ln(№ + 10)] i n = int[5ln(№ + 5)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення подвійної знакозмінної суми/добутку за таким математичним виразом:
Код програми 3.4 (фрагмент). Обчислення значення подвійної суми/добутку
// Обчислення значення функції, завдання 3.4
cout << "Завдання 3.4. Обчислення значення подвійної суми/добутку" << endl;
m = 4 * log(Nv + 10); cout << "Значення m = " << m << "; ";
n = 5 * log(Nv + 5); cout << setw(17) << "Значення n = " << n << "; ";
x = 1.26 * log(Nv + 2.5); cout << setw(17) << "Значення x = " << x << "." << endl;
s = 0;
for(int i = 1; i <= m; i++)
{
d = 1; z = 1;
for(int j = 1; j <= n; j++)
{
c1 = (cos(x * x + j/Fact(i)) + pow(x, 2.3));
c2 = (x/pow( i, 2) + i/Fact(j) + log(i * j));
c = z * c1/c2; cout << setprecision(3) << setw(7) << c;
d *= c; z = -z;
}
s += d; cout << " P = " << setw(8) << d << endl;
}
cout << "Подвійна сума/добуток Ws = " << s << endl;
cout << "Подвійна сума/добуток Ws'= " << Fn_Ws(Fn_w, x, m, n) << endl;
// Обчислення значення елемента суми
double Fn_w(double x, int i, int j)
{
double w1 = (cos(x * x + j/Fact(i)) + pow(x, 2.3));
double w2 = (x/( i * i) + i/Fact(j) + log(i * j));
return w1/w2;
}
// Обчислення значення безмежної суми
double Fn_Ws(double ( *Fn_w)(double, int, int), double x, int m, int n)
{
double s = 0, d; int z;
for(int i = 1; i <= m; i++)
{
d = 1; z = 1;
for(int j = 1; j <= n; j++)
{
d *= z * Fn_w(x, i, j); z = -z;
}
s += d;
}
return s;
}
Результат розрахунку значення подвійної суми/добутку
Код програми 3.4. Характерні механізми накопичення суми і добутку
#include <vcl>
#include <iostream> // Для потокового введення - виведення
#include <iomanip> // Використання маніпуляторів введення - виведення
#include <math> // Для математичних функцій
#include <conio> // Для консольного режиму роботи
using namespace std; // Використання стандартного простору імен
// Обчислення значення факторіала
double Fact(int n);
// Обчислення значення елемента суми
double Fn_f(double x, int i);
// Обчислення значення скінченої суми
double Fn_S(double ( *Fn_f)(double, int), double x, int n);
// Обчислення значення елемента добутку
double Fn_d(double x, int i);
// Обчислення значення скінченого знакозмінного добутку
double Fn_D(double ( *Fn_d)(double, int), double x, int n);
// Обчислення значення елемента суми
double Fn_c(double x, int i);
// Обчислення значення безмежної знакозмінної суми
double Fn_C(double ( *Fn_c)(double, int), double x, double E);
// Обчислення значення елемента суми
double Fn_w(double x, int i, int j);
// Обчислення значення безмежної суми
double Fn_Ws(double ( *Fn_w)(double, int, int), double x, int m, int n);
int main()
{
cout.precision(6); // Формат #.##
cout.setf(ios_base::fixed); // Формат #.##
SetConsoleOutputCP(1251); // Виведення кирилиці
// Опис змінних
int n, m, z, x;
int Nv; cout << "Введіть значення Nv = "; cin >> Nv;
// Накопичення суми
cout << "Завдання 3.1. Обчислення значення скінченої суми" << endl;
x = 1.3 * log(Nv + 1.5); cout << "Значення x = " << x << "; ";
n = 4 * log(Nv + 10); cout << setw(17) << "Значення n = " << n << "." << endl;
double c1, c2, c, s = 0;
cout << "Доданки:" << endl;
for(int i = 1; i <= n; i++)
{
c1 = pow(1.2 * x + i * i, 3./i);
c2 = i * i + Fact(i)/x + 3;
c = c1/c2; cout << setw(2) << i << setw(10) << c << endl;
s += c;
}
s += exp(-(x + n)/(pow(x, 1./n)));
cout << "Загальна сума s = " << s << endl;
cout << "Загальна сума s'= " << Fn_S(Fn_f, x, n) << endl << endl;
// Накопичення добутку
cout << "Завдання 3.2. Обчислення значення скінченого знакозмінного добутку" << endl;
x = 1.7 * log(Nv + 2.5); cout << "Значення x = " << x << "; ";
n = 3 * log(Nv + 15); cout << setw(17) << "Значення n = " << n << "." << endl;
double d = 1, d1, d2, d3, f; z = -1;
cout << "Множники:" << endl;
for(int i = 1; i <= n; i++)
{
d1 = Fact(i)/x - pow(x, 1./i);
d2 = pow(i, 3) + 3 * x + 1;
d3 = sin(x * x/pow(i, 1.3));
f = z * (d1/d2 + d3); cout << setw(2) << i << setw(10) << f << endl;
d *= f; z = -z;
}
cout << "Загальний добуток d = " << d << endl;
cout << "Загальний добуток d'= " << Fn_D(Fn_d, x, n) << endl << endl;
cout << "Завдання 3.3. Обчислення значення безмежної суми" << endl;
double E = 0.001; s = 0; c = 0;
x = 1.67 * log(Nv + 1.5); cout << "Значення x = " << x << "." << endl;
cout << "Доданки:" << endl;
int i = 0; z = -1;
do
{
s += c; i++; z = -z;
c1 = pow(i * i + pow(x, i), 3./i);
c2 = x * x + Fact(i) + 1.3;
c = z * c1/c2; cout << setw(2) << i << setw(15) << c << endl;
} while(fabs(c) > E);
s = s - cos(1.2 * x * x/(3.4 + x));
cout << "Безмежна сума s = " << s << "." << endl;
cout << "Безмежна сума s'= " << Fn_C(Fn_c, x, E) << "." << endl << endl;
// Обчислення значення функції, завдання 3.4
cout << "Завдання 3.4. Обчислення значення подвійної суми/добутку" << endl;
m = 4 * log(Nv + 10); cout << "Значення m = " << m << "; ";
n = 5 * log(Nv + 5); cout << setw(17) << "Значення n = " << n << "; ";
x = 1.26 * log(Nv + 2.5); cout << setw(17) << "Значення x = " << x << "." << endl;
s = 0;
for(int i = 1; i <= m; i++)
{
d = 1; z = 1;
for(int j = 1; j <= n; j++)
{
c1 = (cos(x * x + j/Fact(i)) + pow(x, 2.3));
c2 = (x/pow( i, 2) + i/Fact(j) + log(i * j));
c = z * c1/c2; cout << setprecision(3) << setw(7) << c;
d *= c; z = -z;
}
s += d; cout << " P = " << setw(8) << d << endl;
}
cout << "Подвійна сума/добуток Ws = " << s << endl;
cout << "Подвійна сума/добуток Ws'= " << Fn_Ws(Fn_w, x, m, n) << endl;
getch(); return 0;
}
// Обчислення значення факторіала
double Fact(int n)
{
double f = 1;
if(n > 1) for(int i = 2; i <= n; i++) f *= i;
return f;
}
// Обчислення значення елемента суми
double Fn_f(double x, int i)
{
double c1 = pow(1.2 * x + i * i, 3./i);
double c2 = i * i + Fact(i)/x + 3;
return c1/c2;
}
// Обчислення значення скінченої суми
double Fn_S(double ( *Fn_f)(double, int), double x, int n)
{
double s = 0;
for(int i = 1; i <= n; i++)
s += Fn_f(x, i);
return s + exp(-(x + n)/(pow(x, 1./n)));
}
// Обчислення значення елемента добутку
double Fn_d(double x, int i)
{
double d1 = Fact(i)/x - pow(x, 1./i);
double d2 = pow(i, 3) + 3 * x + 1;
double d3 = sin(x * x/pow(i, 1.3));
return d1/d2 + d3;
}
// Обчислення значення скінченого знакозмінного добутку
double Fn_D(double ( *Fn_d)(double, int), double x, int n)
{
double d = 1; int z = -1;
for(int i = 1; i <= n; i++)
{
d *= z * Fn_d(x, i); z = -z;
}
return d;
}
// Обчислення значення елемента суми
double Fn_c(double x, int i)
{
double c1 = pow(i * i + pow(x, i), 3./i);
double c2 = x * x + Fact(i) + 1.3;
return c1/c2;
}
// Обчислення значення безмежної знакозмінної суми
double Fn_C(double ( *Fn_c)(double, int), double x, double E)
{
double s = 0, c = 0;
int i = 0, z = -1;
do
{
s += c; i++; z = -z;
c = z * Fn_c(x, i);
} while(fabs(c) > E);
return s - cos(1.2 * x * x/(3.4 + x));
}
// Обчислення значення елемента суми
double Fn_w(double x, int i, int j)
{
double w1 = (cos(x * x + j/Fact(i)) + pow(x, 2.3));
double w2 = (x/( i * i) + i/Fact(j) + log(i * j));
return w1/w2;
}
// Обчислення значення безмежної суми
double Fn_Ws(double ( *Fn_w)(double, int, int), double x, int m, int n)
{
double s = 0, d; int z;
for(int i = 1; i <= m; i++)
{
d = 1; z = 1;
for(int j = 1; j <= n; j++)
{
d *= z * Fn_w(x, i, j); z = -z;
}
s += d;
}
return s;
}
3.4. Індивідуальні завдання
Задача 3.1. Задано дійсне число x = 1.6ln(№ + 1.5) (де № – номер варіанта) та додатне ціле число n = int[4ln(№ + 12)]. Потрібно розробити код програми для обчислення значення скінченої суми/добутку c = f[x, n] за наведеними нижче математичними виразами:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
Задача 3.2. Задано дійсне число x = 0.6ln(№ + 1.5) (де № – номер варіанта) та додатне ціле число n = int[4ln(№ + 10)]. Потрібно розробити код програми для обчислення скінченого знакозмінного добутку d = f[x, n] за наведеними нижче математичними виразами:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
Задача 3.3. Задано дійсне число x = 0.6ln(№ + 2.5) (де № – номер варіанта). Потрібно розробити код програми для обчислення значення безмежної знакозмінної суми c = f[x,] з заданою точністю = 0.001 за наведеними нижче математичними виразами. Вважати, що необхідна точність досягнута, якщо обчислено суму декількох доданків, а значення поточного доданку виявилось за модулем меншим, ніж , тобто цим і всіма наступними доданками можна знехтувати.
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
Задача 3.4. Задано дійсне число x = 1.38ln(№ + 2.5) (де № – номер варіанта) та цілі додатні числа m = int[5ln(№ + 10)] i n = int[4ln(№ + 8)]. Потрібно розробити код програми для обчислення значення подвійної знакозмінної суми/добутку c = f[x, m, n] за наведеними нижче математичними виразами:
1. ; 2. ;
3. ; 4. ;
5. ; 6. ;
7. ; 8. ;
9. ; 10. ;
11. ; 12. ;
13. ; 14. ;
15. ; 16. ;
17. ; 18. ;
19. ; 20. ;
21. ; 22. ;
23. ; 24. ;
25. ; 26. ;
27. ; 28. ;
29. ; 30. .
Лабораторна робота № 4. ВИКОРИСТАННЯ складених ФУНКЦІЙ (функціоналів)