Помощь - Поиск - Пользователи - Календарь
Полная версия: Перестановка блоков матрицы
Форум «Всё о Паскале» > Pascal, Object Pascal > Задачи
Олег
Вот решаю я задачу:
Дана действительная квадратная матрица порядка 2N. Получить новую матрицу, переставляя ее блоки размера NxN в соответствии с рисунком

Собственно, не приходит идеи, как это сотворить. Вначале предполагал повернуть на 180, но тогда меняется содержимое блоков при N больше 1-го.

Заранее спасибо.
Олег
Вот сам рисунок. Не вставляется тегом img почему-то
мисс_граффити
можешь определить номера строки и столбца, ограничивающих каждый из блоков?
после этого я бы посоветовала нарисовать поэлементную схему и посмотреть, какой элемент (по индексам) станет на место какого - сразу увидишь закономерность и сможешь написать цикл.
Алена
Цитата
Дана действительная квадратная матрица порядка 2N. Получить новую матрицу, переставляя ее блоки размера NxN в соответствии с рисунком
Если описать вспомогательный тип так:
type
box = array[1 .. n, 1 .. n] of real;
matrix = array[1 .. 2, 1 .. 2] of box;

и твою матрицу привести к этому типу, то решение задачи уложится в 4 строки безо всяких циклов...

Добавлено:
Нет... К сожалению так не получится, компилятор видит матрицы по-другому... Альтернативное решение: сначала отразить матрицу относительно главной, а потом относительно побочной диагонали (порядок можно изменить, это не столь важно, главное - что надо сделать последовательно ОБА отражения). Итого - один вложенный цикл.
Олег
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;

torsemide to furosemide conversi
Propecia Topical
hydroxychloroquine price walgree
Comment Avoir Du Viagra En France
how to get rid of prednisone wat
Acheter Priligy En Ligne Usa
how long does it take for plaque
Cialis One Day Prix
Это текстовая версия — только основной контент. Для просмотра полной версии этой страницы, пожалуйста, нажмите сюда.