![]() |
Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.
![]() |
cooler |
![]()
Сообщение
#1
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 178 Пол: Мужской Репутация: ![]() ![]() ![]() |
Вот решил сделать в Delphi
Но почему-то выводит неправильный результат в форму, либо обрезает, либо выдаёт в не той кодировке Чувствуется где-то ошибка в выводе Подскажите 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
for i := 1 to n do mx[i]:=#0;
{ Заполнение матрицы mx строками по N пробелов }
for i := 1 to n do
for j := 1 to n do mx[i] := mx[i]+ '_';
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
memo1.Lines.Clear;
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.
Сообщение отредактировано: volvo - 5.04.2010 15:32 Прикрепленные файлы ![]() |
![]() ![]() |
volvo |
![]()
Сообщение
#2
|
Гость ![]() |
Цитата Чувствуется где-то ошибка в выводе ![]() Ошибок в выводе нет. Ошибка у тебя в голове. С какого перепуга ты обрезаешь входную строку, ограничивая ее 24 символами? Ты у меня на сайте это ограничение видел? Нет. Вот и не ограничивай. А то перековеркают все что можно, а потом им "в выводе проблема". Это было первое. А второе - Дельфи и Паскаль - это вообще-то разные языки, тебе не кажется? В Паскале строка string[n] - это одно, в Дельфи - другое (не надо путать String, ShortString и AnsiString - это приводит вот к таким постам, как твой). В Дельфи 2009/2010 код вообще не компилируется, чтоб работало - надо сделать так: type
sType = String; // [n];
...
procedure EncodeText(const s: string;
const mask: matrix; var mx: matrix);
var
i, j, count: integer;
masked: matrix;
begin
for i := 1 to n do begin
SetLength(mx[i], n);
mx[i] := '';
// mx[i]:=#0;
end;
...
, тогда программа запускается и выдает:![]() (Edit2.MaxLength сброшено в 0, если что). Что обрезается? Какая не та кодировка? |
cooler |
![]()
Сообщение
#3
|
![]() Бывалый ![]() ![]() ![]() Группа: Пользователи Сообщений: 178 Пол: Мужской Репутация: ![]() ![]() ![]() |
Спасибо большое
![]() |
![]() ![]() |
![]() |
Текстовая версия | 23.07.2025 14:18 |