Другие языки программирования и технологии
спираль в паскале
На входе число n.Сформировать матрицу n на n такого типа: пример для n = 3: 3 2 9 4 1 8 5 6 7 Сидел часа 2, в итоге написал огромный код и все равно выдает ошибки. Всем кому небезразлично программирование! Помогите составить наиболее рациональное решение!
Вот! Только спираль пр часовой стрелке.. .
Думаю переделать на "против часовой" не должно составить труда.
const
Size = 20;
var
A : array [1..Size, 1..Size] of Word;
NextSteps : Byte;
Row, Col, N : Byte;
dRow, dCol, Napr : ShortInt;
Num, Max : Word;
Steps, Deci : Byte;
begin
Write('Введите порядок матрицы (2p - 1) до 10 : '); ReadLn(N);
Row := N;
Col := N;
N := 2*N - 1;
Num := 1;
Max := N * N; Deci := 1; while Max > 0 do begin Max := Max div 10; Inc(Deci); end;
Max := N * N;
A[Row, Col] := Num;
Steps := 0;
Napr := 0;
NextSteps := 1;
while Num < Max do
begin
if Steps = 0 then
begin
case Napr of
0 : begin dRow := -1; dCol := 0; Steps := 1 ; end;
1 : begin dRow := 0; dCol := 1; Steps := NextSteps ; end;
2 : begin dRow := 1; dCol := 0; Steps := NextSteps + 1; end;
3 : begin dRow := 0; dCol := -1; Steps := NextSteps + 1; end;
4 : begin dRow := -1; dCol := 0; Steps := NextSteps + 1; Inc(NextSteps, 2); end;
end;
Napr := (Napr + 1) mod 5;
end;
Row := Row + dRow; Col := Col + dCol; Inc(Num); A[Row, Col] := Num; Dec(Steps);
end;
WriteLn('Результат: ');
for Row := 1 to N do
begin
for Col := 1 to N do
Write(A[Row, Col] :Deci);
WriteLn;
end;
end.
Думаю переделать на "против часовой" не должно составить труда.
const
Size = 20;
var
A : array [1..Size, 1..Size] of Word;
NextSteps : Byte;
Row, Col, N : Byte;
dRow, dCol, Napr : ShortInt;
Num, Max : Word;
Steps, Deci : Byte;
begin
Write('Введите порядок матрицы (2p - 1) до 10 : '); ReadLn(N);
Row := N;
Col := N;
N := 2*N - 1;
Num := 1;
Max := N * N; Deci := 1; while Max > 0 do begin Max := Max div 10; Inc(Deci); end;
Max := N * N;
A[Row, Col] := Num;
Steps := 0;
Napr := 0;
NextSteps := 1;
while Num < Max do
begin
if Steps = 0 then
begin
case Napr of
0 : begin dRow := -1; dCol := 0; Steps := 1 ; end;
1 : begin dRow := 0; dCol := 1; Steps := NextSteps ; end;
2 : begin dRow := 1; dCol := 0; Steps := NextSteps + 1; end;
3 : begin dRow := 0; dCol := -1; Steps := NextSteps + 1; end;
4 : begin dRow := -1; dCol := 0; Steps := NextSteps + 1; Inc(NextSteps, 2); end;
end;
Napr := (Napr + 1) mod 5;
end;
Row := Row + dRow; Col := Col + dCol; Inc(Num); A[Row, Col] := Num; Dec(Steps);
end;
WriteLn('Результат: ');
for Row := 1 to N do
begin
for Col := 1 to N do
Write(A[Row, Col] :Deci);
WriteLn;
end;
end.
For i:=1 To n Do
For j:=1 To n Do
a[i,j]:=Random(10);
For j:=1 To n Do
a[i,j]:=Random(10);
Похожие вопросы
- спираль в паскале
- ПОМОГИТЕ! В паскале заполнить квадратный массив размерностью n числами 1,2,3… по спирали от края к центру по часовой стр
- Аналог ассоциативного массива в Паскале.
- Я внутри написал, что я знаю про паскаль не то что решать и все такое а так теоретический в общем, смысл проги, я прав?
- ПАСКАЛЬ и ГРАФИКА
- Товарищи программисты на Delphi и Pascal помогите девушке!!!)) вопрос глупый..насчет паскаля..
- Проблема с оператором random в паскале
- С++, блин, легче Паскаля.
- Нужны программы на языке Паскаль
- Вопрос про ЯП Паскаль.