Модераторы: bsa
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> Факториал, задача по Дейтлу 
:(
    Опции темы
danilkramatorsk
Дата 14.1.2013, 00:38 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



Цитата

Напишите программу, которая приближенно вычисляет значение  
математической константы е используя формулу 
е=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;
}


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

PM MAIL   Вверх
feodorv
Дата 14.1.2013, 01:43 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



Цитата(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;


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


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
danilkramatorsk
Дата 14.1.2013, 15:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



feodorv, что-то вроде этого ?
Код

int main ()
{

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

PM MAIL   Вверх
feodorv
Дата 14.1.2013, 18:56 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Комодератор
Сообщений: 2214
Регистрация: 30.7.2011

Репутация: 12
Всего: 45



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

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

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



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

Это лишнее smile 

Это сообщение отредактировал(а) feodorv - 14.1.2013, 19:00


--------------------
Напильник, велосипед, грабли и костыли - основные инструменты программиста...
PM MAIL   Вверх
danilkramatorsk
Дата 14.1.2013, 20:06 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



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;
}


PM MAIL   Вверх
bsa
Дата 14.1.2013, 20:16 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Модератор
Сообщений: 9185
Регистрация: 6.4.2006
Где: Москва, Россия

Репутация: 85
Всего: 196



danilkramatorsk, проверь!
PM   Вверх
danilkramatorsk
Дата 14.1.2013, 20:58 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



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, 20:59
PM MAIL   Вверх
danilkramatorsk
Дата 14.1.2013, 21:48 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Шустрый
*


Профиль
Группа: Участник
Сообщений: 114
Регистрация: 22.12.2012

Репутация: нет
Всего: нет



feodorv, полностью разобрался,спасибо!
PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Правила форума "C/C++: Для новичков"
JackYF
bsa

Запрещается!

1. Публиковать ссылки на вскрытые компоненты

2. Обсуждать взлом компонентов и делиться вскрытыми компонентами

  • Действия модераторов можно обсудить здесь
  • С просьбами о написании курсовой, реферата и т.п. обращаться сюда
  • Вопросы по реализации алгоритмов рассматриваются здесь


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, JackYF, bsa.

 
1 Пользователей читают эту тему (1 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | C/C++: Для новичков | Следующая тема »


 




[ Время генерации скрипта: 0.0786 ]   [ Использовано запросов: 21 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.