Небольшая программа на C++

231
10 июля 2017, 17:58

Доброго времени суток всем!

Давно учил С++, уже его подзабыл, но сейчас необходимо решить задание. Буду благодарен любой помощи!

Задание:

Есть нелинейное уравнение cos(2/x) - 2sin(1/x) + 1/x = 0 , необходимо посчитать корень х на неком участке (а,b) с точностью eps (методом деления отрезка пополам). a,b,eps - вводит пользователь (консольный интерфейс)

Алгоритм расчета:

1) x = (a+b)/2;

2) Если f(a) * f(x) > 0 , в в следующей итерации a = x , иначе b = x;

3) Продолжать пока длина отрезка не станет меньше чем eps.

Есть такие наброски:

#include <stdio.h>
#include <Windows.h> 
#include <cmath>

double f(double x)
{
    return cos(2.0 / x) - 2 * sin(1.0 / x) + 1.0 / x;
}
int main()
{
    double a, b, eps,fx,fa,x;
    printf("\n a = ");
    scanf("%f", &a);
    printf("\n b = ");
    scanf("%f", &b);
    printf("\n eps = ");
    scanf("%f", &eps);
    do
    {
        x = (a + b) / 2;
        if (f(x)*f(a) > 0) a = x;
        else b = x;
    } while (fabs(b - a) >= eps);
    printf("\n x = %-10.3f", x);
    system("PAUSE");
    return 0;
}
Answer 1

В принципе, вы же все сделали правильно. Можно добавить кое-что по мелочи...

Во-первых, надо убедиться, что a<b - это упрощает жизнь.

if (a > b) { int t = a; a = b; b = t; }

Затем для начала проверим, есть ли решение:

double fa = f(a), fb = f(b);
if (fa*fb > 0)
{
    puts("Метод неприменим");
    exit(1);
}

Теперь вам не нужно вычислять на каждом шаге функцию лишний раз:

while( b - a > eps )
{
    x = (a+b)/2.0;
    if (fa*f(x) > 0)
        a = x;
    else
        b = x;
}

В принципе, можно отдельно проверять, не равно ли f(x) == 0.

READ ALSO
c++ UpdateLayeredWindow

c++ UpdateLayeredWindow

Создаю на плюсах нестандартное окно по png рисунку через UpdateLayeredWindowКак на этом окне отобразить стандартные контролы? В частности меня интересуют...

294
Fonts error в консоли веб-приложения

Fonts error в консоли веб-приложения

С чем могут быть связаны такие проблемы?

250
jQuery селектор [требует правки]

jQuery селектор [требует правки]

Ищу элемент с помощью селектора:

233
Снятие запрета на клик в JS

Снятие запрета на клик в JS

ПриветЯ использую функцию

254