Помощь - Поиск - Пользователи - Календарь
Полная версия: Число Пи
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
-Орхидея-
В принципе как может показаться программка нетрудная. Но я наверное не обладаю знаниями такими чтобы написать её. Смысл програмки такой: Найти 100 первых правильных знаков числа Пи, и желательно чтобы программа была маленькая, и понятная, без сложностей.
Кому интересно пожалуста помогите.
Заранее спасибо.
P.S.:И пожалуста не пишите проги которые вычисляют 1000 и более цифр числа Пи, мне просто позарез нужна прога маленькая несложная.
klem4
Нахождение числа ПИ

Поиск и еще раз поиск

Дубликат ? Нахождение числа ПИ
-=Орхидея=-
Да нет та тема тоже моя но та прога очень сложная и непонятная
если бы кто объяснил её алгоритм то другое дело
volvo
Интересная информация: самая короткая рабочая программа, вычисляющая 800 знаков числа Пи:
int a=10000,b,c=2800,d,e,f[2801],g;main(){for(;b-c;)f[b++]=a/5;
for(;d=0,g=c*2;c-=14,printf("%.4d",e+d/a),e=d%a)for(b=c;d+=f[b]*a, f[b]=d%--g,d/=g--,--b;d*=b);}


Вот ее перевод на Паскаль (естественно, она уже не столь маленькая, но рабочая по-прежнему):
const
a = 10000;
c: longint = 2800;
var
b, d, e, g: longint;
f: array[0 .. 2800] of longint;

begin

while b - c <> 0 do begin
f[b] := a div 5; inc(b);
end;
while true do begin
d := 0; g := 2 * c;
if g = 0 then break;

b := c;
while true do begin
inc(d, f[b] * a);
dec(g); f[b] := d mod g;
d := d div g; dec(g);
dec(b);
if b = 0 then break;
d := d * b;
end;

dec(c, 14);
write(e + d div a);
e := d mod a;
end;

end.
rolleyes.gif
Malice
Цитата(volvo @ 23.01.2007 14:38) *

Интересная информация: самая короткая рабочая программа, вычисляющая 800 знаков числа Пи:

Ага, тоже 2 часа назад на нее наткнулся, начал перекладывать и плюнул smile.gif Попытался упростить твою:

const
a = 10000;
var
c,b, d, e: longint;
f: array[0 .. 2800] of longint;
begin
writeln;
for b:=0 to 2800 do f[b] := 2000;
for c:=200 downto 1 do begin
d := 0;
for b:=c*14 downto 1 do begin
d := d * b;
inc(d, f[b] * a);
f[b] := d mod (b*2-1);
d := d div (b*2-1);
end;
write(e + d div a);
e := d mod a;
end;
end.

Один фиг, не поймеш на чем основано. Шайтаны smile.gif
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.