@sikeyys

Где ошибка в коде?

636bdb30daec8368464287.png
Код написан по примеру, где-то есть ошибка ведь значения считаются неверно.

#include <iostream>
#include<windows.h>
#include<format>
using namespace std;

int main()
{
    SetConsoleOutputCP(1251);
    double xn{ -9.38 }, xk{ 26.2 }, x{}, y{};
    double dx{ 3.8 }, a{ 2.35 }, b{ 17.8 };
    const auto table_format = "x={:5.2f}\t  y={:5.2f} {:>20}\n";

    for (x=xn; x <= xk; x += dx)
    {
        if (x >= log(b))
        {
            y = (pow(log(a * x), 3)) / ((sqrt(b * x)) + 1.2);
            cout << format(table_format, x, y, "x >= log(b)");
         
        }
        
        if (x < log(b)) 
        {
            y = (pow(tan(a * x), 2)) + (sqrt(exp(b * x)));
            cout << format(table_format, x, y, "x<log(b)");
        }
    }

    return 0;
}
  • Вопрос задан
  • 126 просмотров
Пригласить эксперта
Ответы на вопрос 1
alxndrlsn
@alxndrlsn
Инженер
Смею предположить, что переменную цикла следует инициализировать стандартным способом:
...
 for (double x=xn; x <= xk; x += dx) {
        if (x >= log(b))  {
            y = pow(log(a * x), 3.0) / ((sqrt(b * x)) + 1.2);
            cout << format(table_format, x, y, "x >= log(b)");
        
        } else {
            y = pow(tan(a * x), 2.0) + sqrt(exp(b * x));
            cout << format(table_format, x, y, "x<log(b)");
        }
    }
...


п.с. В различных вычислениях необходимо напоминать машине, что она работает с double, кроме того, лучше сразу указать double константу, нежели полагаться на встроенные преобразования из int в double. При работе с pow эмпирически обнаружил, что требование указывать степень в double формате лучше удовлетворять сразу, иначе может неправильно посчитать почему-то.

п.п.с. лишние скобки не нужны никому, а else смотрится эстетичней.

updated: ответ обнаружился на графике (см. в комментариях) - на интервале от 0 до ln(17.8) значения функции зашкаливают...
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы