Алгоритм вычисления бесконечной суммы с заданной точностью - C (СИ)

Узнай цену своей работы

Формулировка задачи:

Здравствуйте, хотелось бы сразу перейти к сути, в общем есть следующая задание, смотреть вложение. А также есть строгие требования, из-за которых каждый член заданной нам последовательности должен вычисляться не по новой, а благодаря вычислениям выполненным на стадии вычисления предыдущего члена последовательности. В данном случаи, как я понимаю, нельзя позволять себе вычислять факториал на каждой итерации, из-за чересчур быстрого роста. Как итог я имею следующую код, которая судя по всему работает неверно, хотелось бы услышать ваше мнение, а может быть и увидеть и ваш код, господа и дамы. Буду благодарен за любую активность.
#include <stdio.h>
#include <math.h>
#include <stdlib.h>
 
main(){
    float eps,sum,a;
    int k;
    printf("Enter eps\n");
    scanf("%f",&eps);
 
    a=-1.0; sum=sum+a; k=2;
    
    while(fabs(a)>eps){
       a=a*(-1/k);
       k=k+1;
       sum=sum+a;
    }
    
         printf("%f\n",sum);
         system("pause");
    }
Поиском пользовался, находил что-то подобное, но там задачи решались в лоб, что мне совершено не подходит.

Решение задачи: «Алгоритм вычисления бесконечной суммы с заданной точностью»

textual
Листинг программы
#include <stdio.h>
#include <stdlib.h>
#include <math.h>
 
int main( void ) {
 
    double eps = 0.00001;
    double curr = -1;
    double sum = curr;
    int counter = 2;
    while ( fabs( curr ) >= eps ) {
        curr *= -1.0 / counter++;
        sum += curr;
    }
 
    printf( "сумма = %f\n", sum );
 
    return EXIT_SUCCESS;
}

Объяснение кода листинга программы

  1. Подключение необходимых библиотек: iostream, cmath
  2. Объявление переменных: a. eps — погрешность вычислений, равная 0.00001; b. curr — текущее значение члена ряда, равное -1; c. sum — сумма ряда, равная первому члену ряда, то есть curr; d. counter — счётчик, определяющий номер текущего члена ряда.
  3. Запуск цикла while, который выполняется до тех пор, пока абсолютное значение текущего члена ряда (curr) не станет меньше или равно погрешности (eps).
  4. Внутри цикла while выполняем следующие действия: a. Умножаем текущий член ряда на -1.0/counter (меняем знак и делим на текущее значение счётчика); b. Обновляем значение sum, добавляя к нему текущий член ряда; c. Увеличиваем значение счётчика на 1.
  5. После выполнения цикла while выводим на экран значение суммы ряда (sum).
  6. Возвращаем EXIT_SUCCESS, т.е. программа успешно завершилась.

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.2 из 5
Похожие ответы