IPB
ЛогинПароль:

> ВНИМАНИЕ!

Прежде чем задать вопрос, смотрите FAQ.
Рекомендуем загрузить DRKB.

Наладить общение поможет, если вы подпишитесь по почте на новые темы в этом форуме.

 
 Ответить  Открыть новую тему 
> Решётка Кардано, Проблема с выводом
сообщение
Сообщение #1


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Вот решил сделать в 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 -


Прикрепленные файлы
Прикрепленный файл  Cardano.rar ( 6.04 килобайт ) Кол-во скачиваний: 290
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 
сообщение
Сообщение #2


Гость






Цитата
Чувствуется где-то ошибка в выводе
dry.gif

Ошибок в выводе нет. Ошибка у тебя в голове. С какого перепуга ты обрезаешь входную строку, ограничивая ее 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, если что). Что обрезается? Какая не та кодировка?
 К началу страницы 
+ Ответить 
сообщение
Сообщение #3


Бывалый
***

Группа: Пользователи
Сообщений: 178
Пол: Мужской

Репутация: -  0  +


Спасибо большое smile.gif
 Оффлайн  Профиль  PM 
 К началу страницы 
+ Ответить 

 Ответить  Открыть новую тему 
1 чел. читают эту тему (гостей: 1, скрытых пользователей: 0)
Пользователей: 0

 





- Текстовая версия 19.04.2024 17:34
500Gb HDD, 6Gb RAM, 2 Cores, 7 EUR в месяц — такие хостинги правда бывают
Связь с администрацией: bu_gen в домене octagram.name