Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 25.03.2011, 00:39   #1
mazaila
 
Регистрация: 25.03.2011
Сообщений: 7
Восклицание Число пи ...

Вот пытался перевестиhttp://ru.wikipedia.org/wiki/Алгоритм_Чудновского На язык паскаль ,но вместо числа пи у меня бог знает что ;
Может поможите мне разобраться с кодом ????


Код:
function ymnk(l:integer):integer;
var d,h:integer;
begin
if l=0 then ymnk:=0 else
if l=1 then ymnk:=-1 else
h:=-1;
for d:=1 to l do
h:=h*(-1);
ymnk:=h;

end;


function Factorial(n:word): integer;
var
  fact: integer;
begin
  fact := 1;
  if n=0 then exit;
  for n:=1 to n do
  fact := fact*n;
  Factorial := fact;
end;
var pi,s,n,g:extended; fak1,fak2,fak3,a,b,c,k:integer;

begin
for k:=0 to 10 do begin
a:=6*k;
b:=3*k;
c:=k;
fak1:=Factorial(a);
writeln('fak1:  ',fak1);
fak2:=Factorial(b);
writeln('fak:  ',fak2);
fak3:=Factorial(c);
writeln('fak:  ',fak3);

n:=ymnk(k)*(fak1)*(13591409+545140134*k);
writeln('^:  ',ymnk(k));
writeln('n:=',n);
g:=fak2*(exp(3*ln(fak3)))*exp((3/2+3*k)*ln(640320));
writeln('g:=',g);
s:=n/g;
writeln('s:=',s);
s:=s*12;
writeln('s:=',s);
pi:=1/s;
 writeln('pi',pi)

end;
writeln('pi-full:=',pi);
readln;
end.

___________
Код нужно оформлять по правилам:
тегом [CODE]..[/СODE] (это кнопочка с решёточкой #)
Не забывайте об этом!
Модератор.

Спс ...

Последний раз редактировалось mazaila; 25.03.2011 в 14:10.
mazaila вне форума Ответить с цитированием
Старый 25.03.2011, 00:39   #2
mazaila
 
Регистрация: 25.03.2011
Сообщений: 7
По умолчанию

Код небольшой поэтому без коментариев )))
mazaila вне форума Ответить с цитированием
Старый 25.03.2011, 03:26   #3
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Посидел и чего-то наскреб с инета
made in delphi
Код:
function Power(X, N : real) : extended;
var t : longint;
    r : real;
    isInteger : boolean;
begin
     if N = 0 then
     begin
          result := 1.0;
          exit;
     end;

     if X = 1.0 then
     begin
          result := 1.0;
          exit;
     end;

     if X = 0.0 then
     begin
          if N > 0.0 then
          begin
               result := 0.0;
               exit;
          end else raise EPowerException.Create('Результат - бесконечность');
     end;

     if (X > 0) then
     try
        result := exp(N * ln(X));
        exit;
     except
        raise EPowerException.Create('Результат - переполнение или потеря значимости');
     end;

{ X - отрицательный, но мы все еще можем вычислить результат, если n целое. }
{ пытаемся получить целую часть n с использованием типа longint, вычисление }
{ четности n не займет много времени }
     try
        t := trunc(n);
        if (n - t) = 0 then
           isInteger := true
        else
            isInteger := False;
     except
        { Лишний бит может вызвать переполнение или потерю значимости }
        r := int(n);
        if (n - r) = 0 then
        begin
             isInteger := true;
             if frac(r/2) = 0.5 then
                t := 1
             else
                t := 2;
        end else
            isInteger := False;
     end;

     if isInteger then
     begin
          {n целое}
          if odd(t) then
             {n нечетное}
             try
                result := -exp(N * ln(-X));
                exit;
             except
                raise EPowerException.Create('Результат - переполнение или потеря значимости');
             end else
                {n четное}
                try
                   result := exp(N * ln(-X));
                   exit;
                except
                   raise EPowerException.Create('Результат - переполнение или потеря значимости');
                end;
     end else
         raise EPowerException.Create('Результат невычисляем');
end;

function Factorial(n:integer): extended;
var fact: extended;
    i:integer;
begin
     fact:=1;
     result := 1;
     if n=0 then exit;
     for i:=1 to n do
     fact := fact*i;
     result := fact;
end;

function GetPi(tochnost : integer) : extended;
var tmp : extended;
    i : integer;
begin
     tmp:=0;
     for i:=0 to tochnost do
          tmp:=tmp+(power((-1),i)*factorial(6*i)*(13591409 + 545140134*i))/(factorial(3*i)*power(factorial(i),3)*power(640320,3*i+3/2));
     tmp := 1/(tmp * 12);
     result:=tmp;
end;
хрень какая то получилась... до tochnost=166 постоянно выдает 3.14159265358979, дальше переполнение.

mazaila, протестил твой код - ругается на "деление на ноль"
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.

Последний раз редактировалось Sparkman; 25.03.2011 в 04:14.
Sparkman вне форума Ответить с цитированием
Старый 25.03.2011, 07:27   #4
Johnson
кривокодер ;)
Форумчанин
 
Аватар для Johnson
 
Регистрация: 20.06.2008
Сообщений: 707
По умолчанию

//hint Power(N,M); это стандартная процедура модуля Math;
Позволяет N возвести в степень M
"А как написать праграму?, "ришыти задачьку очинь нада" ©с форума. Жить становится интереснее, жить становится веселее...
{Быть или не быть} {Неуспешный суицид}
Johnson вне форума Ответить с цитированием
Старый 25.03.2011, 08:06   #5
_-Re@l-_
C++, Java
Старожил
 
Аватар для _-Re@l-_
 
Регистрация: 10.04.2010
Сообщений: 2,665
По умолчанию

Sparkman, ни хрена себе...
А чё, никто не помнит, что в Паскале есть стандартная переменная Pi?
Так-то вот...
Код:
Begin
        Writeln(Pi);
        Readln;
End.
_-Re@l-_ вне форума Ответить с цитированием
Старый 25.03.2011, 13:55   #6
mazaila
 
Регистрация: 25.03.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от _-Re@l-_ Посмотреть сообщение
Sparkman, ни хрена себе...
А чё, никто не помнит, что в Паскале есть стандартная переменная Pi?
Так-то вот...
Код:
Begin
        Writeln(Pi);
        Readln;
End.
Не, не, не мне надо чтобы теоритически можно было все число пи вычеслить ))))
mazaila вне форума Ответить с цитированием
Старый 25.03.2011, 14:01   #7
mazaila
 
Регистрация: 25.03.2011
Сообщений: 7
По умолчанию

Цитата:
Сообщение от Sparkman Посмотреть сообщение
Посидел и чего-то наскреб с инета
made in delphi
Код:
function Power(X, N : real) : extended;
var t : longint;
    r : real;
    isInteger : boolean;
begin
     if N = 0 then
     begin
          result := 1.0;
          exit;
     end;

     if X = 1.0 then
     begin
          result := 1.0;
          exit;
     end;

     if X = 0.0 then
     begin
          if N > 0.0 then
          begin
               result := 0.0;
               exit;
          end else raise EPowerException.Create('Результат - бесконечность');
     end;

     if (X > 0) then
     try
        result := exp(N * ln(X));
        exit;
     except
        raise EPowerException.Create('Результат - переполнение или потеря значимости');
     end;

{ X - отрицательный, но мы все еще можем вычислить результат, если n целое. }
{ пытаемся получить целую часть n с использованием типа longint, вычисление }
{ четности n не займет много времени }
     try
        t := trunc(n);
        if (n - t) = 0 then
           isInteger := true
        else
            isInteger := False;
     except
        { Лишний бит может вызвать переполнение или потерю значимости }
        r := int(n);
        if (n - r) = 0 then
        begin
             isInteger := true;
             if frac(r/2) = 0.5 then
                t := 1
             else
                t := 2;
        end else
            isInteger := False;
     end;

     if isInteger then
     begin
          {n целое}
          if odd(t) then
             {n нечетное}
             try
                result := -exp(N * ln(-X));
                exit;
             except
                raise EPowerException.Create('Результат - переполнение или потеря значимости');
             end else
                {n четное}
                try
                   result := exp(N * ln(-X));
                   exit;
                except
                   raise EPowerException.Create('Результат - переполнение или потеря значимости');
                end;
     end else
         raise EPowerException.Create('Результат невычисляем');
end;

function Factorial(n:integer): extended;
var fact: extended;
    i:integer;
begin
     fact:=1;
     result := 1;
     if n=0 then exit;
     for i:=1 to n do
     fact := fact*i;
     result := fact;
end;

function GetPi(tochnost : integer) : extended;
var tmp : extended;
    i : integer;
begin
     tmp:=0;
     for i:=0 to tochnost do
          tmp:=tmp+(power((-1),i)*factorial(6*i)*(13591409 + 545140134*i))/(factorial(3*i)*power(factorial(i),3)*power(640320,3*i+3/2));
     tmp := 1/(tmp * 12);
     result:=tmp;
end;
хрень какая то получилась... до tochnost=166 постоянно выдает 3.14159265358979, дальше переполнение.

mazaila, протестил твой код - ругается на "деление на ноль"
А у меня 'Работает'...
mazaila вне форума Ответить с цитированием
Старый 25.03.2011, 17:27   #8
Anatole
Форумчанин
 
Аватар для Anatole
 
Регистрация: 07.04.2009
Сообщений: 245
По умолчанию

Цитата:
Не, не, не мне надо чтобы теоритически можно было все число пи вычеслить ))))
Теоретически число пи бесконечно. поэтому "всё" не вычислишь даже теоретически
Всякое безобразие должно быть единообразным. Тогда это называется порядком.
Anatole вне форума Ответить с цитированием
Старый 25.03.2011, 17:38   #9
mazaila
 
Регистрация: 25.03.2011
Сообщений: 7
По умолчанию

[QUOTE=Anatole;763815]Теоретически число пи бесконечно. поэтому "всё" вычислишь даже теоретически[/QUOT

Нет нечего бесконечного )))
mazaila вне форума Ответить с цитированием
Старый 28.03.2011, 03:08   #10
Sparkman
220400
Форумчанин
 
Аватар для Sparkman
 
Регистрация: 21.05.2010
Сообщений: 726
По умолчанию

Цитата:
Сообщение от mazaila Посмотреть сообщение
Нет нечего бесконечного )))
Тогда назовите мне, пожалуйста, самое максимальное число
Cерьёзной помощи не ждите - помогаю в перерывах на "перекур".
Не существует ничего невозможного для человека, который не собирается ничего делать сам.
Не учите человека, если вы не его учитель.
Sparkman вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Дано вещественное число X и целое число N (> 0). Вывести X – X3/3! + X5/5! – ... + (–1)NX2N+1/(2N+1)!? Ахилес Помощь студентам 2 20.05.2010 20:34
Написать программу, которая за меньшее число ходов отгадывает загаданное число gomz007 Помощь студентам 16 08.11.2009 12:57
Вывести число, предшествующее первому отрицательному и число, следующее за последним отрицательным Rid Паскаль, Turbo Pascal, PascalABC.NET 4 22.12.2008 16:50
Найти и вывести все слова,у котоpых число гласных букв пpевышает число согласных. Briz Помощь студентам 2 11.05.2008 00:56
Ввести число N и определить делится ли оно без остатка на число M (VBA) Ivanich Microsoft Office Excel 7 24.04.2008 19:43