IPB
ЛогинПароль:

> Прочтите прежде чем задавать вопрос!

1. Заголовок темы должен быть информативным. В противном случае тема удаляется ...
2. Все тексты программ должны помещаться в теги [code=pas] ... [/code].
3. Прежде чем задавать вопрос, см. "FAQ", если там не нашли ответа, воспользуйтесь ПОИСКОМ, возможно такую задачу уже решали!
4. Не предлагайте свои решения на других языках, кроме Паскаля (исключение - только с согласия модератора).
5. НЕ используйте форум для личного общения, все что не относится к обсуждению темы - на PM!
6. Одна тема - один вопрос (задача)
7. Проверяйте программы перед тем, как разместить их на форуме!!!
8. Спрашивайте и отвечайте четко и по существу!!!

> Число Пи, Найти 100 верных знаков Пи
-Орхидея-
сообщение 20.01.2007 16:19
Сообщение #1


Гость






В принципе как может показаться программка нетрудная. Но я наверное не обладаю знаниями такими чтобы написать её. Смысл програмки такой: Найти 100 первых правильных знаков числа Пи, и желательно чтобы программа была маленькая, и понятная, без сложностей.
Кому интересно пожалуста помогите.
Заранее спасибо.
P.S.:И пожалуста не пишите проги которые вычисляют 1000 и более цифр числа Пи, мне просто позарез нужна прога маленькая несложная.
 К началу страницы 
+ Ответить 
 
 Ответить  Открыть новую тему 
Ответов
volvo
сообщение 23.01.2007 14:38
Сообщение #2


Гость






Интересная информация: самая короткая рабочая программа, вычисляющая 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
сообщение 23.01.2007 15:43
Сообщение #3


Профи
****

Группа: Пользователи
Сообщений: 705
Пол: Мужской

Репутация: -  20  +


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

Сообщение отредактировано: Malice - 23.01.2007 15:46
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

Сообщений в этой теме


 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 



- Текстовая версия 20.07.2025 22:41
Хостинг предоставлен компанией "Веб Сервис Центр" при поддержке компании "ДокЛаб"