@tr1ck

Почему программа зацикливается (легкая)?

Почему программа зацикливается? Вроде все верно. Считается интеграл методом трапеции с точностью E=10^(-9).
#include "stdafx.h"
#include
#include
#include

using namespace std;

double f(double x)
{
return 2 * x / sqrt (1-x*x*x*x);
}

int _tmain(int argc, _TCHAR* argv[])
{
double a = 0, b = 0.9, n = 4, S = 0, h, integ, IntegPrev;
h = (b - a) / n;
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);
integ = h * ((f(a) + f(b)) / 2 + S);
//посчитали первый интеграл для n=4
do {
IntegPrev = integ;
n += 1;
h = (b - a) / n;
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);
integ = h * ((f(a) + f(b)) / 2 + S);
} while (abs(IntegPrev - integ) > 0,000000001);
cout <<"qq" << integ;
getchar();
return 0;
}
  • Вопрос задан
  • 2815 просмотров
Решения вопроса 2
for (int i = 1; i <= (n - 1); i++)
S += f(a + h*i);


вы забыли обнулить S.

UPD. Вставляйте код как код, а не как текст - не разводите бардак!!!!!!
Ответ написан
lexxpavlov
@lexxpavlov
Программист, преподаватель
while (abs(IntegPrev - integ) > 0,000000001);
Запятая вместо точки справа от знака "больше". Нужно написать
while (abs(IntegPrev - integ) > 0.000000001);
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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