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

Приложение 1

Система перестановок

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls, ComCtrls, Menus;

type

TForm1 = class(TForm)

real_str: TEdit;

Button1: TButton;

Label1: TLabel;

Label2: TLabel;

Label3: TLabel;

Button2: TButton;

smeshch: TEdit;

Label4: TLabel;

Memo1: TMemo;

decr_str: TEdit;

procedure Button1Click(Sender: TObject);

procedure smeshchChange(Sender: TObject; var knopka: Char);

procedure Button2Click(Sender: TObject);

procedure FormActivate(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

dlina: integer;

implementation

{$R *.dfm}

procedur TForm1.Button1Click(Sender: TObject); //telo procedury

var //obъyavlenie peremennyh

stroka: string;

massiv: array of integer;

i: integer;

begin

memo1.lines.Clear; //ochistka polya dlya zashifrovannoi stroki

stroka := real_str.text; //poluchenie real'noi sroki

dlina := length(stroka); //uznati dlinu stroki i zapisat' v dlina

setlength(stroka, dlina+1); //zadat' dlinu

setlength(massiv, dlina+1);

if real_str.text = '' then //proverka na pustotu polya. esli pusto, to soobshenie, focus na obъekte i vihod iz procedury

begin

ShowMessage('Введите шифруемую строку');

real_str.SetFocus;

exit; end;

if smeshch.text = '' then // to zhe samoe

begin

button2.Enabled := false;

ShowMessage('Введите смещение');

smeshch.SetFocus;

exit; end;

if StrToInt(smeshch.text) > 256 then //potomu chto vsego byvaet 256 ASCII simvolov

begin

button2.Enabled := false;

showmessage('Смещение не может быть больше 256');

smeshch.text := '0';

smeshch.SetFocus;

end

else begin

for i := 1 to dlina do

begin

massiv[i] := ord(stroka[i]) + StrToInt(smeshch.text);

if massiv[i] > 255 then

massiv[i] := massiv[i] mod 256 // ostatok ot deleniya na 256

end; end;

for i := 1 to dlina do

begin

memo1.Lines[0] := memo1.Lines[0] + chr(massiv[i]);

end;

button2.Enabled := true;

button2.SetFocus;

decr_str.Text := '';

end;

procedure TForm1.smeshchChange(Sender: TObject; var knopka: Char); //telo pocedury. zapreshaet vvod lyubyj simvolov, krome 0-9

begin

case knopka of

'0'..'9', #8:

else knopka := #0;

end;end;

procedure TForm1.Button2Click(Sender: TObject);

var

decr_sym: char;

i: integer;

begin

button2.Enabled := false;

decr_str.Text := '';

for i := 1 to dlina do

begin

if (ord(memo1.Lines[0][i]) - StrToInt(smeshch.text)) >= 0 then

begin

decr_sym := chr(ord(memo1.Lines[0][i]) - StrToInt(smeshch.text));

decr_str.Text := decr_str.Text + decr_sym;

end

else begin

decr_sym := chr(256 - (StrToInt(smeshch.Text) - ord(memo1.Lines[0][i])));

decr_str.Text := decr_str.Text + decr_sym;

end; end;end;

procedure TForm1.FormActivate(Sender: TObject);

begin

button2.Enabled := false;

real_str.SetFocus;

end;end.

Система магических квадратов

unit Unit1;

interface

uses

Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,

Dialogs, StdCtrls;

type

TForm1 = class(TForm)

Button1: TButton;

Edit1: TEdit;

Label1: TLabel;

Edit2: TEdit;

Label2: TLabel;

procedure Button1Click(Sender: TObject);

private

{ Private declarations }

public

{ Public declarations }

end;

var

Form1: TForm1;

implementation

{$R *.dfm}

pocedure TForm1.Button1Click(Sender: TObject);

var

i, j: integer;

str_1, str_2: string;

magic: array of integer;

begin

setlength(magic, 17);

magic[1] := 16;

magic[2] := 3;

magic[3] := 2;

magic[4] := 13;

magic[5] := 5;

magic[6] := 10;

magic[7] := 11;

magic[8] := 8;

magic[9] := 9;

magic[10] := 6;

magic[11] := 7;

magic[12] := 12;

magic[13] := 4;

magic[14] := 15;

magic[15] := 14;

magic[16] := 1;

for i := 1 to 4 do

begin

form1.Canvas.moveto(i*64, 0); // задаёт точку начала рисования

form1.Canvas.LineTo(i*64, clientwidth); // рисует линию

form1.canvas.moveto(0, i*64);

form1.canvas.lineto(clientheight, i*64)

canvas.Font.Size := 16;

canvas.TextOut((i-1)*64 + 20, 20, inttostr(magic[i])); // рисует текст

inc(j); end;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 20, 84, inttostr(magic[i + 4]));

end;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 20, 148, inttostr(magic[i + 8]));

end;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 20, 212, inttostr(magic[i + 12]));

end;

setlength(str_1, 17);

setlength(str_2, 17);

j := length(edit1.Text);

if j > 16 then

begin

showmessage('Текст не может быть больше 16 символов');

exit; end;

for i := 1 to j do

begin

str_1[i] := edit1.Text[i];

end;

for i := j + 1 to 16 do

begin

str_1[i] := '.';

end;

str_2[1] := str_1[16];

str_2[2] := str_1[3];

str_2[3] := str_1[2];

str_2[4] := str_1[13];

str_2[5] := str_1[5];

str_2[6] := str_1[10];

str_2[7] := str_1[11];

str_2[8] := str_1[8];

str_2[9] := str_1[9];

str_2[10] := str_1[6];

str_2[11] := str_1[7];

str_2[12] := str_1[12];

str_2[13] := str_1[4];

str_2[14] := str_1[15];

str_2[15] := str_1[14];

str_2[16] := str_1[1];

edit2.Text := str_2;

canvas.Font.Size := 10;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 50, 40, str_2[i]);

end;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 50, 104, str_2[i + 4]);

end;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 50, 168, str_2[i + 8]);

end;

for i := 1 to 4 do

begin

canvas.TextOut((i-1)*64 + 50, 232, str_2[i + 12]);

end;end;end.