Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
#1

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

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

Ребята, какие есть идеи по поводу перестановки элементов массива крест накрест по блокам из 4 элементов? на данный момент я дошла до вот такого вида массива
0
Миниатюры
Перестановка элементов крест накрест  
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.12.2011, 16:59
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Перестановка элементов крест накрест (C++):

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

Перестановка элементов в массиве - C++
Помогите с задачкой: Дан размер массива =100 Диапазон значений от -50 до +50 Во всех последовательностях положительных чисел изменить...

Перестановка элементов очереди - C++
Нужна ваша помочь ,задача такая ребят: Написать процедуру перестановки максимального и минимального элемента очереди ?

Перестановка элементов массива - C++
Задан массив A размером n . Разместить наименьший элемент на первом месте , наименьший среди остальных - на последнем , наименьший среди...

Перестановка элементов массива - C++
Я новичок в С++ , и мне нужна помощь опытных в этой сфере людей! Смотрите, мне надо переставить элементы массива в обратном порядке....

Перестановка элементов массива - C++
Преобразовать массив таким образом, чтобы в его первой половине располагались элементы, стоящие на четных позициях, а во второй половине -...

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

Добавлено через 1 минуту
массив может быть и больше и меньше. просто именно с нечетными строками я отсекаю первую сверху строку и правый крайний столбец, ибо меняться местами элементы должны по кубикам. здесь я просто взяла 5 на 5 с уже отсеченными ненужными элементами
0
taras atavin
3570 / 1753 / 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;
  }
 }
}
1
soon
2542 / 1307 / 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;
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;
  }
 }
}
Забыла сказать, что обязательно без создания дополнительного массива!
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 17:50 #10
А какой тут новый массив создается? Это ж просто функция, хотите - включите непосредственно в main
1
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 19:55  [ТС] #11
Цитата Сообщение от soon Посмотреть сообщение
А какой тут новый массив создается? Это ж просто функция, хотите - включите непосредственно в main
вот тут вот что это значит, не подскажете?
0
Миниатюры
Перестановка элементов крест накрест  
soon
2542 / 1307 / 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;
}
1
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;
}
вот это тоже не компилируется
0
soon
2542 / 1307 / 81
Регистрация: 09.05.2011
Сообщений: 3,086
Записей в блоге: 1
04.12.2011, 21:21 #14
Ошибки в студию.
1
Nevado4ka
0 / 0 / 0
Регистрация: 18.11.2011
Сообщений: 45
04.12.2011, 21:29  [ТС] #15
прошу прощения, по глупости не заметила, что одного заголовка не хватает.
а как мне сделать, чтобы массив заполнялся с 1, а не с нолика?
0
04.12.2011, 21:29
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
04.12.2011, 21:29
Привет! Вот еще темы с ответами:

Перестановка элементов матрицы - C++
Перевернуть задом-наперёд элементы допомежной диагонали квадратной матрицы.

перестановка элементов массива - C++
задача такая, нужно сгенерировать массив(тип данных float), прочитав первый элемент и шаг прогрессии, изменить значения 3х элементов,...

Перестановка элементов массива - C++
Подскажите пожалуйста, как переставить элементы массива в указанного по указанный!!!

Перестановка элементов массива - C++
Преобразовать одномерный массив ,состоящий из n вещественных элементов таким образом,чтобы сначала располагались все элементы,целая часть...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2017, vBulletin Solutions, Inc.
Рейтинг@Mail.ru