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

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

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

 
 Ответить  Открыть новую тему 
> Нахождение числа ПИ, Найти 100 верных знаков
сообщение
Сообщение #1





Группа: Пользователи
Сообщений: 7
Пол: Женский
Реальное имя: Диана

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


Мальчики пожалуста помогите, оч трудно паскаль даётся, а учитель дал задание написать программу вычисления 100 верных знаков числа Пи. Как я ни старалась а у меня больше 14 знаков не выходит sad.gif.
У кого есть немножечко времени уделите пожалуста.
Спасибочки заранее.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Ошиблась разделом? Перенести в простые "Задачи", или ты именно на заказ? Тогда - какие сроки и сумма... smile.gif
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Гость






В принципе, задача решена (работает до 54000 знаков после запятой, так что если нужно решение, и ты действительно не ошиблась разделом - пиши в приват, программа будет тебе выслана в течении 5 минут...)
 К началу страницы 
+ Ответить 
сообщение
Сообщение #4


Гость






Тема перенесена в "Задачи"... Вот решение:
type
PArrInt = ^ArrInt;
ArrInt = Array[0 .. Pred(maxInt Div SizeOf(LongInt))] Of LongInt;

Function PiTest(szPi: PChar; Const nDigits: Integer): Boolean;
Var
i, c, f: LongInt;
d, e, b, g, r: LongInt;
a: PArrInt;
szCurDigit: Integer;

_s: String;
Begin
PiTest := False;

If nDigits > 54900 Then Begin
WriteLn('Error in PiTest(): n must be <= 54900'); Exit
End;

szCurDigit := 0;
d := 0;
c := (nDigits div 4 + 1) * 14;
GetMem(a, c * SizeOf(LongInt));
f := 10000;

For i := 0 To Pred( c ) Do
a^[ i ] := 20000000;

Dec(c, 14); b := c;
While b > 0 Do Begin

e := d mod f; d := e;
Dec(b);
While b > 0 Do Begin
d := d * b + a^[ b ];
g := (b shl 1) - 1;
a^[ b ] := (d mod g) * f;
d := d div g;
Dec(b)
End;

r := e + d div f;

If r < 1000 Then Begin

If r > 99 Then Begin
szPi[szCurDigit] := '0'; Inc(szCurDigit);
End
Else
If r > 9 Then Begin
szPi[szCurDigit] := '0'; Inc(szCurDigit);
szPi[szCurDigit] := '0'; Inc(szCurDigit);
End
Else Begin
szPi[szCurDigit] := '0'; Inc(szCurDigit);
szPi[szCurDigit] := '0'; Inc(szCurDigit);
szPi[szCurDigit] := '0'; Inc(szCurDigit);
End;
End;

Str(r, _s);
Move(_s[1], szPi[szCurDigit], Length(_s));
Inc(szCurDigit, Length(_s));

Dec(c, 14); b := c;
End;

FreeMem(a, c * SizeOf(LongInt));
szPi[szCurDigit] := #0;

PiTest := True
End;

Const
nDigits = 100;

var
szPi: PChar;
Begin
GetMem(szPi, nDigits+1);
WriteLn('PI Computation');
PiTest(szPi, nDigits);
WriteLn('The ', nDigits, ' of Pi are: '#13#10, szPi);
FreeMem(szPi, nDigits+1);
End.


Проверить выдаваемые программой значения можешь здесь:
Пи-Club или Клуб фанатиков числа Пи
 К началу страницы 
+ Ответить 
сообщение
Сообщение #5





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

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


2 volvo
Нет ли ссылки с описанием этого алгоритма пошагово. Нам тоже задали эту задачу, но надо не только представить программу, но описать как она работает.
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #6


Гость






Нет, во всяком случае у меня...

Эта процедура была выдрана мной из одного из BenchMark-ов несколько месяцев назад.
 К началу страницы 
+ Ответить 

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

 




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