0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
1

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

04.12.2011, 16:59. Показов 2151. Ответов 16
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
Ребята, какие есть идеи по поводу перестановки элементов массива крест накрест по блокам из 4 элементов? на данный момент я дошла до вот такого вида массива
Миниатюры
Перестановка элементов крест накрест  
0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
04.12.2011, 16:59
Ответы с готовыми решениями:

Переставить блоки матрицы размера n*n крест накрест.
Дана действительная квадратная матрица порядка 2n. Получить новую матрицу,переставляя её блоки...

Матрица крест-накрест
Рефлизовать программу по выводу на экран матрицы в виде ...

Переставить блоки матрицы крест-накрест
не мог ли бы вы помочь с решением данных задач, собственно все задачи на фото. в файлах...

Переставить блоки матрицы размера n*n крест накрест.
дана действительная квадратная матрица порядка 2n.получить новую матрицу переставляя её блоки...

16
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.12.2011, 17:01 2
А какова задача?
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 17:06 3
Nevado4ka, Если я правильно вас понял, то такая тема уже поднималась. Линк
0
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 17:07  [ТС] 4
мне нужно чтобы элементы при выводе были переставлены вот так
Миниатюры
Перестановка элементов крест накрест  
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
04.12.2011, 17:09 5
Массив именно 4*4?
0
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 17:11  [ТС] 6
нет, тут немного по-другому. размерность матрицы должна задаваться с клавиатуры и меняются местами именно элементы

Добавлено через 1 минуту
массив может быть и больше и меньше. просто именно с нечетными строками я отсекаю первую сверху строку и правый крайний столбец, ибо меняться местами элементы должны по кубикам. здесь я просто взяла 5 на 5 с уже отсеченными ненужными элементами
0
4226 / 1795 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
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;
  }
 }
}
1
2554 / 1319 / 178
Регистрация: 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;
0
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;
  }
 }
}
Забыла сказать, что обязательно без создания дополнительного массива!
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 17:50 10
А какой тут новый массив создается? Это ж просто функция, хотите - включите непосредственно в main
1
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 19:55  [ТС] 11
Цитата Сообщение от soon Посмотреть сообщение
А какой тут новый массив создается? Это ж просто функция, хотите - включите непосредственно в main
вот тут вот что это значит, не подскажете?
Миниатюры
Перестановка элементов крест накрест  
0
2554 / 1319 / 178
Регистрация: 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;
}
1
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;
}
вот это тоже не компилируется
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 21:21 14
Ошибки в студию.
1
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 21:29  [ТС] 15
прошу прощения, по глупости не заметила, что одного заголовка не хватает.
а как мне сделать, чтобы массив заполнялся с 1, а не с нолика?
0
2554 / 1319 / 178
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 21:30 16
Строка #31,
C++
1
arr[i][j] = i * ROWS + j + 1;
1
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 21:35  [ТС] 17
Большое спасибо!
0
04.12.2011, 21:35
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
04.12.2011, 21:35
Помогаю со студенческими работами здесь

[Процедуры и функции]Оформление матрицы в виде крест-накрест
Здравствуйте! Помогите пожалуйста, суть задачи такова: Сформировать матрицу С(5,5), элементы...

Получить новую матрицу, переставляя ее блоки размера n*n крест-накрест
Здравствуйте, помогите с заданием. Дана действительная квадратная матрица порядка 2n. Получить...

Получить новую матрицу, переставляя блоки исходной крест-накрест
Дана действительная квадратная матрица порядка 2n. Получить новую матрицу, переставляя её блоки...

Получить новую матрицу, переставляя ее блоки размера n крест-накрест
Пусть дана вещественная квадратная матрица порядка 2n. Получить новую матрицу, переставляя ее блоки...


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

Или воспользуйтесь поиском по форуму:
17
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru