mamadaliev
@mamadaliev
Intern Java Developer

Почему код не работает C++?

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

сам код,
#include <iostream>
#include <cmath>

using namespace std;

int main()
{
    int m, n;
    float x;
    float s1=0;
    float s2=0;
    float y=0;
    cout << "Input x:" << endl;
    cin >> x;
    cout << "Input m:" << endl;
    cin >> m;
    cout << "Input n:" << endl;
    cin >> n;

    for (int i=1; i<n; i++)
    {
        for (int k=1; k<m; i++)
            s1 += (1/k+k);

        for (int j=1; j<m; j++)
            s2 += (sqrt(x+j/i));

        y += ((1+x*s1) / (3+s2));
    }
    cout << "Result: " << y << endl;
}
  • Вопрос задан
  • 464 просмотра
Решения вопроса 1
@Mercury13
Программист на «си с крестами» и не только
Этим переменным не присваивали начального значения и в них могло оказаться что угодно.

Переводите с английского!
Ответ написан
Пригласить эксперта
Ответы на вопрос 1
Andrey2008
@Andrey2008
DevRel в PVS-Studio
Запустил на этот код PVS-Studio. Он выявил 2 ошибки:
s1 += (1/k+k);
V636 The '1 / k' expression was implicitly cast from 'int' type to 'float' type. Consider utilizing an explicit type cast to avoid the loss of a fractional part. An example: double A = (double)(X) / Y;. consoleapplication2017.cpp 34

Здесь целочисленное деление. Т.к. k это минимим 1, то при делении всегда будет получаться на первом проходе 1, а потом всё время 0. Исправление:
s1 += (1.0f/k+k);

Хотя мне кажется здесь ещё и скобки неверно поставлены и должно быть:

s1 += 1.0f/(k+k);

Вторая ошибка:
for (int i=1; i<n; i++)
    {
        for (int k=1; k<m; i++)


V533 It is likely that a wrong variable is being incremented inside the 'for' operator. Consider reviewing 'i'. consoleapplication2017.cpp 33

Опечатка. Во втором цикле увеличивается i, а надо k.

Используйте PVS-Studio. :)
Ответ написан
Ваш ответ на вопрос

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

Похожие вопросы