Untitled
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; } }