Data commit
This commit is contained in:
parent
7387c8f97b
commit
cb5bb5e222
199093 changed files with 3378972 additions and 0 deletions
87
Task/Spiral-matrix/Delphi/spiral-matrix.delphi
Normal file
87
Task/Spiral-matrix/Delphi/spiral-matrix.delphi
Normal file
|
|
@ -0,0 +1,87 @@
|
|||
type TMatrix = array of array of double;
|
||||
|
||||
|
||||
procedure DisplayMatrix(Memo: TMemo; Mat: TMatrix);
|
||||
{Display specified matrix}
|
||||
var X,Y: integer;
|
||||
var S: string;
|
||||
begin
|
||||
S:='';
|
||||
for Y:=0 to High(Mat[0]) do
|
||||
begin
|
||||
S:=S+'[';
|
||||
for X:=0 to High(Mat) do
|
||||
S:=S+Format('%4.0f',[Mat[X,Y]]);
|
||||
S:=S+']'+#$0D#$0A;
|
||||
end;
|
||||
Memo.Lines.Add(S);
|
||||
end;
|
||||
|
||||
|
||||
procedure MakeSpiralMatrix(var Mat: TMatrix; SizeX,SizeY: integer);
|
||||
{Create a spiral matrix of specified size}
|
||||
var Inx: integer;
|
||||
var R: TRect;
|
||||
|
||||
procedure DoRect(R: TRect; var Inx: integer);
|
||||
{Create on turn of the spiral base on the rectangle}
|
||||
var X,Y: integer;
|
||||
begin
|
||||
{Do top part of rectangle}
|
||||
for X:=R.Left to R.Right do
|
||||
begin
|
||||
Mat[X,R.Top]:=Inx;
|
||||
Inc(Inx);
|
||||
end;
|
||||
{Do Right part of rectangle}
|
||||
for Y:=R.Top+1 to R.Bottom do
|
||||
begin
|
||||
Mat[R.Right,Y]:=Inx;
|
||||
Inc(Inx);
|
||||
end;
|
||||
{Do bottom part of rectangle}
|
||||
for X:= R.Right-1 downto R.Left do
|
||||
begin
|
||||
Mat[X,R.Bottom]:=Inx;
|
||||
Inc(Inx);
|
||||
end;
|
||||
{Do left part of rectangle}
|
||||
for Y:=R.Bottom-1 downto R.Top+1 do
|
||||
begin
|
||||
Mat[R.Left,Y]:=Inx;
|
||||
Inc(Inx);
|
||||
end;
|
||||
end;
|
||||
|
||||
begin
|
||||
{Set matrix size}
|
||||
SetLength(Mat,SizeX,SizeY);
|
||||
{create matching rectangle}
|
||||
R:=Rect(0,0,SizeX-1,SizeY-1);
|
||||
Inx:=0;
|
||||
{draw and deflate rectangle until spiral is done}
|
||||
while (R.Left<=R.Right) and (R.Top<=R.Bottom) do
|
||||
begin
|
||||
DoRect(R,Inx);
|
||||
InflateRect(R,-1,-1);
|
||||
end;
|
||||
end;
|
||||
|
||||
|
||||
|
||||
procedure SpiralMatrix(Memo: TMemo);
|
||||
{Display spiral matrix}
|
||||
var Mat: TMatrix;
|
||||
begin
|
||||
Memo.Lines.Add('5x5 Matrix');
|
||||
MakeSpiralMatrix(Mat,5,5);
|
||||
DisplayMatrix(Memo,Mat);
|
||||
|
||||
Memo.Lines.Add('8x8 Matrix');
|
||||
MakeSpiralMatrix(Mat,8,8);
|
||||
DisplayMatrix(Memo,Mat);
|
||||
|
||||
Memo.Lines.Add('14x8 Matrix');
|
||||
MakeSpiralMatrix(Mat,14,8);
|
||||
DisplayMatrix(Memo,Mat);
|
||||
end;
|
||||
Loading…
Add table
Add a link
Reference in a new issue