uses crt;
var a:array [1..20] of integer;
b:array [1..20,1..20] of integer;
i,j,n:integer;
begin
clrscr;
write('n: '); readln(n);
for i:=1 to n do read(a); readln;
for i:=1 to n do begin
for j:=1 to n do begin
b[i,j]:=a[(i+j-2) mod n+1];
write(b[i,j]);
end;
writeln;
end;
readln;
end.
Pascal.Массивы.Получить Квадратную Матрицу
a1 a2 a3 an
a2 a3 an a1
a3 an a1 a2
an a1 a2 a3
Пожалуйста выложите исходный код
Может ктонибудь алгоритм предложит йа непредставляю просто как ето решать :(
Код:
type Mass = array[1..50,1..50] of Integer;
var i, j, n, temp: Integer;
DMass: Mass;
begin
Randomize;
Write('Vvedite N (stolbcov i strok) = ');
Readln(n);
for i := 1 to n do
begin
// рандом генерация, раскомментируй, что числа были рандомные
// DMass[1,i] := Random(50);
// Write(DMass[1,i], ' ');
// закомментируй следующую строку, если раскоментил предыдущие.
Read(DMass[1,i]);
end;
Writeln;
Writeln;
// основной код, заполняем (динамическое программирование)
temp := 0;
for i := 2 to n do
begin
if i = 2 then begin for temp := 1 to n do Write(Dmass[1,temp], ' '); Writeln; end;
for j := 1 to n do
begin
if ((j+1)mod n) = 0 then temp := n
else temp := ((j+1)mod n);
DMass[i,j] := DMass[i-1, temp];
Write(DMass[i,j], ' ');
end;
Writeln;
end;
end.
var i, j, n, temp: Integer;
DMass: Mass;
begin
Randomize;
Write('Vvedite N (stolbcov i strok) = ');
Readln(n);
for i := 1 to n do
begin
// рандом генерация, раскомментируй, что числа были рандомные
// DMass[1,i] := Random(50);
// Write(DMass[1,i], ' ');
// закомментируй следующую строку, если раскоментил предыдущие.
Read(DMass[1,i]);
end;
Writeln;
Writeln;
// основной код, заполняем (динамическое программирование)
temp := 0;
for i := 2 to n do
begin
if i = 2 then begin for temp := 1 to n do Write(Dmass[1,temp], ' '); Writeln; end;
for j := 1 to n do
begin
if ((j+1)mod n) = 0 then temp := n
else temp := ((j+1)mod n);
DMass[i,j] := DMass[i-1, temp];
Write(DMass[i,j], ' ');
end;
Writeln;
end;
end.
1) Отступы сделаны рандомно (=ужасно).
2)
Цитата:
Код:
for i := 2 to n do
begin
if i = 2 then...
begin
if i = 2 then...
Что всё это делает в цикле? Это надо бы вытащить из цикла.
3)
Цитата:
Код:
if ((j+1)mod n) = 0 then temp := n
else temp := ((j+1)mod n);
else temp := ((j+1)mod n);
В общем это более-менее нормально, просто хочу предложить ещё вариант:
temp:=(j+n) mod n+1
4) Ну и надо бы ещё ReadLn или даже 2 штуки, если ждать enter'а.
Цитата:
1) Отступы сделаны рандомно (=ужасно).
Но это ведь не критично, правда? Главное в отступах что? - то, чтоб при просмотре было логично, да чтоб при множестве begin-end'ов было видно какой от какого.
Цитата:
Что всё это делает в цикле? Это надо бы вытащить из цикла.
Знаю, просто когда прогонял проверкой (Трассировкой) нужно было посмотреть сразу результат, вот и пихнул.
Цитата:
В общем это более-менее нормально, просто хочу предложить ещё вариант:
temp:=(j+n) mod n+1
temp:=(j+n) mod n+1
У каждого свой вариант, так что не отрицаю ;)
Цитата:
4) Ну и надо бы ещё ReadLn или даже 2 штуки, если ждать enter'а.
Писал на PascalABC - не было под рукой Delphi, вот и не поставил, они там не нужны.
Цитата:
Но это ведь не критично, правда? Главное в отступах что? - то, чтоб при просмотре было логично, да чтоб при множестве begin-end'ов было видно какой от какого.
Лично меня такие отступы запутывают, так как то, что между begin'ом и end'ом на разном уровне.