Код:
#include "stdafx.h"
#include "stdio.h"
#include "iostream"
#include "math.h"
#include "conio.h"
#include <locale.h>
using namespace std;
float f, g, fprom, a, amin, amax, b, bmin, bmax;
int n, i, da, db;
float function(float, float, int); //функция подсчёта функции f (Yi)
float gfunction(float, float, float, float, float, float, int); //функция подсчёта функции g (U)
int main()
{
setlocale(LC_ALL, "Rus");
int prov; //переменная для проверки окончания программы
do { //цикл do while для перезапуска программы
//просим ввести amin, amax, поточно записываем
cout << "Введите значения amin, amax\n";
cin >> amin >> amax;
//просим ввести da, поточно записываем
cout << "Введите значения da\n";
cin >> da;
//просим ввести bmin, bmax, поточно записываем их
cout << "Введите значения bmin, bmax\n";
cin >> bmin >> bmax;
//просим ввести db, поточно записываем
cout << "Введите значения db\n";
cin >> db;
//просим ввести n, поточно записываем
cout << "Введите значения n\n";
cin >> n;
//проверка на количество значений функции
if ((amin + da*(n - 1) > amax) || (bmin + db*(n - 1) > bmax)) {
cout << "Количество значений функций превышает допустимое. Программа закончит свою работу" << endl;
system("pause");
exit(1); //окончание работы программы
}
//проверка на интервал (не равно 0)
if (n == 0) {
cout << "Интервал не может быть равен 0. Программа закончит свою работу" << endl;
system("pause");
exit(1);
}
//проверка на кол-во шагов хода (не равно 0)
if ((da == 0) || (db == 0)) {
cout << "Шаг хода не может быть равен 0. Программа закончит свою работу" << endl;
system("pause");
exit(1);
}
//вывод строки наименовнаий
cout.width(6);
cout << "a";
cout.width(6);
cout << "b";
cout.width(6);
cout << "i";
cout.width(6);
cout << "Yi" << endl;
//вычисление и вывод функций и их пременных
for (a = amin; a <= amax; a = a + da) {
for (b = bmin; b <= bmax; b = b + db) {
for (int i = 0; i <= (n - 1); i++) {
f = function(a, b, i + 1);
printf("%6.2f %6.2f %6.0i %6.2f\n", a, b, i + 1, f);
g = gfunction(amin, amax, bmin, bmax, da, db, i + 1);
}
cout << "U = " << g << endl;
}
}
cout << "Продолжить с новыми данными? Наберите цифру 1 - для ввода новых значений, любую другую для окончания" << endl;
cin >> prov;
} while (prov == 1);
system("pause");
}
//функция f(Yi)
float function(float a, float b, int i) {
float funct;
if (a <2 * b) {
funct = pow((2 * a + 3 * i), 2) - pow((3 * a - 2 * i), 2) / sqrt(pow(a, 2) + pow(-1.0, i)*a*i + pow(b, 2) + pow(i, 2));
}
else {
funct = pow((3 * i - 2 * a), 2) + pow((2 * i - 3 * a), 2) / sqrt(pow(a, 2)*pow(i, 2) - 2 * a*b*i + pow(b, 2) + 1);
}
return funct;
}
//функция g(U)
float gfunction(float amin, float amax, float bmin, float bmax, float da, float db, int n) {
float sum = 0;
float a = 0;
float b = 0;
for (int j = 1; j <= n; j++) {
a = amin + da*(j - 1);
b = bmin + db*(j - 1);
if (function(a, b, j) <= 1) { //проверка на принадлежность заданным интервалам
sum = sum + function(a, b, j)*function(a, b, j);
}
else {
sum = sum + (1 / function(a, b, j))*(1 / function(a, b, j));
}
}
system("pause");
return sum;
}