дана матрица, записать ее элементы таким образом
1 2 3 4 5
16 17 18 19 6
15... 20 7
14 23 22 21 8
13 12 11 10 9
в паскале
помогите пожалуйста!!!
Другие языки программирования и технологии
спираль в паскале
Заполнение матрицы по спирали (метод "улитки")
uses crt;
const n=5;
var a:array[1..n,1..n]of integer;
i,j:integer;
x,y:integer;
num:integer;
add:integer;
dir:integer;
begin
clrscr;
x:=0;
y:=1;
num:=1;
Add:=n;
dir:=1;
while (add<>0) do
begin
i:=0;
while (i<>add) do
begin
x:=x+dir;
a[y,x]:=num;
num:=num+1;
i:=i+1;
end;
i:=0;
add:=add-1;
while (i<>add) do
begin
y:=y+dir;
a[y,x]:=num;
num:=num+1;
i:=i+1;
end;
dir:=dir*(-1);
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
readln
end.
uses crt;
const n=5;
var a:array[1..n,1..n]of integer;
i,j:integer;
x,y:integer;
num:integer;
add:integer;
dir:integer;
begin
clrscr;
x:=0;
y:=1;
num:=1;
Add:=n;
dir:=1;
while (add<>0) do
begin
i:=0;
while (i<>add) do
begin
x:=x+dir;
a[y,x]:=num;
num:=num+1;
i:=i+1;
end;
i:=0;
add:=add-1;
while (i<>add) do
begin
y:=y+dir;
a[y,x]:=num;
num:=num+1;
i:=i+1;
end;
dir:=dir*(-1);
end;
for i:=1 to n do
begin
for j:=1 to n do
write(a[i,j]:4);
writeln;
end;
readln
end.
Я бы предложил спираль в другом месте.
//на PascalABC.net
//Матрица по спирали из любого угла или из центра, по часовой или против часовой
begin
var n:= 3;
var ИзЦентра := 0; // 0 - из угла 1 - из Центра
Var Центр := Ceil(n / 2) - 1; //Координата центра матрицы
var (i, j, Направление, nEven) := (0, 0, 1, n.IsEven? 1 : 0); // с левого верхнего
if ИзЦентра = 1 then (i, j, Направление, nEven) := (Центр, Центр, 1, 0); // из центра
var Матрица := new integer[n,n];
for var Элемент := 1 to n*n do
begin
Матрица [i,j]:= Элемент; {
[i,j] - с левого верхнего по часовой; из Центра вправо по часовой
[j,i] - с левого верхнего против часовой; из Центра вниз против часовой
[n-1-i,j] - с левого нижнего против часовой; из Центра вправо против часовой
[n-1-j,i] - с левого нижнего по часовой; из центра вверх по часовой
[j,n-1-i] - с правго верхнего по часовой; из Центра вниз по часовой
[i,n-1-j] - c правго верхнего против часовой; из Центра влево против часовой
[n-1-i,n-1-j] - c правого нижнего по часовой; из Центра влево по часовой
[n-1-j,n-1-i] - c правого нижнего против часовой; из центра вверх по часовой
}
case Направление of
1:begin {вправо}
inc(j);
if (Центр - i + ИзЦентра ) = (j - Центр - nEven) then Направление := 2;
end;
2:begin {вниз}
inc(i);
if i = j then Направление := 3;
end;
3:begin {влево}
dec(j);
if (i - Центр) = (Центр - j + nEven) then Направление := 4;
end;
4:begin {вверх}
dec(i);
if (i - 1) = (j - ИзЦентра) then Направление := 1;
end
end;
end;
Матрица. Println;
end.
//Матрица по спирали из любого угла или из центра, по часовой или против часовой
begin
var n:= 3;
var ИзЦентра := 0; // 0 - из угла 1 - из Центра
Var Центр := Ceil(n / 2) - 1; //Координата центра матрицы
var (i, j, Направление, nEven) := (0, 0, 1, n.IsEven? 1 : 0); // с левого верхнего
if ИзЦентра = 1 then (i, j, Направление, nEven) := (Центр, Центр, 1, 0); // из центра
var Матрица := new integer[n,n];
for var Элемент := 1 to n*n do
begin
Матрица [i,j]:= Элемент; {
[i,j] - с левого верхнего по часовой; из Центра вправо по часовой
[j,i] - с левого верхнего против часовой; из Центра вниз против часовой
[n-1-i,j] - с левого нижнего против часовой; из Центра вправо против часовой
[n-1-j,i] - с левого нижнего по часовой; из центра вверх по часовой
[j,n-1-i] - с правго верхнего по часовой; из Центра вниз по часовой
[i,n-1-j] - c правго верхнего против часовой; из Центра влево против часовой
[n-1-i,n-1-j] - c правого нижнего по часовой; из Центра влево по часовой
[n-1-j,n-1-i] - c правого нижнего против часовой; из центра вверх по часовой
}
case Направление of
1:begin {вправо}
inc(j);
if (Центр - i + ИзЦентра ) = (j - Центр - nEven) then Направление := 2;
end;
2:begin {вниз}
inc(i);
if i = j then Направление := 3;
end;
3:begin {влево}
dec(j);
if (i - Центр) = (Центр - j + nEven) then Направление := 4;
end;
4:begin {вверх}
dec(i);
if (i - 1) = (j - ИзЦентра) then Направление := 1;
end
end;
end;
Матрица. Println;
end.
На Turbo Pascal-е это может быть так:
program MatricuZmeikoy3;
uses crt;
const N=10;
M=10;
var ar: array[1..N,1..M] of byte;
x: byte;
y: byte;
z: byte;
t: byte;
procedure show;
var a,b: byte;
begin
writeln('=============================');
for a:=1 to N do
begin
for b:=1 to M do write(ar[a,b]:4,' ');
writeln;
end;
readkey;
end;
begin
z:=1;
if N>M then t:=(M div 2)-1 else t:=(N div 2)-1;
for y:=0 to t do
begin
for x:=1+y to M-1-y do
begin
ar[1+y,x]:=z;
inc(z);
end;
for x:=1+y to N-1-y do
begin
ar[x,M-y]:=z;
inc(z);
end;
for x:=M-y downto 2+y do
begin
ar[N-y,x]:=z;
inc(z);
end;
for x:=N-y downto 2+y do
begin
ar[x,1+y]:=z;
inc(z);
end;
end;
if N=M then if odd(N) then
begin
ar[(N+1) div 2,(N+1) div 2]:=z;
inc(z);
end;
if (NM) and (odd(M)) then for x:=((M+1) div 2) to 1+(N-((M+1) div 2)) do
begin
ar[x,(M+1) div 2]:=z;
inc(z);
end;
show;
end.
program MatricuZmeikoy3;
uses crt;
const N=10;
M=10;
var ar: array[1..N,1..M] of byte;
x: byte;
y: byte;
z: byte;
t: byte;
procedure show;
var a,b: byte;
begin
writeln('=============================');
for a:=1 to N do
begin
for b:=1 to M do write(ar[a,b]:4,' ');
writeln;
end;
readkey;
end;
begin
z:=1;
if N>M then t:=(M div 2)-1 else t:=(N div 2)-1;
for y:=0 to t do
begin
for x:=1+y to M-1-y do
begin
ar[1+y,x]:=z;
inc(z);
end;
for x:=1+y to N-1-y do
begin
ar[x,M-y]:=z;
inc(z);
end;
for x:=M-y downto 2+y do
begin
ar[N-y,x]:=z;
inc(z);
end;
for x:=N-y downto 2+y do
begin
ar[x,1+y]:=z;
inc(z);
end;
end;
if N=M then if odd(N) then
begin
ar[(N+1) div 2,(N+1) div 2]:=z;
inc(z);
end;
if (NM) and (odd(M)) then for x:=((M+1) div 2) to 1+(N-((M+1) div 2)) do
begin
ar[x,(M+1) div 2]:=z;
inc(z);
end;
show;
end.
Похожие вопросы
- спираль в паскале
- ПОМОГИТЕ! В паскале заполнить квадратный массив размерностью n числами 1,2,3… по спирали от края к центру по часовой стр
- Аналог ассоциативного массива в Паскале.
- Я внутри написал, что я знаю про паскаль не то что решать и все такое а так теоретический в общем, смысл проги, я прав?
- ПАСКАЛЬ и ГРАФИКА
- Товарищи программисты на Delphi и Pascal помогите девушке!!!)) вопрос глупый..насчет паскаля..
- Проблема с оператором random в паскале
- С++, блин, легче Паскаля.
- Нужны программы на языке Паскаль
- Вопрос про ЯП Паскаль.