@Alertoso

Как сделать динамический массив в данном коде?

const
SizeArray = 11;
type
MyArrayType = array [1..SizeArray, 1..SizeArray] of string[1];
DirectionType = (dRight, dDown, dLeft, dUp);

procedure Spiral(var M : MyArrayType; SpirWrite : boolean; var S : string);
var
CurStep, Step, PosX, PosY : integer;
Direction : DirectionType; {от 1 до 4 - 1 вправо, 2 вниз, 3 влево, 4 вверх}
i : integer; {банальный счётчик по строке}
begin
i := 1;
PosX := 6; {round(SizeArray/2)}
PosY := 6;
CurStep := 1;
Step := 1; {через сколько шагов повернуть}
Direction := dRight; {фактически - это куда крутить спираль на первом шаге}
if Not SpirWrite {значит чтение из массива} then S := '';
while (PosX>0) and (PosX<=SizeArray) and (PosY>0) and (PosY<=SizeArray) do
begin
if SpirWrite then M[PosX, PosY] := S[i]
else S := S + M[PosX, PosY];

{вот, собественно и движение по матрице по спирали!}
case Direction of
dRight: begin PosY := PosY + 1;
if CurStep = Step then
begin
CurStep :=1; Direction := dDown;
end
else
CurStep := CurStep + 1;
end;
dDown : begin PosX := PosX + 1;
if CurStep = Step then
begin
CurStep :=1; Direction := dLeft;
Step := Step + 1;
end
else
CurStep := CurStep + 1;
end;
dLeft : begin PosY := PosY - 1;
if CurStep = Step then
begin
CurStep :=1; Direction := dUp;
end
else
CurStep := CurStep + 1;
end;
dUp : begin PosX := PosX - 1;
if CurStep = Step then
begin
CurStep :=1; Direction := dRight;
Step := Step + 1;
end
else
CurStep := CurStep + 1;
end;
end;

inc(i);
end;


end;

procedure DoCheck_and_Fix_String( var S : string; NeedLength : integer);
begin
if (NeedLength<1) or (NeedLength>255) then Exit;
if Length(S) > NeedLength then
S := Copy(S,1, NeedLength)
else
while length(S) end;

var
Matrix : MyArrayType;
i, j : integer;
myS : string;
f : text;

begin
myS := '1234567890 This is just my favorite tesing string - you need very long string!';

i:= length( myS );
WriteLn('len S =',i);

DoCheck_and_Fix_String( myS, 121);

i:= length( myS );
WriteLn('len (fixed)=',i);

Spiral(Matrix, true, myS );

{выведем матрицу с помещенным туда текстом в текстовый файл}
Assign(f, 'SpirOut.txt');
Rewrite(f);
for i:=1 to 11 do
begin
for j:=1 to 11 do
Write(f, Matrix[i,j]);
WriteLn(f);
end;
Close(f);
end.
  • Вопрос задан
  • 65 просмотров
Пригласить эксперта
Ответы на вопрос 1
HemulGM
@HemulGM
Delphi Developer, сис. админ
type MyArrayType = array [1..SizeArray, 1..SizeArray] of string[1];

.. И зачем string[1] - если это просто Char
type MyArrayType = array of array of Char;
Ответ написан
Ваш ответ на вопрос

Войдите, чтобы написать ответ

Войти через центр авторизации
Похожие вопросы