"CloneBoiii"
в общем, поговорил с преподом, показал ей значения при которых работает. сказала, что если ограничить поиск до 1000, то стек не должен переполняться и прога должна работать. хз, сможешь потестить? может даже меньше 1000, если потребуется
Твоя бабка начала "умничать" и на нервы действовать.
Замени тело функции void rasschet(double a, double x0) на следующее:
Спойлер: "Корректировка одной функции из предыдущего листинга" void rasschet(double a, double x0)
{
std::cout << "\rПоиск первого значения x (по условию)...";
for (size_t i = 1; i <= 5000U; i++)
{
if (i == 1001 || i == 2001 || i == 3001)
{
std::cout << "\rВ диапазоне от 1 до " << i - 1 << ", x = НЕ найден! Продолжить? (1/0 = да/нет): ";
int r;
std::cin >> r;
if (r != 1)
{
std::cout << "Рекурсивный поиск остановлен.\n";
break;
}
std::cout << "\rПродолжается поиск...";
}
else if (i == 4001)
{
std::cout << "\rВ диапазоне от 1 до " << i - 1 << ", x = НЕ найден! Продолжение вызовет переполнение стека\n";
std::cout << "Рекурсивный поиск остановлен.\n";
break;
}
double b = reqursia(i + 1, a, x0);
double m = reqursia(i, a, x0);
if (5.0 * a * abs(b - m) / 4.0 < 0.000001)
{
std::cout << "\nx_" << i << " = " << m << "\n";
break;
}
}
}
P.S.: Вводи любое значение a= от 3,01 до 4,99 с шагом 0,01. Переменная типа Double, в данном диапазоне не переполняется, поэтому "x" находит корректно, даже если оно больше 1000.
При а= от бесконечно малого числа до 1 функция прыгает, как пилообразный сигнал и там, случайно попадать в значения не имеет смысла.
При а= от ~1 до ~3, "х" не существует.
При а= от 5 до ∞, либо не существует "х", либо он настолько большой, что возникает переполнение. Так что значения >5 вводить так же не имеет смысла.
Несколько любых чисел от 3,01 до 4,99 для примера работы:
Введите действительное число а>0: 3.01
В диапазоне от 1 до 1000, x = НЕ найден! Продолжить? (1/0 = да/нет): 1
Продолжается поиск...
x_1254 = 1.14985
Введите действительное число а>0: 3.3
Поиск первого значения x (по условию)...
x_42 = 1.18665
Введите действительное число а>0: 3.98
Поиск первого значения x (по условию)...
x_8 = 1.31429
Введите действительное число а>0: 4.1
Поиск первого значения x (по условию)...
x_11 = 1.34761
Введите действительное число а>0: 4.55
Поиск первого значения x (по условию)...
x_26 = 1.548
Введите действительное число а>0: 4.87
Поиск первого значения x (по условию)...
x_84 = 1.98437
Введите действительное число а>0: 4.99
В диапазоне от 1 до 1000, x = НЕ найден! Продолжить? (1/0 = да/нет): 1
Продолжается поиск...
x_1053 = 3.31444