Untitled
unknown
abc
3 years ago
2.8 kB
21
Indexable
#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;
}
}Editor is loading...