Приложение 4. Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
unit Unit2; interface uses Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms, Dialogs, StdCtrls, math; type TForm1 = class(TForm) Edit_G: TEdit; Edit_X: TEdit; Label2: TLabel; Label3: TLabel; Button1: TButton; Label4: TLabel; ComboBox1: TComboBox; Label5: TLabel; Edit_K: TEdit; Label6: TLabel; Edit_M: TEdit; Edit_a_b: TEdit; Button3: TButton; Edit_mes: TEdit; Label1: TLabel; Label7: TLabel; procedure Button1Click(Sender: TObject); procedure FormCreate(Sender: TObject); procedure Button2Click(Sender: TObject); function pr_mass (g,h:integer): boolean; procedure Button3Click(Sender: TObject); procedure Edit_Change(Sender: TObject; var knopka: Char); private { Private declarations } public { Public declarations } end; var Form1: TForm1; simple: array of integer; G, X, P: integer; G1, X1, P1: extended; Y, Y1: integer; a, a1, b, b1: integer; K: integer; M: integer; implementation {$R *.dfm} procedure TForm1.Button1Click(Sender: TObject); begin P:= strtoint(combobox1.Text); G:= strtoint(edit_G.Text); X:= strtoint(edit_X.Text); if (combobox1.Text = '') or (edit_G.Text = '') or (edit_X.Text = '') then begin showmessage('Ни одно поле не может быть пустым'); exit; end; if (G >= P) or (G = 0) then begin showmessage('G должно быть меньше P и больше 0'); edit_G.Text:= '0'; exit; end; if (X >= P) or (X = 0) then begin showmessage('X должно быть меньше P и больше 0'); edit_X.Text:= '0'; exit; end; Y1:= round(power(G,X)); Y:= Y1 mod P; K:= strtoint(edit_K.Text); if (K >= (P-1)) or (K < 0) then begin showmessage ('K должно быть меньше P-1 и больше 0'); exit; end; if ((P-1) mod K = 0) then begin showmessage('K не является простым по отношению к P-1. Выберете другое K.'); exit; end; a1:= round(power(G,K)); a:= a1 mod P; M:= strtoint(edit_M.text); b1:= round(power(Y,K)*M); b:= b1 mod P; edit_a_b.Text:= '(' + inttostr(a) + ', ' + inttostr(b) + ')'; button3.Enabled:= true; end; procedure TForm1.FormCreate(Sender: TObject); var r: boolean; nomer, i: integer; begin button3.Enabled:= false; setlength(simple, 1000); simple[0]:= 3; form1.combobox1.Items[0]:= inttostr(simple[0]); nomer:= 1; for i:= 4 to 1024 do begin r:= pr_mass(i, nomer); if r = true then begin simple[nomer]:= i; form1.ComboBox1.AddItem(inttostr(simple[nomer]),sender); r:= false; inc(nomer); end else continue; end;end; function tform1.pr_mass (g,h:integer): boolean; var i: integer; D: boolean; begin if g mod 2 = 0 then begin pr_mass:= false; exit; end; D:= true;
for i:= 1 to h-1 do begin if (g mod simple[i]) = 0 then begin D:= false; break; end; end; if D = false then pr_mass:= false else pr_mass:= true; end; procedure TForm1.Button2Click(Sender: TObject); var qwe: string; begin qwe:= combobox1.Text; showmessage(qwe); end; procedure TForm1.Button3Click(Sender: TObject); var mes: integer; mes1: extended; begin mes1:= power(a,X); mes:= round(b/mes1) mod P; edit_mes.Text:= floattostr(mes); while mes1 < 1 do begin mes1:= mes1*10; end; button3.Enabled:= false; end procedure TForm1.Edit_Change(Sender: TObject; var knopka: Char); begin case knopka of '0'..'9', #8: else knopka:= #0; end;end;end.
|