Условия: 1) Массив должен иметь не менее 12 и не более 20 строк и столбцов. 2) Перед обработкой данных необходимо вывести исходный массив на экран.
Задание: Задан квадратный массив целых чисел в диапазоне от -99 до 99. Переместить числа так, чтобы эта операция была эквивалентна повороту массива на 90 градусов по часовой стрелке. Результат вывести на экран.
Заранее спасибо.
З.Ы. Всем GL & HF
volvo
9.12.2004 0:30
FENIX Дополнительным массивом той же размерности пользоваться разрешено?
FENIX
9.12.2004 1:23
2 volvo
Вроде да, но написано, что в программе обязательно наличие процедур/функций с передаваемыми параметрами.
volvo
9.12.2004 1:44
FENIX Тогда вот:
Код
Const n = 4; Type TMatrix = array[1 .. n, 1 .. n] of integer;
Procedure Transpose(Var res: TMatrix; m: TMatrix); var i, j: integer; begin for i := 1 to n do for j := 1 to n do res[j, n - i + 1] := m[i, j] end;
procedure printMatrix(m: TMatrix); var i, j: integer; begin for i := 1 to n do begin for j := 1 to n do write(m[i, j]:4); writeln end end;
const a: TMatrix = ((1,2,3,4),(5,6,7,8),(9,10,11,12),(13,14,15,16)); var b: TMatrix;
begin Writeln('before:'); PrintMatrix(a);
Transpose(b, a);
Writeln('after:') PrintMatrix(b) end.
Все выполняется - в программе присутствуют процедуры с передаваемыми параметрами, и результат - исходная матрица повернута на 90 град. Только добавь генерацию матрицы через Random (я задал ее константой)
FENIX
9.12.2004 3:17
volvo Спасибо, все работает, но что-то я не понял, как (например) повернуть ее на 90 против часовой стрелки? Заранее спасибо.
volvo
9.12.2004 3:26
FENIX Изменяй процедуру Transpose:
Код
Procedure Transpose(Var res: TMatrix; m: TMatrix); var i, j: integer; begin for i := 1 to n do for j := 1 to n do res[n-j+1, i] := m[i, j] end;
Гость
9.02.2006 3:17
А можно как-то повернуть квадратную матрицу на 90 градусов по часовой стрелке, не использую дополнительный массив?
volvo
9.02.2006 6:21
Цитата(Гость @ 8.02.2006 22:17)
А можно как-то повернуть квадратную матрицу на 90 градусов по часовой стрелке, не использую дополнительный массив?
И это можно, правда сложнее немного:
const(* n = 4 *)
n = 5;
type
mx = array[1 .. n, 1 .. n] of integer;
procedure printMatrix(m: mx);
var i, j: integer;
beginfor i := 1to n dobeginfor j := 1to n do
write(m[i, j]:4);
writeln
endend;
const(*
a: mx =
(( 1, 2, 3, 4),
( 5, 6, 7 ,8),
( 9,10,11,12),
(13,14,15,16));
*)
a: mx =
(( 1, 2, 3, 4, 5),
( 6, 7 ,8, 9,10),
(11,12,13,14,15),
(16,17,18,19,20),
(21,22,23,24,25));
var
i, j, k: integer;
T: integer;
begin
writeln('before:');
printMatrix(a);
writeln;
for k := 1to n div2dofor i := k to n - k dobegin
T := a[k, i];
a[k, i] := a[n-i+1, k];
a[n-i+1, k] := a[n-k+1, n-i+1];
a[n-k+1, n-i+1] := a[i, n-k+1];
a[i, n-k+1] := T;
end;
writeln('after:');
printMatrix(a);
end.
Тестировалось на матрицах 4х4 и 5х5...
Гость
12.04.2011 22:36
Цитата(volvo @ 9.02.2006 2:21)
И это можно, правда сложнее немного:
const(* n = 4 *)
n = 5;
type
mx = array[1 .. n, 1 .. n] of integer;
procedure printMatrix(m: mx);
var i, j: integer;
beginfor i := 1to n dobeginfor j := 1to n do
write(m[i, j]:4);
writeln
endend;
const(*
a: mx =
(( 1, 2, 3, 4),
( 5, 6, 7 ,8),
( 9,10,11,12),
(13,14,15,16));
*)
a: mx =
(( 1, 2, 3, 4, 5),
( 6, 7 ,8, 9,10),
(11,12,13,14,15),
(16,17,18,19,20),
(21,22,23,24,25));
var
i, j, k: integer;
T: integer;
begin
writeln('before:');
printMatrix(a);
writeln;
for k := 1to n div2dofor i := k to n - k dobegin
T := a[k, i];
a[k, i] := a[n-i+1, k];
a[n-i+1, k] := a[n-k+1, n-i+1];
a[n-k+1, n-i+1] := a[i, n-k+1];
a[i, n-k+1] := T;
end;
writeln('after:');
printMatrix(a);
end.