Посчитать сумму знакопеременного ряда - C (СИ)

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

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

Посчитать сумму ряда, в общем. Результат: 0.63333. С результатом ln(2)=0,69315 не сходится что-то совсем.
#include <stdio.h>
#include <math.h>
 
float Sum () {
    //предусловие:
    int i = 1;  //номер шага цикла
    float p = 1.0, s = 1.0; 
                    //
    //
    float eps = 0.01;   //точность вычисления
    for (;fabs(p)>eps;i++) {    //p<eps - условие окончания цикла
        p *= (-1.0)/(i+1);  //рекуррентная формула
        s += p; //нахождение суммы
        #ifdef DEBUG
        printf("i = %i, p = %f, s = %f\n",i,p,s);
        #endif
    }
    return s;
}
 
int main() {
    float s = Sum();
    printf("%f",s);
    return 0;
}

Решение задачи: «Посчитать сумму знакопеременного ряда»

textual
Листинг программы
#include <stdio.h>
#include <math.h>
//#define DEBUG
 
double Sum() {
    //предусловие:
    int i = 1;  //номер шага цикла
    double p = 1.0, s = 1.0;
    //
    //
    double eps = 0.01;   //точность вычисления
    for (; fabs(p)>eps; i++) {    //p<eps - условие окончания цикла
        p = pow(-1.0,i) / (i + 1.0);  //рекуррентная формула
        s += p; //нахождение суммы
#ifdef DEBUG
        printf("i = %i, p = %lf, s = %lf\n", i, p, s);
#endif
    }
    return s;
}
 
int main() {
    double s = Sum();
    printf("%lf\n", s);
    return 0;
}

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

Код представляет собой функцию Sum(), которая вычисляет сумму знакопеременного ряда, используя рекуррентную формулу.

  1. В функции Sum() объявлены следующие переменные:
    • i - номер шага цикла (линия 6)
    • p - текущее значение члена ряда (линия 6)
    • s - текущая сумма ряда (линия 6)
    • eps - требуемая точность вычисления (линия 14)
  2. Цикл for начинается с предусловия fabs(p)>eps и выполняется до тех пор, пока абсолютное значение p больше заданной точности eps. Условие окончания цикла - p<eps (линия 16).
  3. Внутри цикла for вычисляется новый член ряда p с помощью формулы pow(-1.0,i) / (i + 1.0) (линия 18).
  4. Значение нового члена ряда p добавляется к сумме ряда s (линия 19).
  5. Если определен макрос DEBUG, то на каждой итерации цикла выводится сообщение с номером шага i, значением p и суммой s (линия 21).
  6. В функции main() вызывается функция Sum() и результат сохраняется в переменной s (линия 30).
  7. Результат переменной s выводится на экран с помощью функции printf() (линия 31).
  8. Функция main() возвращает 0, что означает успешное завершение программы (линия 33).

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


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

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

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