R
rocketsolid
Здравствуйте! Делаю программу для шифрования текста по алгоритму решетки Кардано. Возникла проблема при выводе в memo, а именно в том что не все символы закодированного текста выводятся в корректной форме (вместо некоторых и там где ничего не должно быть выводится какая-то "кракозябра"). Помогите исправить.
а если у кого-нибудь есть уже готовая, то будет просто замечательно)
p.s. этаже программа в чистом паскале работает на ура
<div class="sp-wrap"><div class="sp-head-wrap"><div class="sp-head folded clickable"> Версия на Паскале</div></div><div class="sp-body"><div class="sp-content">
а если у кого-нибудь есть уже готовая, то будет просто замечательно)
p.s. этаже программа в чистом паскале работает на ура
Код:
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls;
type
TForm1 = class(TForm)
Button1: TButton;
Edit1: TEdit;
Memo1: TMemo;
Label5: TLabel;
Edit2: TEdit;
Label1: TLabel;
Label2: TLabel;
Button2: TButton;
Button3: TButton;
Button4: TButton;
Button5: TButton;
procedure Button1Click(Sender: TObject);
procedure Button2Click(Sender: TObject);
procedure Button3Click(Sender: TObject);
procedure Button4Click(Sender: TObject);
procedure Button5Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
implementation
uses Unit2, Unit3;
{$R *.dfm}
procedure TForm1.Button1Click(Sender: TObject);
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
mask: matrix = (
'x...x...',
'.x...x..',
'..x...x.',
'...x...x',
'..x...x.',
'...x....',
'x...x..x',
'..x..x..'
);
var
st:string;
encoded: matrix;
masked: matrix;
{ поворот матрицы }
procedure T(var res: matrix);
var
i, j: integer;
mx: matrix;
begin
mx := res;
for i := 1 to n do
for j := 1 to n do
res[j, n - i + 1] := mx[i, j];
end;
{ зашифровка текста }
procedure EncodeText(const s: string;
const mask: matrix; var mx: matrix);
var
i, j, count: integer;
masked: matrix;
begin
{ заполнение матрицы mx строками по N пробелов }
for i := 1 to n do
for j := 1 to n do mx[i] := mx[i] + #32;
masked := mask;
count := 1;
while count <= length(s) do begin
for i := 1 to n do
for j := 1 to n do
if masked[i, j] = 'x' then begin
mx[i][j] := s[count];
inc(count)
end;
T(masked);
end;
end;
{расшифровка текста}
function DecodeText(const mask, encoded: matrix): string;
var
s: string;
i, j, count: integer;
masked: matrix;
begin
masked := mask;
count := 0; s := '';
while length(s) < n*n do begin
for i := 1 to n do
for j := 1 to n do
if masked[i, j] = 'x' then s := s + encoded[i, j];
T(masked);
end;
DecodeText := s;
end;
var
i: integer;
begin
st:=edit2.text;
EncodeText(st, mask, encoded);
for i := 1 to 8 do begin
memo1.lines.add(encoded[i]);
end;
edit1.text:=DecodeText(mask, encoded);
end;
procedure TForm1.Button2Click(Sender: TObject);
begin
edit2.Text:='';
end;
procedure TForm1.Button3Click(Sender: TObject);
begin
form2.showmodal;
end;
procedure TForm1.Button4Click(Sender: TObject);
begin
form3.showmodal;
end;
procedure TForm1.Button5Click(Sender: TObject);
begin
memo1.Clear();
edit1.Text:='';
end;
end.
Код:
uses crt;
const
n = 8;
type
sType = string[n];
matrix = array[1 .. n] of sType;
const
mask: matrix = (
'x...x...',
'.x...x..',
'..x...x.',
'...x...x',
'..x...x.',
'...x....',
'x...x..x',
'..x..x..'
);
st: string =
'gorogckayamynicypalnyabolnica';
var
encoded: matrix;
masked: matrix;
{ Процедура поворота матрицы }
procedure T(var res: matrix);
var
i, j: integer;
mx: matrix;
begin
mx := res;
for i := 1 to n do
for j := 1 to n do
res[j, n - i + 1] := mx[i, j];
end;
{ Зашифровка текста }
procedure EncodeText(const s: string;
const mask: matrix; var mx: matrix);
var
i, j, count: integer;
masked: matrix;
begin
{ Заполнение матрицы mx строками по N пробелов }
for i := 1 to n do
for j := 1 to n do mx[i] := mx[i] + #32;
masked := mask;
count := 1;
while count <= length(s) do begin
for i := 1 to n do
for j := 1 to n do
if masked[i, j] = 'x' then begin
mx[i][j] := s[count];
inc(count)
end;
T(masked);
end;
end;
{ Расшифровка текста }
function DecodeText(const mask, encoded: matrix): string;
var
s: string;
i, j, count: integer;
masked: matrix;
begin
masked := mask;
count := 0; s := '';
while length(s) < n*n do begin
for i := 1 to n do
for j := 1 to n do
if masked[i, j] = 'x' then s := s + encoded[i, j];
T(masked);
end;
DecodeText := s;
end;
var
i: integer;
begin
clrscr;
EncodeText(st, mask, encoded);
writeln('encoded text: ');
for i := 1 to n do begin
writeln(encoded[i]);
end;
writeln(DecodeText(mask, encoded));
readln;
end.