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

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

Задача 4.1. а) Задано такі дійсні числа: s = 1.8ln(№ + 3.21) і t = 2.6ln(№ + 5.45) (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладеної функції f[x, y, z] обчислюється за допомогою такого математичного виразу:

.

б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 5), sк = 3.2ln(№ + 4.32), s = (sк – sп)/10, а також задано дійсне число t = 2.6ln(№ + 3). Потрібно розробити код програми для одновимірного табулювання функцій c1[x, y, z], c2[x, y, z], c3[x, y, z] і складеної функції (функціонала) c[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.3ln(№ + 5.4), sк = 3.2ln(№ + 5.21), s = (sк – sп)/10 і tп = -0.74ln(№ + 1.7), tк = 0.86ln(№ + 1.3), t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) c[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.

Код програми 4.1. Обчислення значення складеної функції (функціонала)

#include <vcl>

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

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

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

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

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

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

double Fn_f(double x, double y, double z);

// Обчислення значення функції c[s, t]

double Fn_c(double ( *Fn_f)( double, double, double), double s, double t);

// Одновимірне табулювання функції

void Fn_Ovt(double sp, double sk, double ds, double t);

// Двовимірне табулювання функції

void Fn_Dvt(double sp, double sk, double ds, double tp, double tk, double dt);

int main()

{

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

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

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

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

cout << "Завдання 4.1, а. Значення складеної функції (функціонала)" << endl;

double s = 1.8 * log(Nv + 3); cout << "Значення s = " << s << "; ";

double t = 2.6 * log(Nv + 5); cout << setw(17) << "Значення t = " << t << "." << endl << endl;

cout << "Значення складеної функції C[s, t] = " << setw(6) << Fn_c(Fn_f , s, t) << endl << endl;

cout << "Завдання 4.1, б. Одновимірне табулювання функціонала" << endl;

double sp = -2.3 * log(Nv + 5); cout << "Значення sp = " << sp << "; ";

double sk = 3.2 * log(Nv + 5); cout << setw(17) << "Значення sk = " << sk << "; ";

double ds = (sk - sp)/10; cout << setw(17) << "Значення ds = " << ds << "." << endl;

Fn_Ovt(sp, sk, ds, t); cout << endl;

cout << "Завдання 4.1, в. Двовимірне табулювання функціонала" << endl;

cout << "Значення sp = " << sp << "; " << setw(17) << "Значення sk = " << sk << "; " << setw(17) << "Значення ds = " << ds << "." << endl;

double tp = -3.6 * log(Nv + 5); cout << "Значення tp = " << tp << "; ";

double tk = 4.3 * log(Nv + 6); cout << setw(17) << "Значення tk = " << tk << "; ";

double dt = (tk - tp)/6; cout << setw(17) << "Значення dt = " << dt << "." << endl;

Fn_Dvt(sp, sk, ds, tp, tk, dt);

getch(); return 0;

}

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

double Fn_f(double x, double y, double z)

{

double f1 = pow(fabs(x + y), 1./3);

double f2 = (x * x + y) * pow(fabs(x * x + z), 0.3);

double f3 = exp(z + 2.4) + y * y - 1.26;

return f1 * f2/f3;

}

// Обчислення значення функції c[s, t]

double Fn_c(double ( *Fn_f)( double, double, double), double s, double t)

{

double c1 = Fn_f(t, - 2 * pow(fabs(s), 0.2), 1.17);

double c2 = Fn_f(2.2 * t, pow(fabs(t - s), 1.5), s - 1.7);

double c3 = Fn_f(2.5 * s, pow(t, 3), s - t * t);

return (c1 * c1 + t * s)/(pow(fabs(c2), 0.6) - t) + c3;

}

// Одновимірне табулювання функції

void Fn_Ovt(double sp, double sk, double ds, double t)

{

cout << setw(12) << " s -- > " << setw(9) << "c1[s, t]" << setw(9) << "c2[s, t]"

<< setw(9) << "c3[s, t]" << setw(9) << "c[s, t]" << endl;

double s = sp, c1, c2, c3, c;

while(s <= sk + ds/2)

{

c1 = Fn_f(t, - 2 * pow(fabs(s), 0.2), 1.17);

c2 = Fn_f(2.2 * t, pow(fabs(t - s), 1.5), s - 1.7);

c3 = Fn_f(2.5 * s, pow(t, 3), s - t * t);

c = (c1 * c1 + t * s)/(pow(fabs(c2), 0.6) - t) + c3;

cout << setw(6) << s << " -- > " << setw(9) << c1 << setw(9) << c2 << setw(9) << c3 << setw(9) << c << endl;

s += ds;

}

}

// Двовимірне табулювання функції

void Fn_Dvt(double sp, double sk, double ds, double tp, double tk, double dt)

{

double t = tp; cout << setw(12) << "s/t -- > ";

while(t <= tk + dt/2)

{

cout << setw(10) << t; t += dt;

}

cout << endl;

double s = sp;

while(s <= sk + ds/2)

{

cout << setw(6) << s << " -- > "; t = tp;

while(t <= tk + dt/2)

{

cout << setw(10) << Fn_c(Fn_f , s, t);

t += dt;

}

s += ds; cout << endl;

}

}

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

Результати двовимірного табулювання складеної функції (функціонала)

Задача 4.2. а) Задано дійсне число y = 1.65ln(№ + 3.5) та додатне ціле число m = int[2ln(№ + 9)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладеної функції t[i, j] визначається з такого співвідношення:

б) Для аргумента s задано межі та крок його зміни: yп = -3.6ln(№ + 5.23), yк = 4.3ln(№ + 6.13), y = (yк – yп)/10, а також ціле число m = int[2ln(№ + 9)]. Потрібно розробити код програми для одновимірного табулювання функцій t1[i, j], t2[i, j], t3[i, j] і складеної функції (функціонала) z[y, m] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: yп = -3.6ln(№ + 5.41), yк = 4.3ln(№ + 6.31), y = (yк – yп)/10, а також mп = int[–0.8ln(№ + 2.5)], mк = int[0.9ln(№ + 2)], m = (yк – yп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) z[y, m] за аргументами s і t згідно з математичними виразами, наведеними вище.

Код програми 4.2. Обчислення значення складеної функції (функціонала)

#include <vcl>

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

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

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

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

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

// Обчислення значення функції t[i, j]

double Fn_t(double i, int j);

// Обчислення значення функції z[y, m] для двовимірного табулювання функції

double Fn_z(double ( *Fn_t)(double, int), double y, int m);

// Одновимірне табулювання функції

void Fn_Ovt(double yp, double yk, double dy, int m);

// Двовимірне табулювання функції

void Fn_Dvt(double yp, double yk, double dy, int mp, int mk, double dm);

int main()

{

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

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

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

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

cout << "Завдання 4.2, а. Значення складеної функції (функціонала)" << endl;

int m = 2 * log(Nv + 9); cout << "Значення m = " << m << "; ";

double y = 1.65 * log(Nv + 3.5); cout << setw(17) << "Значення y = " << y << "." << endl;

cout << "Значення складеної функції Z[y, m] = " << Fn_z(Fn_t, y, m) << endl << endl; ;

cout << "Завдання 4.2, б. Одновимірне табулювання функціонала " << endl;

m = 2 * log(Nv + 9); cout << "Значення m = " << m << "." << endl;

double yp = -3.6 * log(Nv + 5); cout << "Значення yp = " << yp << "; ";

double yk = 4.3 * log(Nv + 6); cout << setw(17) << "Значення yk = " << yk << "; ";

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

Fn_Ovt(yp, yk, dy, m); cout << endl;

cout << "Завдання 4.2, в. Двовимірне табулювання функціонала" << endl;

cout << "Значення yp = " << setw(6) << yp << "; " << setw(17) << "Значення yk = " << setw(6) << yk << "; " <<

setw(17) << "Значення dy = " << setw(6) << dy << "." << endl;

int mp = 0.8 * log(Nv + 2.5); cout << "Значення mp = " << setw(2) << mp << "; ";

int mk = 2.9 * log(Nv + 2); cout << setw(21) << "Значення mk = " << setw(2) << mk << "; ";

double dm = (mk - mp)/8.; cout << setw(21) << "Значення dm = " << setw(6) << dm << "." << endl;

Fn_Dvt(yp, yk, dy, mp, mk, dm);

getch(); return 0;

}

// Обчислення значення функції t[i, j]

double Fn_t(double i, int j)

{

if(i >= j && i < 2 * j)

{

double t1 = 3 * cos(pow(i * i - j/6, 2));

double t2 = pow(log(pow(fabs(i + j - 0.11), 1.3)), 2);

return t1/t2;

}

else if(i < j)

return 1 + i * j * j + pow(sin(pow(i, 3)), 2);

else

{

double t1 = pow(fabs(i), 0.13);

double t2 = j * pow(log(pow(fabs(i + j), 0.56)), 2);

double t3 = i * 3.6 + 0.25;

return t1 - t2/t3;

}

}

// Обчислення значення функції z[y, m] для двовимірного табулювання функції

double Fn_z(double ( *Fn_t)(double, int), double y, int m)

{

double t1 = Fn_t(y + 0.1, pow(m, 0.2) - 1); t1 = 1.23 + pow(t1, 2);

double t2 = Fn_t(m + y * y, y + 3); t2 = pow(fabs(y * t2), 1.2/m);

double t3 = Fn_t(y * y + 1.1, y * pow(m, 0.3)); t3 = 2.6 + pow(fabs(t3), 2./3) + pow(fabs(y/m), 1./3);

return (t1 - t2)/t3;

}

// Одновимірне табулювання функції

void Fn_Ovt(double yp, double yk, double dy, int m)

{

cout << setw(12) << "y -- > " << setw(9) << "t1[y, m]" << setw(9) << "t2[y, m]"

<< setw(9) << "t3[y, m]" << setw(9) << "z[y, m]" << endl;

double y = yp, t1, t2, t3, t;

while(y <= yk + dy/2)

{

t1 = Fn_t(y + 0.1, pow(m, 0.2) - 1);

t2 = Fn_t(m + y * y, y + 3);

t3 = Fn_t(y * y + 1.1, y * pow(m, 0.3));

t = (1.23 + t1 * t1 - pow(fabs(y * t2), 1.2/m))/( 2.6 + pow(fabs(t3), 2./3) + pow(fabs(y/m), 1./3));

cout << setw(6) << y << " -- > " << setw(9) << t1 << setw(9) << t2 << setw(9) << t3 << setw(9) << t << endl;

y += dy;

}

}

// Двовимірне табулювання функції

void Fn_Dvt(double yp, double yk, double dy, int mp, int mk, double dm)

{

double m = mp; cout << setw(12) << "y/m -- > ";

while(m <= mk + dm/2)

{

cout << setw(7) << m; m += dm;

}

cout << endl;

double y = yp;

while(y <= yk + dy/2)

{

cout << setw(6) << y << " -- > "; m = mp;

while(m <= mk + dm/2)

{

cout << setw(7) << Fn_z(Fn_t, y, m); m += dm;

}

y += dy; cout << endl;

}

}

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

Результати двовимірного табулювання складеної функції (функціонала)

Задача 4.3. а) Задано дійсне число s = -2.6ln(№ + 4.16) та додатне ціле число t = int[3ln(№ + 6.51)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладених функцій g[x, n] і q[x, n] обчислюються за допомогою таких скінчених сум/добутків:

і .

б) Для аргумента s задано межі та крок його зміни: sп = -2.5ln(№ + 4.15), sк = 3.2ln(№ + 4.31), s = (sк – sп)/10, а також ціле число t = int[3ln(№ + 6)] (де № = 4 – номер варіанта). Потрібно розробити код програми для одновимірного табулювання функцій g1[x, n], g2[x, n], q1[x, n], q2[x, n] і складеної функції (функціонала) p[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4.31), sк = 3.2ln(№ + 4.55), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) p[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.

Код програми 4.3. Обчислення значення складеної функції (функціонала)

#include <vcl>

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

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

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

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

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

// Обчислення значення факторіала

double Fact(int n);

// Обчислення значення функції g[x, n]

double Fn_g(double x, int n);

// Обчислення значення функції q[x, n]

double Fn_q(double x, int n);

// Обчислення значення функції p[s, t]

double Fn_p(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t);

// Одновимірне табулювання функції

void Fn_Ovt(double sp, double sk, double ds, int t);

// Двовимірне табулювання функції

void Fn_Dvt(double ( *Fn_p)(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t),

double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double sp, double sk, double ds, int tp, int tk, double dt);

int main()

{

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

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

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

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

cout << "Завдання 4.3, а. Значення складеної функції (функціонала)" << endl;

int t = 3 * log(Nv + 6); cout << "Значення t = " << t << "; ";

double s = -2.6 * log(Nv + 4); cout << setw(17) << "Значення s = " << s << "." << endl;

cout << "Значення складеної функції P[s, t] = " << setw(8) << Fn_p(Fn_g, Fn_q, s, t) << endl << endl;

cout << "Завдання 4.3, б. Одновимірне табулювання функціонала " << endl;

cout << "Значення t = " << t << "." << endl;

double sp = -2.5 * log(Nv + 4); cout << "Значення sp = " << sp << "; ";

double sk = 3.2 * log(Nv + 4); cout << setw(17) << "Значення sk = " << sk << "; ";

double ds = (sk - sp)/10; cout << setw(17) << "Значення ds = " << ds << "." << endl;

Fn_Ovt( sp, sk, ds, t); cout << endl;

cout << "Завдання 4.3, в. Двовимірне табулювання функціонала " << endl;

cout << "Значення sp = " << sp << "; " << setw(17) << "Значення sk = " << sk << "; " << setw(17) <<

"Значення ds = " << ds << "." << endl;

int tp = 0.8 * log(Nv + 2.5); cout << "Значення tp = " << setw(2) << tp << "; ";

int tk = 2.9 * log(Nv + 2); cout << setw(21) << "Значення tk = " << tk << "; ";

double dt = (tk - tp)/6.; cout << setw(21) << "Значення dt = " << setw(2) << dt << "." << endl;

Fn_Dvt(Fn_p, Fn_g, Fn_q, sp, sk, ds, tp, tk, dt);

getch(); return 0;

}

// Обчислення значення факторіала

double Fact(int n)

{

double f = 1;

if(n > 1) for(int i = 2; i <= n; i++) f *= i;

return f;

}

// Обчислення значення функції g[x, n]

double Fn_g(double x, int n)

{

double f = 0;

for(int i = 1; i <= n; i++) f += (x + Fact(i))/(i * i - x + 1.3);

return f + x * n/pow(n, x);

}

// Обчислення значення функції q[x, n]

double Fn_q(double x, int n)

{

double f = 1;

for(int i = 1; i <= n; i++) f *= (x + i)/(i * i + 2 * Fact(i) + 3) - pow(x, 1./i);

return f;

}

// Обчислення значення функції p[s, t]

double Fn_p(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t)

{

double g1 = Fn_g(1.2 * s * s, t); g1 = pow(fabs(g1), 1./3);

double g2 = Fn_g(t * t - s, t + 2); g2 = pow(fabs(g2), 0.8);

double q1 = Fn_q(s * s + 3.1, 2 * t);

double q2 = Fn_q(2 * s * s + t, t - 2); q2 = pow(fabs(q2 - t/(s + 0.1)), 1./2);

return g1 * g2/q1 - q2;

}

// Одновимірне табулювання функції

void Fn_Ovt(double sp, double sk, double ds, int t)

{

cout << setw(6) << "s" << setw(3) << " -- > " << setw(10) << "g1[s, t]" << setw(10) << "g2[s, t]" <<

setw(10) << "q1[s, t]" << setw(10) << "q2[s, t]" << setw(10) << "p[s, t]" << endl;

double s = sp, g1, g2, q1, q2, p;

while(s <= sk + ds/2)

{

g1 = Fn_g(1.2 * s * s, t);

g2 = Fn_g(t * t - s, t + 2);

q1 = Fn_q(s * s + 3.1, 2 * t);

q2 = Fn_q(2 * s * s + t, t - 2);

p = pow(fabs(g1), 1./3) * pow(fabs(g2), 0.8)/q1 - pow(fabs(q2 - t/(s + 0.1)), 1./2);

cout << setw(6) << s << " -- > " << setw(10) << g1 << setw(10) << g2 << setw(10) <<

q1 << setw(10) << q2 << setw(10) << p << endl;

s += ds;

}

}

// Двовимірне табулювання функції

void Fn_Dvt(double ( *Fn_p)(double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double s, int t),

double ( *Fn_g)(double, int), double ( *Fn_q)(double, int), double sp, double sk, double ds, int tp, int tk, double dt)

{

double t = tp; cout << setw(6) << "s/t" << setw(3) << " -- > ";

while(t <= tk + dt/2)

{

cout << setw(8) << t; t += dt;

}

cout << endl;

double s = sp;

while(s <= sk + ds/2)

{

cout << setw(6) << s << setw(3) << " -- > "; t = tp;

while(t <= tk + dt/2)

{

cout << setw(8) << Fn_p(Fn_g, Fn_q, s, t); t += dt;

}

s += ds; cout << endl;

}

}

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

Результати двовимірного табулювання складеної функції (функціонала)

Задача 4.4. а) Задано дійсне число s = 3.8ln(№ + 3.31) та додатне ціле число t = int[2ln(№ + 4)] (де № = 4 – номер варіанта). Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладеної функції h[x, y] обчислюється за допомогою такої безмежної суми:

.

б) Для аргумента s задано межі та крок його зміни: sп = -2.5ln(№ + 3.51), sк = 3.2ln(№ + 2.38), s = (sк – sп)/10, а також ціле число t = int[2ln(№ + 4)] (де № = 4 – номер варіанта). Потрібно розробити код програми для одновимірного табулювання функцій h1[x, y], h2[x, y], h3[x, y], h4[x, y], h5[x, y] і складеної функції (функціонала) w[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4.16), sк = 3.2ln(№ + 4.52), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/8. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) w[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.

Код програми 4.4. Обчислення значення складеної функції (функціонала)

#include <vcl>

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

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

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

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

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

// Обчислення значення факторіала

double Fact(int);

// Обчислення мінімального значення з двох елементів

double Fn_min(double, double);

// Обчислення максимального значення з двох елементів

double Fn_max(double, double);

// Обчислення значення функція h[x, y]

double Fn_h(double, double);

// Обчислення значення функції w[s, t]

double Fn_w(double ( *Fn_h)(double, double), double ( *Fn_max)(double, double),

double ( *Fn_min)(double, double), double s, int t);

// Одновимірне табулювання функції

void Fn_Ovt(double, double, double, int);

// Двовимірне табулювання функції

void Fn_Dvt(double, double, double, int, int, double);

int main()

{

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

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

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

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

cout << "Завдання 4.4, а. Значення складеної функції (функціонала)" << endl;

int t = 2 * log(Nv + 4); cout << "Значення t = " << t << "; ";

double s = 3.8 * log(Nv + 3); cout << setw(17) << "Значення s = " << s << "." << endl;

cout << "Значення складеної функції w[s, t] = " << Fn_w(Fn_h, Fn_max, Fn_min, s, t) << endl << endl;

cout << "Завдання 4.4, б. Одновимірне табулювання функціонала" << endl;

double sp = -2.5 * log(Nv + 3); cout << "Значення sp = " << sp << "; ";

double sk = 3.2 * log(Nv + 2); cout << setw(17) << "Значення sk = " << sk << "; ";

double ds = (sk - sp)/10; cout << setw(17) << "Значення ds = " << ds << "." << endl;

Fn_Ovt(sp, sk, ds, t); cout << endl;

cout << "Завдання 4.4, в. Двовимірне табулювання функціонала " << endl;

cout << "Значення sp = " << sp << "; " << setw(17) << "Значення sk = " << sk << "; " << setw(17) << "Значення ds = " << ds << "." << endl;

int tp = 0.8 * log(Nv + 2.5); cout << "Значення tp = " << setw(2) << tp << "; ";

int tk = 2.9 * log(Nv + 2); cout << setw(21) << "Значення tk = " << tk << "; ";

double dt = (tk - tp)/8.; cout << setw(21) << "Значення dt = " << setw(2) << dt << "." << endl;

Fn_Dvt(sp, sk, ds, tp, tk, dt);

getch(); return 0;

}

// Обчислення значення факторіала

double Fact(int n)

{

double f = 1;

if(n > 1) for(int i = 2; i <= n; i++) f *= i;

return f;

}

// Обчислення значення функція h[x, y]

double Fn_h(double x, double y)

{

double h = 0, c = 0;

int i = 1, z = 1;

do

{

h += z * c; i++; z = -z;

c = (i * x + cos(y + i))/(1.23 + x * x + Fact(i));

} while(fabs(c) > 0.001);

return h;

}

// Обчислення мінімального значення з двох елементів

double Fn_min(double x, double y)

{

if(x < y) return x;

else return y;

}

// Обчислення максимального значення з двох елементів

double Fn_max(double x, double y)

{

if(x > y) return x;

else return y;

}

// Обчислення значення функції w[s, t]

double Fn_w(double ( *Fn_h)(double, double), double ( *Fn_max)(double, double),

double ( *Fn_min)(double, double), double s, int t)

{

double w1 = Fn_h(s, t); w1 = pow(fabs(w1 + (s + 2.1)/(t + 1.3)), 1./3);

double w2 = Fn_h(s - t, (s + 2.3)/(t + 1.2)); w2 = w2 * w2;

double w3 = Fn_h(s/t, s + t); w3 = w3 * w3;

double w4 = Fn_h((t + s)/(2.3 * t), t * t); w4 = pow(fabs(w4), 1./2);

double w5 = Fn_h(1.3 - s/t, s + t/2.); w5 = pow(w5 * w5, 1./3);

return w1 + Fn_max(w2, w3)/Fn_min(w4, w5);

}

// Одновимірне табулювання функції

void Fn_Ovt(double sp, double sk, double ds, int t)

{

cout << setw(6) << "s" << setw(4) << " -- > " << setw(9) << "w1[s, t]" << setw(9) << "w2[s, t]"

<< setw(9) << "w3[s, t]" << setw(9) << "w4[s, t]" << setw(9) << "w5[s, t]"

<< setw(9) << "w[s, t]" << endl;

double s = sp, w1, w2, w3, w4, w5, w11, w21, w31, w41, w51, w;

while(s <= sk + ds/2)

{

w1 = Fn_h(s, t); w11 = pow(fabs(w1 + (s + 2.1)/(t + 1.3)), 1./3);

w2 = Fn_h(s - t, (s + 2.3)/(t + 1.2)); w21 = w2 * w2;

w3 = Fn_h(s/t, s + t); w31 = w3 * w3;

w4 = Fn_h((t + s)/(2.3 * t), t * t); w41 = pow(fabs(w4), 1./2);

w5 = Fn_h(1.3 - s/t, s + t/2.); w51 = pow(w5 * w5, 1./3);

w = w11 + Fn_max(w21, w31)/Fn_min(w41, w51);

cout << setw(6) << s << setw(4) << " -- > " << setw(9) << w1 << setw(9) << w2

<< setw(9) << w3 << setw(9) << w4 << setw(9) << w5 << setw(9) << w << endl;

s += ds;

}

}

// Двовимірне табулювання функції

void Fn_Dvt(double sp, double sk, double ds, int tp, int tk, double dt)

{

double t = tp; cout << setw(6) << "s/t" << setw(4) << " -- > ";

while(t <= tk + dt/2)

{

cout << setw(7) << t;

t += dt;

}

cout << endl;

double s = sp;

while(s <= sk + ds/2)

{

cout << setw(6) << s << setw(4) << " -- > "; t = tp;

while(t <= tk + dt/2)

{

cout << setw(7) << Fn_w(Fn_h, Fn_max, Fn_min, s, t);

t += dt;

}

s += ds; cout << endl;

}

}

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

Результати двовимірного табулювання складеної функції (функціонала)

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

Задача 4.1. а) Задано дійсні числа s = 1.72(№ + 1.26) (де № – номер варіанта) і додатне ціле число t = int[2ln(№ + 5)]. Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладеної функції f[x, y, z] обчислюється за допомогою таких математичних виразів:

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. .

б) Для аргумента s задано межі та крок його зміни: sп = -1.3ln(№ + 5), sк = 1.4ln(№ + 6), s = (sк – sп)/10, а також задано дійсне число t = 2.6ln(№ + 2.5). Потрібно розробити код програми для одновимірного табулювання функцій c1[x, y, z], c2[x, y, z], c3[x, y, z] і складеної функції (функціонала) c[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -1.3ln(№ + 4), sк = 2.4ln(№ + 5), s = (sк – sп)/10 і tп = -0.79ln(№ + 1.7), tк = 2ln(№ + 1.3), t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) c[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.

Задача 4.2. а) Задано дійсне число y = 0.8ln(№ + 5.5) (де № – номер варіанта) та додатне ціле число m = int[5ln(№ + 10)]. Потрібно розробити код програми для обчислення значення однієї з таких складених функцій (функціоналів):

1. ;

2. ;

3. ;

4. ;

5. ;

6. ;

7.  ;

8.  ;

9.  ;

10.  ;

11.  ;

12.  ;

13.  ;

14.  ;

15.  ,

де значення вкладеної функції t[i, j] обчислюється за допомогою таких логічних виразів:

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.

б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 2), sк = 3.8ln(№ + 4), s = (sк – sп)/10, а також ціле число t = int[4ln(№ + 10)]. Потрібно розробити код програми для одновимірного табулювання функцій g1[x, n], g2[x, n], q1[x, n], q2[x, n] і складеної функції (функціонала) p[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: yп = -3.6ln(№ + 5), yк = 4.3ln(№ + 6), y = (yк – yп)/10, а також mп = int[–0.8ln(№ + 2.5)], mк = int[0.9ln(№ + 2)], m = (yк – yп)/10. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) z[y, m] за аргументами s і t згідно з математичними виразами, наведеними вище.

Задача 4.3. а) Задано дійсне число y = 1.88ln(№ + 5.6) (де № – номер варіанта) та додатне ціле число t = int[3ln(№ + 10)]. Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладеної функції g[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. .

Значення вкладеної функції q[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. .

б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 4), sк = 3.2ln(№ + 6), s = (sк – sп)/10, а також ціле число t = int[3ln(№ + 10)]. Потрібно розробити код програми для одновимірного табулювання функцій g1[x, n], g2[x, n]/q1[x, n], q2[x, n], pe[s, t] і складеної функції (функціонала) p[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4), sк = 3.2ln(№ + 4), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) w[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.

Задача 4.4. а) Задано дійсне число s = 1.3ln(№ + 2.5) (де № – номер варіанта) та додатне ціле число t = int[3ln(№ + 10)]. Потрібно розробити код програми для обчислення значення такої складеної функції (функціонала):

,

де значення вкладеної функції h[x, y] обчислюється за допомогою таких безмежних сум/добутків:

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. .

б) Для аргумента s задано межі та крок його зміни: sп = -2.3ln(№ + 3), sк = 3.2ln(№ + 5), s = (sк – sп)/10, а також ціле число t = int[4ln(№ + 10)]. Потрібно розробити код програми для одновимірного табулювання функцій h1[x, y], max{h2; h3}, min{h4; h5}, w[s, t] і складеної функції (функціонала) w[s, t] за аргументом s згідно з математичними виразами, наведеними вище.

в) Для аргументів s та t задано відповідні межі та крок їх зміни: sп = -2.5ln(№ + 4), sк = 3.2ln(№ + 4), s = (sк – sп)/10, а також tп = int[0.8ln(№ + 2.5)], tк = int[2.9ln(№ + 2)], t = (tк – tп)/6. Потрібно розробити код програми для двовимірного табулювання складеної функції (функціонала) w[s, t] за аргументами s і t згідно з математичними виразами, наведеними вище.

Лабораторна робота № 5. ОБЧИСЛЕННЯ ЕЛЕМЕНТІВ МАСИВІВ