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

Перестановка элементов крест накрест - C++

Восстановить пароль Регистрация
 
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 16:59     Перестановка элементов крест накрест #1
Ребята, какие есть идеи по поводу перестановки элементов массива крест накрест по блокам из 4 элементов? на данный момент я дошла до вот такого вида массива
Миниатюры
Перестановка элементов крест накрест  
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2011, 16:59     Перестановка элементов крест накрест
Посмотрите здесь:

C++ Перестановка элементов массива!!!
C++ Перестановка элементов массива
Переставить блоки матрицы размера n*n крест накрест. C++
Перестановка элементов C++
Перестановка элементов матрицы C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2011, 17:01     Перестановка элементов крест накрест #2
А какова задача?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 17:06     Перестановка элементов крест накрест #3
Nevado4ka, Если я правильно вас понял, то такая тема уже поднималась. Линк
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 17:07  [ТС]     Перестановка элементов крест накрест #4
мне нужно чтобы элементы при выводе были переставлены вот так
Миниатюры
Перестановка элементов крест накрест  
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2011, 17:09     Перестановка элементов крест накрест #5
Массив именно 4*4?
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 17:11  [ТС]     Перестановка элементов крест накрест #6
нет, тут немного по-другому. размерность матрицы должна задаваться с клавиатуры и меняются местами именно элементы

Добавлено через 1 минуту
массив может быть и больше и меньше. просто именно с нечетными строками я отсекаю первую сверху строку и правый крайний столбец, ибо меняться местами элементы должны по кубикам. здесь я просто взяла 5 на 5 с уже отсеченными ненужными элементами
taras atavin
Ушёл с форума.
 Аватар для taras atavin
3569 / 1752 / 91
Регистрация: 24.11.2009
Сообщений: 27,619
04.12.2011, 17:16     Перестановка элементов крест накрест #7
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void resort(int **a, int n)
{
 int i;
 int j;
 int n1;
 int n2;
 n1=(n-1)/2)*2+1;
 n2=(n-1)/2)*2;
 for (i=1; i<n1; i+=2)
 {
  for (j=0; j<n2; j+=2) 
  {
   t=a[i][j];
   a[i][j]=a[i+1][j+1];
   a[i+1][j+1]=t;
   t=a[i][j+1];
   a[i][j+1]=a[i+1][j];
   a[i+1][j]=t;
  }
 }
}
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 17:26     Перестановка элементов крест накрест #8
Цитата Сообщение от Nevado4ka Посмотреть сообщение
просто именно с нечетными строками я отсекаю первую сверху строку и правый крайний столбец
Так в ТЗ прописано? Или можно отсекать любые?

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T> void swapInSqr(T **arr, int rows, int cols)
{
    rows -= (rows & 1);
    cols -= (cols & 1);
    
    for(int i = 0; i < rows; i += 2)
        for(int j = 0; j < cols; j += 2)
        {
            T tmp = arr[i][j];
            arr[i][j] = arr[i + 1][j + 1];
            arr[i + 1][j + 1] = tmp;
            
            tmp = arr[i][j + 1];
            arr[i][j + 1] = arr[i + 1][j];
            arr[i + 1][j] = tmp;
        }
}
При нечетном количестве строк, отсекает нижнюю строку, при нечетном количестве столбцов - правый. Чтобы изменить к примеру столбцы, нужно убрать строчку cols -= (cols & 1); и в цикле прописать int j = (cols & 1), т.е. этот
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T> void swapInSqr(T **arr, int rows, int cols)
{
    rows -= (rows & 1);
    
    for(int i = 0; i < rows; i += 2)
        for(int j = (cols & 1); j < cols; j += 2)
        {
            T tmp = arr[i][j];
            arr[i][j] = arr[i + 1][j + 1];
            arr[i + 1][j + 1] = tmp;
            
            tmp = arr[i][j + 1];
            arr[i][j + 1] = arr[i + 1][j];
            arr[i + 1][j] = tmp;
        }
}
будет отсекать нижнюю строку и левый столбец. С изменением строки аналогично меняете int i = 0;
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 17:49  [ТС]     Перестановка элементов крест накрест #9
Цитата Сообщение от soon Посмотреть сообщение
Так в ТЗ прописано? Или можно отсекать любые?

Добавлено через 8 минут
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
template <class T> void swapInSqr(T **arr, int rows, int cols)
{
    rows -= (rows & 1);
    cols -= (cols & 1);
    
    for(int i = 0; i < rows; i += 2)
        for(int j = 0; j < cols; j += 2)
        {
            T tmp = arr[i][j];
            arr[i][j] = arr[i + 1][j + 1];
            arr[i + 1][j + 1] = tmp;
            
            tmp = arr[i][j + 1];
            arr[i][j + 1] = arr[i + 1][j];
            arr[i + 1][j] = tmp;
        }
}
При нечетном количестве строк, отсекает нижнюю строку, при нечетном количестве столбцов - правый. Чтобы изменить к примеру столбцы, нужно убрать строчку cols -= (cols & 1); и в цикле прописать int j = (cols & 1), т.е. этот
код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
template <class T> void swapInSqr(T **arr, int rows, int cols)
{
    rows -= (rows & 1);
    
    for(int i = 0; i < rows; i += 2)
        for(int j = (cols & 1); j < cols; j += 2)
        {
            T tmp = arr[i][j];
            arr[i][j] = arr[i + 1][j + 1];
            arr[i + 1][j + 1] = tmp;
            
            tmp = arr[i][j + 1];
            arr[i][j + 1] = arr[i + 1][j];
            arr[i + 1][j] = tmp;
        }
}
будет отсекать нижнюю строку и левый столбец. С изменением строки аналогично меняете int i = 0;
в ТЗ сказано что отсекать нужно сверху и справа... а я еще забыла сказать, что нужно все это проделать без создания доп. массива

Добавлено через 38 секунд
Цитата Сообщение от taras atavin Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
void resort(int **a, int n)
{
 int i;
 int j;
 int n1;
 int n2;
 n1=(n-1)/2)*2+1;
 n2=(n-1)/2)*2;
 for (i=1; i<n1; i+=2)
 {
  for (j=0; j<n2; j+=2) 
  {
   t=a[i][j];
   a[i][j]=a[i+1][j+1];
   a[i+1][j+1]=t;
   t=a[i][j+1];
   a[i][j+1]=a[i+1][j];
   a[i+1][j]=t;
  }
 }
}
Забыла сказать, что обязательно без создания дополнительного массива!
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 17:50     Перестановка элементов крест накрест #10
А какой тут новый массив создается? Это ж просто функция, хотите - включите непосредственно в main
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 19:55  [ТС]     Перестановка элементов крест накрест #11
Цитата Сообщение от soon Посмотреть сообщение
А какой тут новый массив создается? Это ж просто функция, хотите - включите непосредственно в main
вот тут вот что это значит, не подскажете?
Миниатюры
Перестановка элементов крест накрест  
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 20:32     Перестановка элементов крест накрест #12
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
#include <iostream>
#include <iomanip>
 
template <class T> void swapInSqr(T **arr, int rows, int cols)
{
    cols -= (cols & 1);
    
    for(int i = (rows & 1); i < rows; i += 2)
        for(int j = 0; j < cols; j += 2)
        {
            T tmp = arr[i][j];
            arr[i][j] = arr[i + 1][j + 1];
            arr[i + 1][j + 1] = tmp;
            
            tmp = arr[i][j + 1];
            arr[i][j + 1] = arr[i + 1][j];
            arr[i + 1][j] = tmp;
        }
}
 
int main()
{
    const int ROWS = 5;
    const int COLS = 5;
    int **arr = new int* [ROWS];
    for(int i = 0; i < ROWS; ++i)
    {
        arr[i] = new int [COLS];
        for(int j = 0; j < COLS; ++j)
        {
            arr[i][j] = i * ROWS + j;
            std::cout << std::setw(5) << arr[i][j];
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
    swapInSqr(arr, ROWS, COLS);
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
            std::cout << std::setw(5) << arr[i][j];
        std::cout << std::endl;
    }
    return 0;
}
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 21:19  [ТС]     Перестановка элементов крест накрест #13
Цитата Сообщение от soon Посмотреть сообщение
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
#include <iostream>
#include <iomanip>
 
template <class T> void swapInSqr(T **arr, int rows, int cols)
{
    cols -= (cols & 1);
    
    for(int i = (rows & 1); i < rows; i += 2)
        for(int j = 0; j < cols; j += 2)
        {
            T tmp = arr[i][j];
            arr[i][j] = arr[i + 1][j + 1];
            arr[i + 1][j + 1] = tmp;
            
            tmp = arr[i][j + 1];
            arr[i][j + 1] = arr[i + 1][j];
            arr[i + 1][j] = tmp;
        }
}
 
int main()
{
    const int ROWS = 5;
    const int COLS = 5;
    int **arr = new int* [ROWS];
    for(int i = 0; i < ROWS; ++i)
    {
        arr[i] = new int [COLS];
        for(int j = 0; j < COLS; ++j)
        {
            arr[i][j] = i * ROWS + j;
            std::cout << std::setw(5) << arr[i][j];
        }
        std::cout << std::endl;
    }
    std::cout << std::endl;
    swapInSqr(arr, ROWS, COLS);
    for(int i = 0; i < ROWS; ++i)
    {
        for(int j = 0; j < COLS; ++j)
            std::cout << std::setw(5) << arr[i][j];
        std::cout << std::endl;
    }
    return 0;
}
вот это тоже не компилируется
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 21:21     Перестановка элементов крест накрест #14
Ошибки в студию.
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 21:29  [ТС]     Перестановка элементов крест накрест #15
прошу прощения, по глупости не заметила, что одного заголовка не хватает.
а как мне сделать, чтобы массив заполнялся с 1, а не с нолика?
soon
 Аватар для soon
2536 / 1301 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 21:30     Перестановка элементов крест накрест #16
Строка #31,
C++
1
arr[i][j] = i * ROWS + j + 1;
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2011, 21:35     Перестановка элементов крест накрест
Еще ссылки по теме:

Перестановка элементов массива C++
Перестановка элементов массива C++
Перестановка элементов очереди C++

Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 21:35  [ТС]     Перестановка элементов крест накрест #17
Большое спасибо!
Yandex
Объявления
04.12.2011, 21:35     Перестановка элементов крест накрест
Ответ Создать тему
Опции темы

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