Advertisement
believe_me

Untitled

Sep 26th, 2022
875
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 2.35 KB | None | 0 0
  1. #include <iostream>
  2. #include <string>
  3. #include <cmath> // библиотека для e^x
  4.  
  5. using namespace std;
  6.  
  7. int main()
  8. {
  9.     setlocale(LC_ALL, "Russian");
  10.     cout << "Программа уточняет корень уравнения e^x - 10x = 0 на отрезке [a,b] методом хорд\n";
  11.     int a, b;
  12.     double xPrev, xCurr, xNext, tmp; // переменные для предпредыдущего, предыдущего и текущего значения корня и буферная
  13.     double E; // переменная для точности
  14.     int sum = 0;
  15.     bool isIncorrect = false;
  16.     string input = "";
  17.     do {
  18.         try {
  19.             cout << "Введите a: ";
  20.             getline(cin, input);
  21.             a = stoi(input);
  22.             if (a > -1000)
  23.             {
  24.                 isIncorrect = true;
  25.             }
  26.             else {
  27.                 cout << ("Количество элементов должно быть больше нуля\n");
  28.                 isIncorrect = false;
  29.             }
  30.         }
  31.         catch (exception ex) {
  32.             cout << ("Ошибка ввода\n");
  33.         }
  34.     } while (!isIncorrect);
  35.     do {
  36.         try {
  37.             cout << "Введите b: ";
  38.             getline(cin, input);
  39.             b = stoi(input);
  40.             if (b > a)
  41.             {
  42.                 isIncorrect = true;
  43.             }
  44.             else {
  45.                 cout << ("b должно быть больше a\n");
  46.                 isIncorrect = false;
  47.             }
  48.         }
  49.         catch (exception ex) {
  50.             cout << ("Ошибка ввода\n");
  51.         }
  52.     } while (!isIncorrect);
  53.     do {
  54.         try {
  55.             cout << "Введите точность: ";
  56.             getline(cin, input);
  57.             E = stod(input);
  58.             if (E > 0)
  59.             {
  60.                 isIncorrect = true;
  61.             }
  62.             else {
  63.                 cout << ("Точность должна быть больше нуля\n");
  64.                 isIncorrect = false;
  65.             }
  66.         }
  67.         catch (exception ex) {
  68.             cout << ("Ошибка ввода/n");
  69.         }
  70.     } while (!isIncorrect);
  71.     xPrev = a;
  72.     xCurr = b;
  73.     xNext = xNext = xCurr - (exp(xCurr) - 10 * xCurr) * (xPrev - xCurr) / (exp(xPrev) - 10 * xPrev - exp(xCurr) + 10 * xCurr);
  74.     do {   
  75.         tmp = xNext;
  76.         xNext = xCurr - (exp(xCurr) - 10 * xCurr) * (xPrev - xCurr) / (exp(xPrev) - 10 * xPrev - exp(xCurr) + 10 * xCurr);
  77.         xPrev = xCurr;
  78.         xCurr = tmp;
  79.     } while (abs(xNext - xCurr) > E); // условие выхода(когда разница результатов меньше заданной точности)
  80.     cout << "Приближенное значение корня на отрезке[" << a << "," << b << "] = " << xCurr;
  81. }
  82.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement