nord vpnnord vpn
Ad

Untitled

mail@pastecode.io avatar
unknown
abc
a year ago
2.8 kB
5
Indexable
Never
#include<iostream>
#include<math.h>
#include<conio.h>

using namespace std;

typedef double(*fun)(double, int&);
double calculateY(double, int&);
double calculateS(double, int&);
double calculateDifference(double, int&);
void out(fun, double, double, double, int&);

double inputNumber();
int inputRangeNumber(int);
bool isRangeNumberCorrect(int, int);
bool isNumberCorrect();

int main()
{
	setlocale(LC_ALL, "RUS");
	const int LEFT = 1;
	double a, b, h;
	int n, number;
	fun f;
	char text[3][10] = { "Функция-Y","Сумма-S","Разность" };
	cout << "Введите значение переменной a = ";
	a = inputNumber();
	cout << "Введите значение переменной b = ";
	b = inputNumber();
	cout << "Введите значение переменной h =  ";
	h = inputNumber();
	cout << "Введите значение переменной n = ";
	n = inputRangeNumber(LEFT);
	
	cout << "Введите 1-Y, 2-S, любая другая-|S-Y|" << endl;

	switch (_getch())
	{
	case'1':
	{
		f = calculateY;
		number = 0;
		break;
	}
	case'2':
	{
		f = calculateS;
		number = 1;
		break;
	}
	default:
	{
		f = calculateDifference;
		number = 2;
	}
	}
	cout << "Результат: " << text[number] << endl;
	out(f, a, b, h, n);
}
double calculateY(double x, int &n)
{
	return  (1 - (x * x) / 2) * cos(x) - (x / 2) * sin(x);
}
double calculateS(double x, int &n)
{
	double r, Sum;
	r = Sum = 1;
	int k = 1;
	for (k = 1; k <= n; k++)
	{
		r *= -1 * (x * x) / ((2 * k - 1) * 2 * k);
		Sum += r * (2 * k * k + 1);
	}
	return Sum;
}
double calculateDifference(double x, int &n)
{
	return fabs(calculateY(x, n) - calculateS(x, n));
}
void out(fun f, double a, double b, double h, int &n)
{
	for (double x = a; x <= b; x += h)
	{
		cout << "x = " << x << "\tres = " << f(x, n) << endl;
	}
}
double inputNumber()
{
	double number;
	while (true)
	{
		cin >> number;
		if (isNumberCorrect())
		{
			return number;
		}
		else
		{
			cout << "Пожалуйста, введите корректнные данные: ";
			
		}
	}
}
int inputRangeNumber(int left)
{
	int number;
	while (true)
	{
		cin >> number;
		if (isNumberCorrect() && isRangeNumberCorrect(number, left))
		{
			return number;
		}
		else
		{
			cout << "Пожалуйста, введите корректнные данные: ";
		}
	}
}
bool isNumberCorrect()
{
	if (cin.get() == '\n')
	{
		return true;
	}
	else
	{
		cin.clear();
		cin.ignore(numeric_limits<streamsize>::max(), '\n');
		return false;
	}
}
bool isRangeNumberCorrect(int number, int left)
{
	if ((number >= left))return true;
	else
	{
		return false;
	}
}

nord vpnnord vpn
Ad