Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath> // для математических функций
- #include <iomanip> // подключает манипуляторы (для setprecision)
- using namespace std;
- int main() {
- setlocale(LC_ALL, "Rus");
- const int SEGMENT_LENGTH = 3;
- const int MAX_VALUE = 10;
- const int MIN_VALUE = -10;
- const float MAX_EPS_VALUE = 0.01;
- const float MIN_EPS_VALUE = 0.0001;
- bool isIncorrect;
- float root, leftBorder, rightBorder, eps;
- cout << "Данная программа уточняет корень уравнения е^x – 10х = 0 на отрезке [a,b] методом касательных\n";
- cout << "Длина отрезка не должна быть больше " << SEGMENT_LENGTH << endl;
- cout << "Диапазон вводимых значений границ отрезка - от "<< MIN_VALUE << " до " << MAX_VALUE << "\n";
- do {
- isIncorrect = false;
- cout << "Введите начало отрезка\n";
- cin >> leftBorder;
- if (cin.fail() || (leftBorder < MIN_VALUE) || (leftBorder > MAX_VALUE)) {
- isIncorrect = true;
- cout << "Введены некорректные данные\n";
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- do {
- isIncorrect = false;
- cout << "Введите конец отрезка\n";
- cin >> rightBorder;
- if (cin.fail() || (rightBorder < MIN_VALUE) || (rightBorder > MAX_VALUE) || (abs(rightBorder - leftBorder) > SEGMENT_LENGTH)) {
- isIncorrect = true;
- cout << "Введены некорректные данные\n";
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- do {
- isIncorrect = false;
- cout << "Введите точность вычислений (от " << MIN_EPS_VALUE << " до " << MAX_EPS_VALUE << "\n";
- cin >> eps;
- if (cin.fail() || (eps < MIN_EPS_VALUE) || (eps > MAX_EPS_VALUE)) {
- isIncorrect = true;
- cout << "Введены некорректные данные\n";
- cin.clear();
- while (cin.get() != '\n');
- }
- } while (isIncorrect);
- if ((exp(leftBorder) - 10 * leftBorder) * exp(leftBorder) > 0) {
- do {
- root = leftBorder;
- leftBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
- } while (abs(leftBorder - root) > eps);
- cout << setprecision(4) << "Ближайший корень с заданной точностью: " << leftBorder << endl; //данный манипулятор задаёт, сколько знаков после запятой показывать при выводе
- }
- else {
- if ((exp(rightBorder) - 10 * rightBorder) * exp(rightBorder) > 0) {
- do {
- root = rightBorder;
- rightBorder = root - (exp(root) - 10 * root) / (exp(root) - 10);
- } while (abs(rightBorder - root) > eps);
- cout << setprecision(4) << "Ближайший корень с заданной точностью: " << rightBorder << endl;
- }
- else {
- cout << "На данном отрезке нет ближайших корней\n";
- }
- }
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement