Стоит задача
Создать приложение с помощью которого можно для ряда, члены которого вычисляются по формуле подсчитать сумму членов ряда с точностью до 0,000001 и сумму первых 10 членов ряда.
Вот сама формула:
Написал такой код:
int n = 1;
double a = 1, sum = 0.0, eps = 0.000001, sum_of_10 = 0;
while (fabs(a) > 0.000001) {
a = pow(-1, n)*((double)(2 * (n + 1)) / (2 + (n+1) * (n-1)));
sum += a;
if (n == 10)
sum_of_10 = sum;
n++;
}
textBox1->Text = sum_of_10.ToString();
Когда нажимаю на кнопку на форме чтобы это всё посчитало то форму фризит и она зависает
Что я сделал не так?
Прикиньте - у вас нужно порядка миллиона членов. Так? А чему будет равно (n+1) * (n-1) при этом? В double преобразование вы делаете позже... Вот ваши 1012 никак и не хотят в int влезть... Соответственно, a не хочет становиться малым - вот и имеем то, что имеем - бесконечный цикл.
Сделайте хотя бы так:
int n = 1;
double a = 1, sum = 0.0, eps = 0.000001, sum_of_10 = 0.0, sign = 1;
while (fabs(a) > eps)
{
sum += (a = (sign *= -1)*(2.0*(n + 1))/(1.0+double(n)*n));
if (n == 10) sum_of_10 = sum;
n++;
}
Я только учусь и как проводить отладку совсем не знаю
Ну хотя бы выводить промежуточные результаты можете? Скажем, для каждого тысячного n вывести an и посмотреть, что получается?
И еще - такие медленно сходящиеся ряды лучше считать с конца, начиная с мелких значений слагаемых - так точность будет более высокой. Для вашего примера и вашей точности это не так важно, но приобретать хорошие манеры :) имеет смысл с самого начала.
Основные этапы разработки сайта для стоматологической клиники
Продвижение своими сайтами как стратегия роста и независимости