Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > C/C++: Для новичков > Факториал


Автор: danilkramatorsk 14.1.2013, 00:38
Цитата

Напишите программу, которая приближенно вычисляет значение  
математической константы е используя формулу 
е=1+1/1!+1/2!+1/3!...

вообщем, если честно, не знаю с чего начинать...
Код

#include <iostream>
using namespace std;
int main ()
{

    int nomer;
    int result = 1;
    cin >> nomer;
    while (nomer != 1)
    {
          
        resultat *= nomer;
        nomer--;
        
    }
    cout << "Factorial : " << resultat << endl;
   

    system ("Pause void");
    return 0;
}


это сделал для нахождения факториала неотрицательного целого числа...
а вот как саму формулу записать не могу разобраться

Автор: feodorv 14.1.2013, 01:43
Цитата(danilkramatorsk @  14.1.2013,  01:38 Найти цитируемый пост)
неотрицательного целого числа

Целые числа - это здорово. Но вот суммировать Вам нужно как раз числа с плавающей точкой (double). Вам нужна double-переменная суммы (которая есть приближённое значение числа e), double-переменная текущего члена ряда и int-переменная номера члена ряда. Суммировать можно до наступления некоторого события (например, остаток ряда меньше заранее заданной величины epsilon), но я думаю, можно просто ограничиться первыми 10 членами ряда. Соответственно нужно проинициализировать переменную суммы и первого члена ряда:
Код

double sum = 1.; // нулевой член ряда
double elem = 1.; // первый член ряда (то есть член ряда с номером один)


Организовываем цикл по переменной num от 1 до 10. В цикле сначала суммируем текущее значение члена ряда в переменную sum:
Код

sum += elem;


А затем находим следующий член ряда, который вычисляется от предыдущего по формуле
Код

elem = elem / num;


Всё. Никакого явного вычисления факториала не требуется.

Автор: danilkramatorsk 14.1.2013, 15:01
feodorv, что-то вроде этого ?
Код

int main ()
{

    int num;
    double sum=1.;
    double elem=1.;
    cin >> num;
    
    while (num <= 10)
    {
        sum += elem;
        elem = elem / num;
        
        
    }

Автор: feodorv 14.1.2013, 18:56
Цитата(danilkramatorsk @  14.1.2013,  16:01 Найти цитируемый пост)
feodorv, что-то вроде этого ?

Да, но num тоже нужно (правильно) проинициализировать, а потом изменять на единицу на каждом шаге цикла:
Код

for( num = 2; num <= 10; num++)
{
  ...
}



Цитата(danilkramatorsk @  14.1.2013,  16:01 Найти цитируемый пост)
    cin >> num;

Это лишнее smile 

Автор: danilkramatorsk 14.1.2013, 20:06
feodorv, так ?
Код

#include <iostream>
using namespace std;
int main ()
{

    int num;
    double sum=1.;
    double elem=1.;

    
    for (num=2;num <= 10;num++)
    {
        sum += elem;
        elem = elem / num;
        
        
    }
    cout << "E : " << elem << endl;


    system ("Pause void");
    return 0;
}


Автор: bsa 14.1.2013, 20:16
danilkramatorsk, проверь!

Автор: danilkramatorsk 14.1.2013, 20:58
feodorv, 
и еще вопрос к тебе)
Цитата

е=1+1/1!+1/2!+1/3!...

вот наша ф-ла 
в ней
е=sum; то есть сумма значений 1+1/1!+1/2!...
1/1!=int num и она = 2 т.е. по счету идет второй 
1/1!=elem; частное 1/1!;

правильно я понял?

Автор: danilkramatorsk 14.1.2013, 21:48
feodorv, полностью разобрался,спасибо!

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