Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Центр помощи > [C++]вычисление суммы бесконечного ряда на


Автор: len4ixa 25.11.2008, 08:12
Новичиха на C++ и никак не могу это понять smile . Вот, что-то пробовала написать, но по сути дела даже задания не поняла... 
Код

#include "stdafx.h"
#include "conio.h"
#include "stdio.h"
#include "math.h"
int _tmain(int argc, _TCHAR* argv[])
{ float k, i, z, eps;
     k=0;
     printf("Input z:");
         scanf ("%f", &z);
printf ("Input eps:");
             scanf ("%f", &eps);
     i=pow((pow(z, 2)/4), k)/(6.28*k*pow((k/2.72),k)*pow((k/2.72),k));
        
 do
 
         {   
             i=pow((pow(z, 2)/4), k)/(6.28*k*pow((k/2.72),k)*pow((k/2.72),k));
            
        k=k+1;
         }
             
         while (fabs(i)<=eps);
            printf ("i=%f", i);
 
 getch();
    return 0;
}

Само собой что-то не то, либо подскажите, либо свою версию представьте, пожалуйста!!!
задание на рисункеuser posted image

Автор: len4ixa 28.11.2008, 19:08
Ап, так давно написала, и даже ни одного ответа:( Ответ до сих пор нужен!!

Автор: Sannis 29.11.2008, 01:41
Пожалуй так...

Попробуйте разобраться, задавайте вопросы:
Код

#include "stdio.h"
#include "math.h"
int main(int argc, char* argv[])
{
    float z = 0.5;
    float eps = 1e-6;
    long int k = 0;
    long int k_fact = 1;
    float elem = 0;
    float summ = 0;

    printf("Input z:");
    scanf("%f", &z);

    printf("Input eps:");
    scanf("%f", &eps);

    // k = 0
    summ = 1;
    do {
        k +=1;
        k_fact *= k;

        elem = ( k%2 == 0 ? 1 : -1  )*( pow(z*z/4, (float)k) )/k_fact/k_fact;
        summ += elem;
            
    } while ( fabs(elem) > eps );

    printf("Summ = %.5f\n", summ);
 
    return 0;
}



Результат: http://codepad.org/df7qdhNd.

Автор: len4ixa 3.12.2008, 05:57
ну есть вообще пару вопросов:
1. как тут выделить вычисление самого факториала
2. ( k%2 == 0 ? 1 : -1  ) что поподробнее это делает

Автор: Sannis 4.12.2008, 03:34
Цитата(len4ixa @  3.12.2008,  05:57 Найти цитируемый пост)
1. как тут выделить вычисление самого факториала

Если очень хочется, то можно выделить в отдельную функцию. Но если членов ряда много, я бы сэкономил, что и изложил в коде. Как известно 0!=1, n!=n*(n-1)!, т.е. достаточно завести переменную k_fact, равную единице в начале и на каждом шаге умножать на номер шага, тогда в ней всегда будет находиться n!.

Цитата(len4ixa @  3.12.2008,  05:57 Найти цитируемый пост)
2. ( k%2 == 0 ? 1 : -1  ) что поподробнее это делает

Это тернарный оператор. откройте любую книжку по синтаксису C/C++ и прочитайте про него. если нет, смотрите здесь: http://inf777.narod.ru/cpp_lections/lection_5.htm, http://ru.wikipedia.org/wiki/%D0%A1%D0%B8%D0%BD%D1%82%D0%B0%D0%BA%D1%81%D0%B8%D1%87%D0%B5%D1%81%D0%BA%D0%B8%D0%B9_%D1%81%D0%B0%D1%85%D0%B0%D1%80#.D0.A2.D0.B5.D1.80.D0.BD.D0.B0.D1.80.D0.BD.D1.8B.D0.B9_.D0.BE.D0.BF.D0.B5.D1.80.D0.B0.D1.82.D0.BE.D1.80_.D0.B2_.D0.A1.D0.B8.

Автор: len4ixa 5.12.2008, 06:26
Спасибо, вроде разобралась

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)