Ladizzz

Untitled

May 9th, 2021
599
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <iostream>
  2. #include <cmath>
  3.  
  4. using namespace std;
  5.  
  6. double operation_1(double x) {
  7.     return 3 * pow(x, 2) - 150 * sin(x);
  8. }
  9.  
  10. double operation_2(double x) {
  11.     const double e = 2.7182818284;
  12.     return pow(e, x / 2) - pow(x, 3) + 50;
  13. }
  14.  
  15. double operation_3(double x) {
  16.     return pow(x, 3) - pow(x, 2) - 50;
  17. }
  18.  
  19. double operation_4(double x) {
  20.     return 3 * x - pow(x, 2);
  21. }
  22.  
  23. double half_division_method(double(*operations)(double), double a, double b, const double E) {
  24.     double x_2 = 0;
  25.     while (b - a > E) {
  26.         x_2 = (b + a) / 2;
  27.         if (operations(x_2) * operations(b) <= 0)
  28.             a = x_2;
  29.         else
  30.             b = x_2;
  31.     }
  32.     return x_2;
  33. }
  34.  
  35. double(*operations[4])(double) = { operation_1,operation_2,operation_3,operation_4 };
  36. enum { first_operation, second_operation, third_operation, fourth_operation };
  37.  
  38. int main() {
  39.     setlocale(LC_ALL, "Russian");
  40.     double a, b, x;
  41.     int number;
  42.     const double E = 0.0001;
  43.     cout << "Введите интервал: " << endl;
  44.     cout << "Левая граница: ";
  45.     cin >> a;
  46.     cout << "Правая граница: ";
  47.     cin >> b;
  48.  
  49.     cout << "На интервале [" << a << ";" << b << "] :" << endl;
  50.     for (;;) {
  51.         cout << endl << "Введите номер требуемой вам функции: " << endl;
  52.         cout << "1. Уравнение 3*x2-150*sin(x)=0." << endl;
  53.         cout << "2. Уравнение e^x/2-x3+50=0. " << endl;
  54.         cout << "3. Уравнение x3-x2-50=0. " << endl;
  55.         cout << "4. Уравнение 3x-x2=0. " << endl;
  56.         cout << "0-конец расчета. " << endl;
  57.         cout << "Ваш выбор:  ";
  58.         cin >> number;
  59.         if (number < 5 && number != 0) {
  60.             double x = half_division_method(operations[number - 1], a, b, E);
  61.             cout << x;
  62.         }
  63.         if (number >= 5) {
  64.             cout << "Ошибка ввода.";
  65.         }
  66.         if (number == 0) {
  67.             cout << "Расчет окончен.";
  68.             break;
  69.         }
  70.     }
  71.  
  72.     return 0;
  73. }
  74.  
RAW Paste Data