@tr1ck

Ошибка в простом коде?

#include "stdafx.h"
#include <iostream>
#include <conio.h>
#include <math.h>

using namespace std;

double f(double x)
{
	double  S = 1, R = 0, N, n, y, Y = 1, F = 1;
	for (int i = 0; i < 10; i++){
		n = i + 1;
		y = -(1/2) + 1 - n;
		Y = Y*y;
		F = F*n;
		N = (pow(x,n)*pow(-1,n)*(Y))/F;
		S = S + N;
	}





	return S*(2 * x / sqrt ((1+x)*(1+x*x)));
}

int _tmain(int argc, _TCHAR* argv[])
{
	setlocale(LC_ALL, "Russian");
	cout << "Программа считает интеграл 2x/sqrt(1-x^4) с границами от 0 до 1 методом трапеции";
	cout << "с точность E=10^(-9)!" << endl;
	double a = 0, b = 1, 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;
		S = 0;
		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 << "\nAnswer: " << integ << endl;
	getchar();
	return 0;
}

Выдает постоянно один и тот же ответ, когда меняю в цикле for значения. То есть до 50, 150, 500 и т.д.. Хотя значения должны отличаться, ибо чем больше я суммирую, тем точнее должен быть ответ. А что самое интересное, поставлю я даже там отрицательное число for (int i = 0; i < -101; i++){...}, все равно выдаст тот же ответ, что за? Тогда цикл вообще не должен работать.
  • Вопрос задан
  • 2541 просмотр
Решения вопроса 1
Если вы про цикл for внутри функции f, то конечно он всегда будет считать одно и то же S, просто потому что при i = 0, вы считаете n = 1, далее y = 0 и соответственно Y = 0 отсюда и для всех дальнейших итераций цикла, соответственно вы к S всегда прибавляете 0, т. е. S независимо от числа итераций == 1.
Ответ написан
Пригласить эксперта
Ваш ответ на вопрос

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

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