Advertisement
Guest User

delphi

a guest
Oct 23rd, 2014
143
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.59 KB | None | 0 0
  1. unit LiczbyFermataSC;
  2.  
  3. interface
  4.  
  5. uses
  6. Winapi.Windows, Winapi.Messages, System.SysUtils, System.Variants, System.Classes, Vcl.Graphics, System.Math,
  7. Vcl.Controls, Vcl.Forms, Vcl.Dialogs, Vcl.StdCtrls;
  8.  
  9. type
  10. TForm1 = class(TForm)
  11. Label1: TLabel;
  12. Button1: TButton;
  13. Edit1: TEdit;
  14. ListBox1: TListBox;
  15. Label2: TLabel;
  16. Edit2: TEdit;
  17. procedure Button1Click(Sender: TObject);
  18. private
  19. { Private declarations }
  20. public
  21. { Public declarations }
  22. end;
  23.  
  24. var
  25. Form1: TForm1;
  26.  
  27. implementation
  28.  
  29. {$R *.dfm}
  30.  
  31. {13. Napisz program znajdujący liczby pierwsze Fermata w
  32. zadanym przedziale [1, max]. Liczbą pierwszą Fermata nazywamy
  33. liczbę pierwszą x, którą można przedstawić w postaci:
  34. x=2^(2^n)+1 (n=1,2,3,...).
  35. Początkowe liczby pierwsze Fermata: 3, 5, 17, 257, ...}
  36.  
  37. procedure TForm1.Button1Click(Sender: TObject);
  38. var
  39. Max,I: Integer;
  40. Liczba, Licznik: Extended;
  41. CzyPierwsza, Error: Boolean;
  42. start,stop:TDateTime;
  43. h,m,s,ms:word;
  44. begin
  45. ListBox1.Clear;
  46. //Obsługa wyjątków************************************************************
  47. Error:=false;
  48. try
  49. Max:=StrToInt(Edit1.Text);
  50. except
  51. On EConvertError do
  52. begin;
  53. Error:=true;
  54. showmessage('Błąd! Wartość maksymalna przedziału powinna być liczbą całkowitą');
  55. end;
  56. end;
  57. if Max<1 then
  58. begin;
  59. Error:=true;
  60. showmessage('Błąd! Należy podać liczbę większą od zera');
  61. end;
  62. //****************************************************************************
  63. //Obliczanie Liczb Fermata****************************************************
  64. if Error=false then
  65. begin;
  66. start:=time;
  67. try;
  68. for I := 1 to Max do
  69. begin;
  70. Liczba:=Power(2,Power(2,I))+1;
  71. //Sprawdzenie czy obliczona liczba jest liczbą pierwszą*****************
  72. CzyPierwsza:=false;
  73. Licznik:=2;
  74. while Licznik<sqrt(Liczba) do
  75. begin;
  76. if frac(Liczba/Licznik)=0 then
  77. begin;
  78. CzyPierwsza:=true;
  79. Break;
  80. end;
  81. Licznik:=Licznik+1;
  82. end;
  83. if CzyPierwsza=false then ListBox1.Items.Add(FloatToStr(Liczba));
  84. end;
  85. //Oliczanie czasu*********************************************************
  86. stop:=time;
  87. DecodeTime(stop-start,h,m,s,ms);
  88. Edit2.Text:=inttostr(s)+' s '+inttostr(ms)+' ms';
  89. except
  90. On E : EOverflow do
  91. begin;
  92. showmessage('Błąd! Zbyt duża wartość przedziału dla operacji na liczbach zmiennoprzecinkowych');
  93. end;
  94. end;
  95. end;
  96. end;
  97. end.
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement