Advertisement
ksyshshot

Lab_1.3

Sep 29th, 2022 (edited)
44
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.01 KB | Source Code | 0 0
  1. #include <iostream>
  2. #include <cmath> // для математических функций
  3. #include <iomanip> // подключает манипуляторы (для setprecision)
  4. using namespace std;
  5.  
  6. int main() {
  7.     setlocale(LC_ALL, "Rus");
  8.  
  9.     const int SEGMENT_LENGTH = 3;
  10.     const int MAX_VALUE = 10;
  11.     const int MIN_VALUE = -10;
  12.     const float MAX_EPS_VALUE = 0.01;
  13.     const float MIN_EPS_VALUE = 0.0001;
  14.     bool isIncorrect;
  15.     float root, leftBorder, rightBorder, eps;
  16.  
  17.     cout << "Данная программа уточняет  корень  уравнения е^x – 10х = 0 на отрезке [a,b] методом касательных\n";
  18.     cout << "Длина отрезка не должна быть больше " << SEGMENT_LENGTH << endl;
  19.     cout << "Диапазон вводимых значений границ отрезка - от "<< MIN_VALUE << " до " << MAX_VALUE << "\n";
  20.     do {
  21.         isIncorrect = false;
  22.         cout << "Введите начало отрезка\n";
  23.         cin >> leftBorder;
  24.         if (cin.fail() || (leftBorder < MIN_VALUE) || (leftBorder > MAX_VALUE)) {
  25.             isIncorrect = true;
  26.             cout << "Введены некорректные данные\n";
  27.             cin.clear();
  28.             while (cin.get() != '\n');
  29.         }
  30.     } while (isIncorrect);
  31.     do {
  32.         isIncorrect = false;
  33.         cout << "Введите конец отрезка\n";
  34.         cin >> rightBorder;
  35.         if (cin.fail() || (rightBorder < MIN_VALUE) || (rightBorder > MAX_VALUE) || (abs(rightBorder - leftBorder) > SEGMENT_LENGTH)) {
  36.             isIncorrect = true;
  37.             cout << "Введены некорректные данные\n";
  38.             cin.clear();
  39.             while (cin.get() != '\n');
  40.         }
  41.     } while (isIncorrect);
  42.     do {
  43.         isIncorrect = false;
  44.         cout << "Введите точность вычислений (от " << MIN_EPS_VALUE << " до " << MAX_EPS_VALUE << "\n";
  45.         cin >> eps;
  46.         if (cin.fail() || (eps < MIN_EPS_VALUE) || (eps > MAX_EPS_VALUE)) {
  47.             isIncorrect = true;
  48.             cout << "Введены некорректные данные\n";
  49.             cin.clear();
  50.             while (cin.get() != '\n');
  51.         }
  52.     } while (isIncorrect);
  53.     if ((exp(leftBorder) - 10 * leftBorder) * exp(leftBorder) > 0) {
  54.         do {
  55.             root = leftBorder;
  56.             leftBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
  57.         } while (abs(leftBorder - root) > eps);
  58.         cout << setprecision(4) <<  "Ближайший корень с заданной точностью: " << leftBorder << endl; //данный манипулятор задаёт, сколько знаков после запятой показывать при выводе
  59.     }
  60.     else {
  61.         if ((exp(rightBorder) - 10 * rightBorder) * exp(rightBorder) > 0) {
  62.             do {
  63.                 root = rightBorder;
  64.                 rightBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
  65.             } while (abs(rightBorder - root) > eps);
  66.             cout << setprecision(4) << "Ближайший корень с заданной точностью: " << rightBorder << endl;
  67.         }
  68.         else {
  69.             cout << "На данном отрезке нет ближайших корней\n";
  70.         }
  71.     }
  72.     return 0;
  73. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement