Вот решаю я задачу:
Дана действительная квадратная матрица порядка 2N. Получить новую матрицу, переставляя ее блоки размера NxN в соответствии с рисунком
Собственно, не приходит идеи, как это сотворить. Вначале предполагал повернуть на 180, но тогда меняется содержимое блоков при N больше 1-го.
Заранее спасибо.
Вот сам рисунок. Не вставляется тегом img почему-то
Эскизы прикрепленных изображений
можешь определить номера строки и столбца, ограничивающих каждый из блоков?
после этого я бы посоветовала нарисовать поэлементную схему и посмотреть, какой элемент (по индексам) станет на место какого - сразу увидишь закономерность и сможешь написать цикл.
typeи твою матрицу привести к этому типу, то решение задачи уложится в 4 строки безо всяких циклов...
box = array[1 .. n, 1 .. n] of real;
matrix = array[1 .. 2, 1 .. 2] of box;
2мисс_граффити
Обязательно попробую.
2Алена
Уже проходил - получаем то же, что при повороте на 180 - порядок элементов каждого блока НЕ ДОЛЖЕН меняться((
так он и не будет вроде...
мы же блок рассматриваем как элемент массива - единое целое...
procedure swap_lines(a, b: integer);
var
i: integer;
T: real;
begin
for i := 1 to 2 * n do begin
T := arr[a, i]; arr[a, i] := arr[b, i]; arr[b, i] := T;
end;
end;
procedure swap_columns(a, b: integer);
var
i: integer;
T: real;
begin
for i := 1 to 2 * n do begin
T := arr[i, a]; arr[i, a] := arr[i, b]; arr[i, b] := T;
end;
end;
...
for i := 1 to n do swap_lines(i, n+i);
for i := 1 to n do swap_columns(i, n+i);
...
2Мисс граффити
Дык в том то и дело, что блок - это четверть матрицы по сути, оно не ограничено....
М.... спасибо, сам намудрил - Делаем так:
1 | 2
3 | 4
Вначале меняем 1 и 4, потом 3 и 2
Var i,j,n:byte; x:real; A:array[0..10,0..10] of real;
For i:=1 to n do
For j:=1 to n do
Begin
x:=A[i,j]; A[i,j]:=A[i+N,j+N]; A[i+N,j+N]:=x;
x:=A[i+N,j]; A[i+N,j]:=A[i,j+N]; A[i,j+N]:=x;
End;
Propecia Topical
Comment Avoir Du Viagra En France
Acheter Priligy En Ligne Usa
Cialis One Day Prix