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