для цикла помощи. Завершается, когда это не предполагается. C ++

0

Я новичок в stackoverflow, но я попытался найти ответ и не смог его найти. Я тоже не могу понять это сам. Итак, для школьного проекта C++ нам нужно найти область под кривой. У меня есть все формулы, жестко закодированные, так что не беспокойтесь об этом. И поэтому предполагается, что программа даст более высокий результат с более высоким значением для (n). Но кажется, что когда я ставлю значение для (n) выше, чем (b), программа просто зацикливает 0 и не заканчивается. Не могли бы вы, ребята, помочь мне, пожалуйста. Спасибо. Вот код:

/* David */

#include <iostream>
using namespace std;

int main()
{

cout << "Please Enter Lower Limit: " << endl;
int a;
cin >> a;

cout << "Please Enter Upper Limit: " << endl;
int b;
cin >> b;

cout << "Please Enter Sub Intervals: " << endl;
int n;
cin >> n;

double Dx = (b - a) / n;
double A = 0;
double X = a;

for (X = a; X <= (b - Dx); X += Dx)
{
    A = A + (X*X*Dx);
    X = X * Dx;
    cout << A << endl;
}

cout << "The area under the curve is: " << A << endl;

return 0;
}
  • 1
    X = X * Dx; Для чего этот? Это не имеет особого смысла.
  • 0
    Это была одна ошибка, которую я обнаружил. Это должно быть х = х + DX;
Показать ещё 1 комментарий
Теги:
for-loop

4 ответа

1
Лучший ответ

a, b, n - целые числа. Итак, следующее:

(b - a) / n

вероятно, 0. Вы можете заменить его:

double(b - a) / n
  • 0
    Вот и все, спасибо!
1

Поскольку все переменные в (b - a)/n являются int, вы выполняете целочисленное деление, которое отбрасывает фракции в результате. Присвоение double не меняет этого.

Вы должны преобразовать хотя бы одну из переменных в double чтобы получить результат с плавающей запятой с сохраненными фракциями:

double Dx = (b - a) / (double)n;
0

Вы выполняете целочисленное деление. Целочисленное деление будет возвращать только целые числа, отрезая десятичное число:

3/2 == 1 //Because 1.5 will get cut to 1
3/3 == 1
3/4 == 0 //Because 0.5 will get cut to 0

Вы должны иметь хотя бы одно из двух значений слева или справа от "/" - десятичный тип.

3 / 2.0f == 1.5f
3.0f / 2 == 1.5f
3.0f / 2.0f == 1.5f
0

Другие ответы верны. Ваша проблема, вероятно, является целым делением. Вы должны бросить операнды, чтобы удвоить.

Но вы должны использовать static_cast <> вместо C-style cast. А именно использование

static_cast<double>(b - a) / n

вместо double(b - a)/n или ((double) (b - a))/n.

  • 0
    Таким образом, вы предпочитаете добавить еще 10 символов для двойного преобразования int?
  • 0
    Да, я бы определенно Приведения в стиле C не приветствуются в коде C ++. А -Wold-style-cast их отсутствие позволяет вам включить флаги компиляции, например -Wold-style-cast которые могут помочь вам обнаружить случайные приведения в стиле C, которые могут быть более подвержены ошибкам, чем int, чтобы удваиваться.
Показать ещё 1 комментарий

Ещё вопросы

Сообщество Overcoder
Наверх
Меню