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

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

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

> Нахождение числа ПИ, Найти 100 верных знаков
Орхидея
сообщение 30.09.2006 19:07
Сообщение #1





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

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


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


Гость






Тема перенесена в "Задачи"... Вот решение:
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 или Клуб фанатиков числа Пи
 К началу страницы 
+ Ответить 

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


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

 



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