Форум программистов, компьютерный форум CyberForum.ru

Перестановки в двумерных массивах - C++

Восстановить пароль Регистрация
 
Wuzup
0 / 0 / 0
Регистрация: 01.11.2012
Сообщений: 44
26.03.2013, 14:47     Перестановки в двумерных массивах #1
Нужно переставить части квадратной матрицы (размер kxk (где к-четное))
так как показано на рисунках
1)В первом массиве поменять левую и правую части местами
2)во втором массиве четверти сместить по часовой стрелке
Напишите пожалуйста циклы для перестановокПерестановки в двумерных массивах
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
26.03.2013, 14:47     Перестановки в двумерных массивах
Посмотрите здесь:

C++ Функции в массивах
C++ Ошибка в двумерных массивах
C++ функции в массивах.
C++ снова о массивах
C++ последовательности в массивах
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.03.2013, 15:39     Перестановки в двумерных массивах #2
В обоих случаях надо начать с правила преобразования индексов. А дальше - дело техники.
Цитата Сообщение от Wuzup Посмотреть сообщение
1)В первом массиве поменять левую и правую части местами
Если элемент лежит в левой части (т.е. его индекс по вертикали i <= k/2) поставить на место i+k/2 в той же строке.
Цитата Сообщение от Wuzup Посмотреть сообщение
2)во втором массиве четверти сместить по часовой стрелке
Определяем для каждого квадранта свое правило: по сути то же самое, что в п.1, но с дополнительными ограничениями по второй координате.
Wuzup
0 / 0 / 0
Регистрация: 01.11.2012
Сообщений: 44
26.03.2013, 15:55  [ТС]     Перестановки в двумерных массивах #3
C
1
2
3
4
5
6
7
8
for (i=0;i<k;i++)
  {
   for(j=0;j<k;j++)
      {  
         if (i<=k/2)
    { array[i][j]=array[i+k/2][j];}
       }
   };
так правильно для первой части?
Tulosba
:)
Эксперт С++
4378 / 3221 / 297
Регистрация: 19.02.2013
Сообщений: 9,044
26.03.2013, 17:11     Перестановки в двумерных массивах #4
Вот Вам решение для первой части задания:
C++
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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
#include <iostream>
#include <cstdlib>
 
using namespace std;
 
void fill( int** a, int n )
{
   for( int i=0; i<n; ++i )
      for( int j=0; j<n; ++j )
         a[i][j] = rand() % 100;   
}
 
void print( int** a, int n )
{
   for( int i=0; i<n; ++i )
   {
      for( int j=0; j<n; ++j )
      {
         cout.width( 3 );
         cout << a[i][j];
      }
      cout << endl;
   }
}
 
void left2right( int**a, int n )
{
   cout << "left2right" << endl;
   for( int i=0; i<n; ++i )
   {
      for( int j=0; j<n/2; ++j )
      {
         int tmp = a[i][j];
         a[i][j] = a[i][j+n/2];
         a[i][j+n/2] = tmp;
      }
   }   
}
 
int main() {
   
   const int N = 4;
   
   srand( time(0));
   
   int** array = new int*[N];
   for( int i=0;i<N; ++i )
      array[i] = new int[N];
   
   fill( array, N );
   
   print( array, N );
   
   left2right( array, N );
   
   print( array, N );
 
   return 0;
}
Разбирайтесь
eocron
Кактус
 Аватар для eocron
66 / 66 / 6
Регистрация: 23.05.2012
Сообщений: 343
26.03.2013, 17:40     Перестановки в двумерных массивах #5
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
int square(int *a[],int k)
{
    int buf;
    for(int i=0;i<k/2;i++)
    {
            for(int j=0;j<k/2;j++)
            {
                    buf = a[i][j];
                    a[i][j] = a[i+k/2][j];
                    a[i+k/2][j] = a[i+k/2][j+k/2];
                    a[i+k/2][j+k/2] = a[i][j+k/2];
                    a[i][j+k/2] = buf;
            }
    }
}
вот второе.
Yandex
Объявления
26.03.2013, 17:40     Перестановки в двумерных массивах
Ответ Создать тему
Опции темы

Текущее время: 11:42. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru