![]() |
|
Модераторы: Poseidon |
![]()
|
|
| Гость_Александра |
|
|||
|
Unregistered |
помогите решить задание:
Дано натуральное число n, в интервале от 1 до 100. Необходимо вычислить n первых знаков числа е (2,7...). Готовых функций использовать нельзя. Надо написать алгоритм решения задачи и программу. Вычислить число е с точностью еще могу, используя рекурсию для поиска факториала.но этого мало надо вывести определенное количество знаков числа е. Помогите пожалуйста. Программу надо написать в Pascal var n: integer; prec,e,ss:real; function f(n:integer):integer; begin if(n=1) then f:=1 else f:=f(n-1)*n end; begin prec:=0.000001; e:=1; n:=1; while (1/f(n))>prec do begin e:=e+1/f(n); n:=n+1; end; |
|||
|
||||
| MAKCim |
|
|||
![]() Воін дZэна ![]() ![]() ![]() ![]() Профиль Группа: Экс. модератор Сообщений: 5644 Регистрация: 10.12.2005 Где: Менск, РБ Репутация: 6 Всего: 207 |
зачем каждый раз считать факториал, ведь f(n+1)=f(n)*(1/(n+1))
-------------------- Ах, у елі, ах, у ёлкі, ах, у елі злыя волкі © |
|||
|
||||
| Гость_Александра |
|
|||
|
Unregistered |
Может я не понимаю, но ведь это тоже вычисление факториала, вернее 1/n!. Ну ладно , а как мне все-таки вывести на экран только заданное значение знаков е?
|
|||
|
||||
| Mal Hack |
|
|||
![]() Мудрый... ![]() ![]() ![]() ![]() Профиль Группа: Участник Клуба Сообщений: 9926 Регистрация: 15.2.2004 Репутация: 4 Всего: 261 |
Стоп. Ряд, который образуется 1/n! никогда не будет больше 1. E образует ряд вида x^n/n!
Добавлено @ 14:05 Алгоритм такой. a = 1; b = 1; s = 0; while( r > prec ) { r = a/b; s = s + r; Inc(i); a = x^i; b = b * i; } |
|||
|
||||
| AleksandraL |
|
|||
|
Новичок Профиль Группа: Участник Сообщений: 2 Регистрация: 13.1.2006 Репутация: нет Всего: нет |
Вот обнаружила такую программу , но к сожалению не понимаю. Может кто объяснит?!
Следующая программа вычисляет NbDigits=10000 первых цифр числа е. /* ** Pascal Sebah : July 1999 ** ** Subject: ** ** A very easy program to compute e with many digits. ** No optimisations, no tricks, just a basic program to learn how ** to compute in multiprecision. ** ** Formula: ** ** e = 1+1/1!+1/2!+...+1/k!+... ** ** Data: ** ** A big real (or multiprecision real) is defined in base B as: ** X = x(0) + x(1)/B^1 + ... + x(n-1)/B^(n-1) ** where 0<=x(i)<B ** ** Results: (PentiumII, 450Mhz) ** ** 1000 decimals : 0.02seconds ** 10000 decimals : 1.2s ** 100000 decimals : 97.0s ** 200000 decimals : 375.0s ** ** With a little work it's possible to reduce those computation ** times by a factor of 3 and more. */ #include <stdio.h> #include <stdlib.h> long B=10000; /* Working base */ long LB=4; /* Log10(base) */ /* ** Set the big real x to the small integer Integer */ void SetToInteger (long n, long *x, long Integer) { long i; for (i=1; i<n; i++) x[i] = 0; x[0] = Integer; } /* ** Is the big real x equal to zero \? */ long IsZero (long n, long *x) { long i; for (i=0; i<n; i++) if (x[i]) return 0; return 1; } /* ** Addition of big reals : x += y ** Like school addition with carry management */ void Add (long n, long *x, long *y) { long carry=0, i; for (i=n-1; i>=0; i--) { x[i] += y[i]+carry; if (x[i]<B) carry = 0; else { carry = 1; x[i] -= B; } } } /* ** Division of the big real x by the integer d ** Like school division with carry management */ void Div (long n, long *x, long d) { long carry=0, xi, q, i; for (i=0; i<n; i++) { xi = x[i]+carry*B; q = xi/d; carry = xi-q*d; x[i] = q; } } /* ** Print the big real x */ void Print (long n, long *x) { long i; printf ("%d.", x[0]); for (i=1; i<n; i++) { printf ("%.4d", x[i]); if (i%25==0) printf ("%8d\n", i*4); } printf ("\n"); } /* ** Computation of the constant e */ void main () { long NbDigits=10000, size=1+NbDigits/LB; long *e = (long *)malloc(size*sizeof(long)); long *uk = (long *)malloc(size*sizeof(long)); long k=1; // Formula used : e = 1+1/1!+1/2!+...+1/k!+... SetToInteger (size, e, 1); /* e = 1 */ SetToInteger (size, uk, 1); /* uk = 1 */ while (!IsZero(size, uk)) { Div (size, uk, k); /* uk = u(k-1)/k */ Add (size, e, uk); /* e = e + uk */ k++; } Print (size, e); /* Print out of e */ free (e); free (uk); } Добавлено @ 14:34
Увы, теперь совсем запуталась. |
|||
|
||||
![]()
|
| Правила форума "Центр помощи" | |
|
|
ВНИМАНИЕ! Прежде чем создавать темы, или писать сообщения в данный раздел, ознакомьтесь, пожалуйста, с Правилами форума и конкретно этого раздела.
Более подробно с правилами данного раздела Вы можете ознакомится в этой теме. Если Вам помогли и атмосфера форума Вам понравилась, то заходите к нам чаще! С уважением, Poseidon, Rodman |
| 0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей) | |
| 0 Пользователей: | |
| « Предыдущая тема | Центр помощи | Следующая тема » |
|
|
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности Powered by Invision Power Board(R) 1.3 © 2003 IPS, Inc. |