Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Delphi программирование > Паскаль, Turbo Pascal, PascalABC.NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 24.02.2014, 20:39   #1
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию Поменять квадраты матрицы местами.

Есть матрица (любая)! нужно поменять местами квадраты матрицы!
Виталик124 вне форума Ответить с цитированием
Старый 25.02.2014, 11:03   #2
Serge_Bliznykov
Старожил
 
Регистрация: 09.01.2008
Сообщений: 26,238
По умолчанию

ок.
вот, например, две ЛЮБЫЕ матрицы:

первая, размер 1x5
Код:
1 2 3 4 5
вторая, размер 2x7
Код:

 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
приведите описание, где находятся в этих матрицах "квадраты" и как данные матрицы будут выглядеть после обмена местами этих квадратов.
Serge_Bliznykov вне форума Ответить с цитированием
Старый 25.02.2014, 19:35   #3
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от Serge_Bliznykov Посмотреть сообщение
ок.
вот, например, две ЛЮБЫЕ матрицы:

первая, размер 1x5
Код:
1 2 3 4 5
вторая, размер 2x7
Код:

 1  2  3  4  5  6  7
 8  9 10 11 12 13 14
приведите описание, где находятся в этих матрицах "квадраты" и как данные матрицы будут выглядеть после обмена местами этих квадратов.
В первой матрице "квадратом" будет "1 2" и "4 5", тройку мы вообще не трогаем! Преобразованная матрица будет выглядеть так: 4 5 3 1 2 .
Во второй матрице квадратами будут:
Код:
 "1  2  3  "   и    "5    6   7  "   
8  9  10           12  13  14
Преобразованная:
Код:
5    6     7     4     1   2   3
12   13   14   11    8   9   10

Последний раз редактировалось Виталик124; 25.02.2014 в 19:59.
Виталик124 вне форума Ответить с цитированием
Старый 25.02.2014, 19:53   #4
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

То есть, поменять местами левую и правую половины матрицы?
Код:
k := m div 2 + m mod 2;
for i := 1 to n do
  for j := 1 to m div 2 do
  begin
    b := a[i, j];
    a[i, j] := a[i, j + k];
    a[i, j + k] := b;
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.02.2014, 20:03   #5
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
То есть, поменять местами левую и правую половины матрицы?
Код:
k := m div 2 + m mod 2;
for i := 1 to n do
  for j := 1 to m div 2 do
  begin
    b := a[i, j];
    a[i, j] := a[i, j + k];
    a[i, j + k] := b;
  end;
Ну почти! но если будет к примеру матрица 5X5, там уже не просто поменять половины, допустим, есть матрица:
Код:
1 2 3 4 5
0 9 8 7 6
2 3 4 5 6
4 5 6 7 8
7 6 5 4 3
Квадратами уже будут:
Код:
4 5 
7 6
Код:
1 2       
0 9
и их нужно поменять местами!
Виталик124 вне форума Ответить с цитированием
Старый 25.02.2014, 20:26   #6
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

Вы можете произвести формализацию понятия "квадрат матрицы"?
Предположу:
Имея матрицу и ее размеры, нужно взять наибольшее целое число "a", не превышающее половины размера матрицы по горизонтали; взять максимум "b" из полученного числа и вертикального размера матрицы. Эти два числа ("a" и "b") зададут размер подматриц, которые необходимо поменять местами в данной матрице. Сами подматрицы располагаются в левом и правом верхних углах матрицы. Так?
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.02.2014, 20:45   #7
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
Вы можете произвести формализацию понятия "квадрат матрицы"?
Предположу:
Имея матрицу и ее размеры, нужно взять наибольшее целое число "a", не превышающее половины размера матрицы по горизонтали; взять максимум "b" из полученного числа и вертикального размера матрицы. Эти два числа ("a" и "b") зададут размер подматриц, которые необходимо поменять местами в данной матрице. Сами подматрицы располагаются в левом и правом верхних углах матрицы. Так?
Никогда у меня не получалось нормально объяснять! =) Но всё же попробую еще раз! Итак, у меня есть матрица (любая). Но в моем случае это будет матрица 5Х5!
Код:
1 2 3 4 5
0 9 8 7 6
2 3 4 5 6
4 5 6 7 8
7 6 5 4 3
В этой матрице мы видим 4-и квадрата! Они разделены двумя линиями: вертикальной:3 8 4 6 5, горизонтальной: 2 3 4 5 6! Эти лини нам трогать нельзя! Но! Если будет другой размер матрицы, допустим 4Х5, то линии затрагивать можно! Вернемся к нашей матрице, опишу квадраты!
1-ый квадрат:
Код:
1 2
0 9
2-ой квадрат:
Код:
4 5 
7 6
3-ий квадрат:
Код:
4 5 
7 6
4-ый квадрат:
Код:
7 8 
4 3
Задача: поменять местами 1-ый и 2-ой квадраты!
То есть:
БЫЛО:
Код:
1 2 3 4 5
0 9 8 7 6
2 3 4 5 6
4 5 6 7 8
7 6 5 4 3
Должно стать:
Код:
4 5 3 1 2 
7 6 8 0 9
2 3 4 5 6
4 5 6 7 8
7 6 5 4 3
Виталик124 вне форума Ответить с цитированием
Старый 25.02.2014, 20:58   #8
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,285
По умолчанию

То есть нужно "разрезать" любую матрицу на 4 "равных" части и поменять две верхних части местами?
Код:
k := m div 2 + m mod 2;
p := n div 2;
if p = 0 then
  p := 1;
for i := 1 to p do
  for j := 1 to m div 2 do
  begin
    b := a[i, j];
    a[i, j] := a[i, j + k];
    a[i, j + k] := b;
  end;
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )
BDA вне форума Ответить с цитированием
Старый 25.02.2014, 21:07   #9
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
То есть нужно "разрезать" любую матрицу на 4 "равных" части и поменять две верхних части местами?
Код:
k := m div 2 + m mod 2;
p := n div 2;
if p = 0 then
  p := 1;
for i := 1 to p do
  for j := 1 to m div 2 do
  begin
    b := a[i, j];
    a[i, j] := a[i, j + k];
    a[i, j + k] := b;
  end;
Ну да! Спасибо большое!
Виталик124 вне форума Ответить с цитированием
Старый 27.02.2014, 23:09   #10
Виталик124
Пользователь
 
Регистрация: 08.02.2014
Сообщений: 37
По умолчанию

Цитата:
Сообщение от BDA Посмотреть сообщение
То есть нужно "разрезать" любую матрицу на 4 "равных" части и поменять две верхних части местами?
Код:
k := m div 2 + m mod 2;
p := n div 2;
if p = 0 then
  p := 1;
for i := 1 to p do
  for j := 1 to m div 2 do
  begin
    b := a[i, j];
    a[i, j] := a[i, j + k];
    a[i, j + k] := b;
  end;
Извините, пожалуйста, а не могли бы вы провести подробное описание каждого действия, того что вы делали? а то не могу понять! особенно первую часть, зачем эти div и mod?

Последний раз редактировалось Виталик124; 27.02.2014 в 23:14.
Виталик124 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
В каждой строке матрицы А(n*n) найти наибольший и наименьший элементы матрицы и поменять их местами saha1994 Паскаль, Turbo Pascal, PascalABC.NET 2 15.05.2012 20:38
Поменять местами столбцы матрицы по правилу. Leshii Общие вопросы C/C++ 4 28.04.2012 18:58
Поменять местами K-ю строку и K-й столбец квадратной матрицы VoltZZZ Паскаль, Turbo Pascal, PascalABC.NET 2 14.03.2012 14:50
Поменять местами диагональные элементы матрицы и вектор Элеонор Помощь студентам 1 29.05.2011 08:28
Паскаль! поменять местами максимальный и минимальный элемент матрицы. wrmarw Помощь студентам 4 08.05.2010 13:06