![]() |
| ||
|
|
Новости |
Поиск |
FAQ |
Статьи |
Книги |
Новости VCL
| | Форумы ЧАТ |
Орешник |
|
| |||
| |||
« предыдущая ветвь | форум | следующая ветвь »
Нужно сделать трассировку [D7]
Рома © (2012-01-16 23:28:00)Люди помогите сделать трассировку этой программы
unit Main;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs, StdCtrls, ComCtrls, Grids, XPMan, Math;
type
TMainForm = class(TForm)
XSizeEdit: TEdit;
StatusBar: TStatusBar;
SizeLabel: TLabel;
TextLabel: TLabel;
TextEdit: TEdit;
Cliche: TStringGrid;
Table: TStringGrid;
XUpDown: TUpDown;
XPManifest: TXPManifest;
CryptButton: TButton;
DecryptButton: TButton;
ClicheLabel: TLabel;
LatticeLabel: TLabel;
CloseButton: TButton;
DecryptText: TEdit;
ResetButton: TButton;
XLabel: TLabel;
YSizeEdit: TEdit;
YUpDown: TUpDown;
MaxLabel: TLabel;
Speed: TTrackBar;
DecryptLabel: TLabel;
SpeedLabel: TLabel;
procedure XUpDownClick(Sender: TObject; Button: TUDBtnType);
procedure CloseButtonClick(Sender: TObject);
procedure CryptButtonClick(Sender: TObject);
procedure ResetButtonClick(Sender: TObject);
procedure ClicheDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure FormCreate(Sender: TObject);
procedure TableDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
procedure DecryptButtonClick(Sender: TObject);
end;
var
MainForm: TMainForm;
ClicheMatrix:array of array of Boolean;
TableMatrix:array of array of Char;
xSize,ySize,AnimatePos,ClichePosX:Byte;
implementation
{$R *.dfm}
procedure TMainForm.CloseButtonClick(Sender: TObject);
begin
Close;
end;
procedure TMainForm.FormCreate(Sender: TObject);
begin
ResetButtonClick(nil);
end;
procedure TMainForm.XUpDownClick(Sender: TObject; Button: TUDBtnType);
begin
ResetButtonClick(nil);
end;
procedure TMainForm.ResetButtonClick(Sender: TObject);
var
i,j:Integer;
begin
AnimatePos:=0;
ClichePosX:=0;
xSize:=XUpDown.Position;
ySize:=YUpDown.Position;
Cliche.ColCount:=xSize;
Cliche.RowCount:=ySize;
Table.ColCount:=xSize;
Table.RowCount:=ySize;
MaxLabel.Caption:='Максимум '+IntToStr(xSize*ySize)+' символов, всего '+IntToStr(Length(TextEdit.Text))+' символов';
SetLength(ClicheMatrix,xSize);
SetLength(TableMatrix,xSize);
for i:=0 to xSize-1 do
begin
SetLength(ClicheMatrix[i],ySize);
SetLength(TableMatrix[i],ySize);
for j:=0 to ySize-1 do
begin
ClicheMatrix[i][j]:=False;
TableMatrix[i][j]:=#0;
end;
end;
DecryptText.Text:='';
Cliche.Repaint;
Table.Repaint;
end;
procedure GetCoords(Position,MaxX,MaxY,x,y:Integer;var dx,dy:Integer);
begin
case Position of
1:begin
dx:=x;
dy:=y;
end;
2:begin
dx:=x;
dy:=MaxY-y-1;
end;
3:begin
dx:=MaxX-x-1;
dy:=y;
end;
4:begin
dx:=MaxX-x-1;
dy:=MaxY-y-1;
end;
end;
end;
procedure TMainForm.CryptButtonClick(Sender: TObject);
var
i,a,m,c,x,y,dx,dy:Integer;
Text:String;
b:Boolean;
Coords:array of TPoint;
t:TPoint;
begin
ResetButtonClick(nil);
CryptButton.Enabled:=False;
Text:=TextEdit.Text;
m:=Length(Text);
if m>xSize*ySize then
begin
MessageBox(Handle,'Слишком длинный текст - увеличьте матрицу!','Ошибка',MB_ICONWARNING);
CryptButton.Enabled:=True;
Exit;
end;
a:=Ceil(m/4);
for i:=1 to a*4-m do Text:=Text+' ';
c:=0;
repeat
Randomize;
x:=Random(xSize);
y:=Random(ySize);
b:=True;
for i:=1 to 4 do
begin
GetCoords(i,xSize,ySize,x,y,dx,dy);
if ClicheMatrix[dx][dy] then
begin
b:=False;
Break
end;
end;
if b then
begin
ClicheMatrix[x][y]:=True;
Inc(c);
end;
until c=a;
Cliche.Repaint;
for i:=1 to 4 do
begin
SetLength(Coords,a);
c:=0;
for y:=0 to ySize-1 do
for x:=0 to xSize-1 do if (c<a) and ClicheMatrix[x][y] then
begin
GetCoords(i,xSize,ySize,x,y,dx,dy);
Coords[c].X:=dx;
Coords[c].Y:=dy;
Inc(c);
end;
for x:=1 to a-1 do
for y:=a-1 downto x do
if (Coords[y-1].Y>Coords[y].Y) or ((Coords[y-1].Y=Coords[y].Y) and (Coords[y-1].X>Coords[y].X)) then
begin
t:=Coords[y-1];
Coords[y-1]:=Coords[y];
Coords[y]:=t;
end;
for x:=0 to a-1 do TableMatrix[Coords[x].X][Coords[x].Y]:=Text[a*(i-1)+x+1];
end;
for y:=0 to ySize-1 do
for x:=0 to xSize-1 do if TableMatrix[x][y]=#0 then
begin
Randomize;
c:=192+Random(65);
if c=256 then c:=32;
TableMatrix[x][y]:=Char(c);
end;
Table.Repaint;
CryptButton.Enabled:=True;
end;
procedure TMainForm.ClicheDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Color:TColor;
ShiftX:Integer;
begin
Color:=clBlack;
if Length(ClicheMatrix)>0 then
begin
ShiftX:=ACol-ClichePosX;
if ((ShiftX>=0) and ClicheMatrix[ShiftX][ARow]) or (ClichePosX>ACol) then Color:=clWhite;
end;
Cliche.Canvas.Brush.Color:=Color;
Cliche.Canvas.FillRect(Rect);
end;
procedure TMainForm.TableDrawCell(Sender: TObject; ACol, ARow: Integer;
Rect: TRect; State: TGridDrawState);
var
Color:TColor;
c:Char;
s:array[0..1] of Char;
dx,dy:Integer;
ShiftX:Integer;
begin
Color:=clWhite;
if AnimatePos>0 then
begin
Color:=clBlack;
ShiftX:=xSize-ClichePosX+ACol;
if (ShiftX>=0) and (ShiftX<xSize) then
begin
GetCoords(AnimatePos,xSize,ySize,ShiftX,ARow,dx,dy);
if ClicheMatrix[dx][dy] then Color:=clWhite;
end;
if (ACol>=ClichePosX) then Color:=clWhite;
end;
Table.Canvas.Brush.Color:=Color;
Table.Canvas.FillRect(Rect);
if Length(TableMatrix)>0 then
begin
c:=TableMatrix[ACol][ARow];
if c<>#0 then ExtTextOut(Table.Canvas.Handle,Rect.Left+(Rect.Right-Rect.Left-Table.Canvas.TextWidth(c)) div 2,Rect.Top+2,ETO_OPAQUE or ETO_CLIPPED,@Rect,StrPCopy(s,c),1,nil);
end;
end;
procedure TMainForm.DecryptButtonClick(Sender: TObject);
var
i,x,y,dx,dy:Integer;
begin
DecryptButton.Enabled:=False;
DecryptText.Text:='';
AnimatePos:=1;
for i:=0 to xSize do
begin
ClichePosX:=i;
Cliche.Repaint;
Table.Repaint;
Application.ProcessMessages;
Sleep(50*Speed.Position);
end;
for i:=1 to 4 do
begin
AnimatePos:=i;
Cliche.Repaint;
Table.Repaint;
Application.ProcessMessages;
Sleep(200*Speed.Position);
for y:=0 to ySize-1 do
for x:=0 to xSize-1 do
begin
GetCoords(i,xSize,ySize,x,y,dx,dy);
if ClicheMatrix[dx][dy] then
begin
DecryptText.Text:=DecryptText.Text+TableMatrix[x][y];
Application.ProcessMessages;
Sleep(5*Speed.Position);
end;
end;
Application.ProcessMessages;
Sleep(200*Speed.Position);
end;
DecryptText.Text:=Trim(DecryptText.Text);
AnimatePos:=1;
for i:=xSize downto 0 do
begin
ClichePosX:=i;
if ClichePosX=0 then AnimatePos:=0;
Cliche.Repaint;
Table.Repaint;
if ClichePosX>0 then
begin
Application.ProcessMessages;
Sleep(50*Speed.Position);
end;
end;
DecryptButton.Enabled:=True;
end;
end.
Anatoly Podgoretsky (2012-02-09 11:39:00) [1]Конечно будет, но ты готовься.
Сергей М. (2012-02-09 09:23:00) [2]
> Рома (08.02.12 22:52) [38]
А мы тебя уже отпели)
Зля что ли мы тут скупые мужские слезы роняли ?)
Нет уж, давай-ка собирай вещмешок и брей макушку)..
Рома (2012-02-08 22:52:00) [3]Ха... Прорвался!!! С армией потом разберусь, еще будет время...
Dimka Maslov (2012-01-17 12:00:00) [4]
> Омлет © (17.01.12 11:07) [32]
Физика — самая тёмная из наук. Всё время что-то ищут, денег просят, а толку — ноль. В лучшем случае через пару десятков лет. То ли дело юриспруденция, приносит быстрый и чистый доход практически сразу. Там даже можно свалить падение некоего предмета на провокацию империалистической военщины.
Inovet (2012-01-17 11:50:00) [5]> [35] Inovet © (17.01.12 11:36)
> в "Прочее" была ветка про физику
http://www.delphimaster.ru/cgi-bin/forum.pl?n=3&id=1316779880
Inovet (2012-01-17 11:36:00) [6]> [34] Ega23 © (17.01.12 11:29)
> Это всё опять же со слов бати, если есть желающие, могу
> позже комментарии предоставить.
Интересно бы было. Только где-то в "Прочее" была ветка про физику, если ещё не ушла в архив, в ней наверное будет лучше.
Ega23 (2012-01-17 11:29:00) [7]
> Не удивительно, учитывая как у нас относятся к науке
Там основная проблема в выравнивании зарплат и попиле грантов. То, что его с Курчатником "объединяют" - это, в целом, не так уж и плохо. А вот тем, кто на доильном аппарате сидит, то, что денежные темы будут пересмотрены - как серпом по причиндалам.
Если в Дубне в ОИЯИ стесняются в открытую пилить, всё-таки международный институт и гранты PAC распределяет (и контролирует), то в ИТЭФ-е с этим сложнее.
Это всё опять же со слов бати, если есть желающие, могу позже комментарии предоставить.
Anatoly Podgoretsky (2012-01-17 11:07:00) [8]
> Удачи! Прорвёшься - значит наш!
Какой наш, мы с армией уже закончили.
Омлет (2012-01-17 11:07:00) [9]
> Dimka Maslov © (17.01.12 10:34) [31]
Не удивительно, учитывая как у нас относятся к науке: http://science.compulenta.ru/655389/
Dimka Maslov (2012-01-17 10:34:00) [10]
> Еще один будущий менеджер.
Мне недавно рассказывали про аспиранта, который собирается считать ядрёные реакторы, не зная при этом как выглядит график функции синуса, буква тау, не говоря уже о том, чтобы от этой функции по дэ-тау взять интеграл. Так что менеджер по продажам - не самый страшный зверь.
Омлет (2012-01-17 08:04:00) [11]Еще один будущий менеджер.
sniknik (2012-01-17 07:57:00) [12]> значит наш!
вот уж нет, наш, это когда программирование сам сделал, а "прорвался" через философию например...
Германн (2012-01-17 02:51:00) [13]
> Рома (17.01.12 02:30) [26]
>
> Ладно, прорвусь... И не из таких ситуаций выкручивался..
> .
Удачи! Прорвёшься - значит наш!
Ega23 (2012-01-17 02:44:00) [14]
> По своему опыту знаете???
Само-собой, старший сержант запаса всё-таки... :)
Рома (2012-01-17 02:30:00) [15]Ладно, прорвусь... И не из таких ситуаций выкручивался... Всем большое спасибо!!!
Рома (2012-01-17 02:27:00) [16]
> Ega23 ©
По своему опыту знаете???
Ega23 (2012-01-17 02:19:00) [17]
> Ну хоть что нибудь посоветуйте!!!
Попроси маму объяснить, как правильно подшиваться. Будешь иметь на КМБ преимущество.
Рома (2012-01-17 02:17:00) [18]И на этом спасибо!
Германн (2012-01-17 02:11:00) [19]
> Плохиш © (17.01.12 00:07) [8]
>
> Представленный дерьмокод является курсовой? 8-O
> Кстати прога эта, шифрование методом поворотной решетки.
Дык я и говорю, что "Доцент, конечно дурак, но аппаратура при нём!"
Германн (2012-01-17 02:07:00) [20]
> Рома (17.01.12 01:57) [20]
>
> Объяснять даже не надо, просто хотя бы комментарии к процедурам,
> где и что мы делаем и все!!!!
>
А кто собственно "Мы". Т.е. те мы, которые "мы делаем"? Ты не сделал ничего. Я вообще не имею отношения к данному коду. Как и все прочие на этом форуме.
Нормальные комментарии к этому коду "не глядя" может дать только автор сего кода. Очевидно преподша не так глупа, как вы думаете. :)