Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Отчет по лабораторным работам.doc
Скачиваний:
1
Добавлен:
01.07.2025
Размер:
449.02 Кб
Скачать

Приложение 4

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.

5