Program v Delphi na výpočet čísla Pi

Delphi & Pascal (česká wiki)
Přejít na: navigace, hledání
Kategória: KMP (Klub mladých programátorov)
pi_optimal.jpgAutor: Dalibor Martišek
Program: Pi_efektivne_unit.pas
Súbor exe: Pi_efektivne_pro.exe
Potrebné: Pi_efektivne.zip

Program v Delphi na výpočet čísla Pi. Ukážka 4 algoritmov optimálnych pre počítačové spracovanie.
{ Pi_Efektivne_Pro.pas               Copyright (c) Dalibor Martisek }
{ Ukazka 4 algoritmov optimalnych pre pocitacove spracovanie.       }
{                                                                   }
{ Datum:28.07.2006                             http://www.trsek.com }
 
unit Pi_Efektivne_Unit;
 
interface
 
uses
  Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
  StdCtrls, ExtCtrls;
 
type
  TForm1 = class(TForm)
    Label1: TLabel;
    EditK: TEdit;
    Edit1: TEdit;
    Edit2: TEdit;
    Button3: TButton;
    Edit3: TEdit;
    Label41: TLabel;
    EditPi: TEdit;
    Edit4: TEdit;
    Image1: TImage;
    Image2: TImage;
    Image3: TImage;
    Image4: TImage;
    Image5: TImage;
    Image6: TImage;
    Image7: TImage;
    Image8: TImage;
    EditS1: TEdit;
    EditS2: TEdit;
    EditS3: TEdit;
    EditS4: TEdit;
    Button1: TButton;
    procedure Sumy(Sender: TObject);
    procedure Finish(Sender: TObject);
  private
    { Private declarations }
  public
    { Public declarations }
  end;
 
var
  Form1: TForm1;
 
implementation
 
{$R *.DFM}
 
procedure TForm1.Sumy(Sender: TObject);
var k,n,ErrorReport  :Integer;
    Jmen1,Jmen2,Suma :Extended;
    PrevodRetezec    :String;
begin
  Suma:=0;
  Val(EditK.Text,k,ErrorReport);
  For n:=0 to k do
    if odd(n) then Suma:=Suma-1/(2*n+1)
              else Suma:=Suma+1/(2*n+1);
  Str(Suma:18:17,PrevodRetezec);
  Edit1.Text:=PrevodRetezec;
  Suma:=4*Suma;
  Str(Suma:18:17,PrevodRetezec);
  EditS1.Text:=PrevodRetezec;
 
  Suma:=0;
  for n:=1 to k do
  if odd(n) then Suma:=Suma+1/(n*n)
            else Suma:=Suma-1/(n*n);
  Str(Suma:18:17,PrevodRetezec);
  Edit2.Text:=PrevodRetezec;
  Suma:=sqrt(12*Suma);
  Str(Suma:18:17,PrevodRetezec);
  EditS2.Text:=PrevodRetezec;
 
  Suma:=0;
  for n:=1 to k do
  if odd(n) then Suma:=Suma+1/(2*n-1)/(2*n-1)/(2*n-1)
            else Suma:=Suma-1/(2*n-1)/(2*n-1)/(2*n-1);
  Str(Suma:18:17,PrevodRetezec);
  Edit3.Text:=PrevodRetezec;
  Suma:=exp(1/3*ln(32*Suma));
  Str(Suma:18:17,PrevodRetezec);
  EditS3.Text:=PrevodRetezec;
 
  Jmen1:=5;Jmen2:=239;
  Suma:=4/Jmen1-1/Jmen2;
  for n:=2 to k do
  begin
  Jmen1:=Jmen1*5*5;Jmen2:=Jmen2*239*239;
  if odd(n) then Suma:=Suma+1/(2*n-1)*(4/Jmen1-1/Jmen2)
            else Suma:=Suma-1/(2*n-1)*(4/Jmen1-1/Jmen2);
  end;
  Str(Suma:18:17,PrevodRetezec);
  Edit4.Text:=PrevodRetezec;
  Suma:=4*Suma;
  Str(Suma:18:17,PrevodRetezec);
  EditS4.Text:=PrevodRetezec;
 
  Str(pi:18:17,PrevodRetezec);
  EditPi.Text:=PrevodRetezec;
end;
 
procedure TForm1.Finish(Sender: TObject);
begin
   Close
end;
 
end.