Форум программистов, компьютерный форум CyberForum.ru

функция факториала - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 11, средняя оценка - 4.91
vovelo
Сообщений: n/a
19.10.2010, 21:43     функция факториала #1
Задание:
Вычислить и вывести на экран в виде таблицы значения функции, заданной с помощью ряда Тейлора, на интервале от хнач до хкон с шагом dx с точностью e. Таблицу снабдить заголовком и шапкой. Каждая строка должна содержать значение аргумента, значение функции и количество просуммирорванных членов ряда.
В моем варианте присутствует факториал в знаменателе дроби - (2n+1)!
Я в С++ не силен, до этого работал только в Паскале, но нам дают задания, которые надо делать исключительно на си.

Вот что у меня получилось:

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <cmath>
#include <clocale>
#include <stdio.h>
using namespace std;
unsigned long fact(unsigned int n)
{
if(n<=1)
return 1;
return n* fact(n-1);
}
 
int main ()
{
    setlocale(LC_ALL, "russian");
float sum=0,arg=0,x=0,xnach=0, xkonech=0, shag=0, toch=0;
    int n;
    
        cout<<"\nВведите x начальное:"; cin>>xnach;
        cout<<"Введите шаг:"; cin>>shag;
        cout<<"Введите х конечное:"; cin>>xkonech;
        cout<<"Введите точность:"; cin>>toch;
 
    cout<<"\nx\tn\tsum\tsin"; 
    
    for(float x=xnach; x<=xkonech; x+=shag)
    {
        n=0;
        arg=(pow((float)(-1), n)*(pow(x,2*n)))/(fact(2*n+1));
        while(abs(arg)>toch)
        {
            sum+=arg;       
            n++;
            arg=(pow((float)(-1), n)*(pow(x,2*n)))/(fact(2*n+1));
        }
        cout.precision(4);
        cout<<"\n"<<x<<"\t"<<n<<"\t"<<sum<<"\t"<<(sin((double)x)/x);
 
    }
    cout<<endl;
    return 0;
}
Препод сказал заменить рекурсивную функцию факториала на "расширенный вид", ибо у меня выскакивает ошибка после подсчета по формуле вот на этом моменте на скрине.
Подскажите приблизительно, как написать правильно эту самую функцию...
Миниатюры
функция факториала  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.10.2010, 21:43     функция факториала
Посмотрите здесь:

Си, вычисление факториала C++
Вычисление факториала C++
C++ нахождение факториала
Рекурсивная функция вычисления факториала C++
вычисления факториала C++
Избавится от факториала C++
Функция для вычисления факториала C++
Функция вычисления факториала C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
accept
4838 / 3237 / 165
Регистрация: 10.12.2008
Сообщений: 10,682
20.10.2010, 07:24     функция факториала #2
факториал 12 поместится в unsigned long, если он четыре байта
возможно тебе предлагают применить длинную арифметику (если там n больше 12)

Python
1
2
3
4
5
6
7
8
9
10
>>> def fact(n):
...   prod = 1
...   for i in range(1, n + 1):
...     prod *= i
...   return prod
...
>>> fact(6), fact(3), fact(5)
(720, 6, 120)
>>> fact(100)
93326215443944152681699238856266700490715968264381621468592963895217599993229915608941463976156518286253697920827223758251185210916864000000000000000000000000
C
1
2
3
4
5
6
7
8
#include <stdio.h>
#include <float.h>
 
int main(void)
{
    printf("%f" "\n", DBL_MAX);
    return 0;
}
Код
[guest@localhost tests]$ ./t
179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368.000000
[guest@localhost tests]$
Python
1
2
3
4
5
6
7
8
>>> a = 179769313486231570814527423731704356798070567525844996598917476803157260780028538760589558632766878171540458953514382464234321326889464182768467546703537516986049910576551282076245490090389328944075868508455133942304583236903222948165808559332123348274797826204144723168738177180919299881250404026184124858368
>>> for i in range(1, 700):
...   if fact(i) > a:
...     print(i, fact(i))
...     break
... 
171 1241018070217667823424840524103103992616605577501693185388951803611996075221691752992751978120487585576464959501670387052809889858690710767331242032218484364310473577889968548278290754541561964852153468318044293239598173696899657235903947616152278558180061176365108428800000000000000000000000000000000000000000
>>>
Yandex
Объявления
20.10.2010, 07:24     функция факториала
Ответ Создать тему
Опции темы

Текущее время: 22:36. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru