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

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

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

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

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

Ответ
 
Опции темы Поиск в этой теме
Старый 06.09.2011, 18:59   #1
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию Циклический сдвиг элементов столбца вниз в многомерном массиве.

Подскажите, пожалуйста, как решить следующею задачу. В матрице произвести циклический сдвиг столбцов вниз.

Исходная матрица
1111
2222
3333
4444

Матрица после сдвига

1432
2143
3214
4321

Для массива столбца написал программу, но она не в цикле и ооочень примитивная.
Код:
#include <iostream>
#include <conio.h>

using namespace std;

int main ()
{
    int A [4][1]= {
                   {1},
                   {2},
                   {3},
                   {4}};
                   
            cout << "Before \n";
            for (int i=0; i<4; i++){
            for (int j=0; j<1; j++){
            cout << A[i][j] << " ";
            }
            cout << endl;
            }
            cout << endl;
            
            int temp[4][1];
            temp [0][0]=A[3][0];
            temp [1][0]=A[0][0];
            temp [2][0]=A[1][0];
            temp [3][0]=A[2][0];
		    for(int i = 0; i < 4; i++) 
		    A[i][0] = temp[i][0]; 
          
    
         
            
            cout << "After \n";
            for (int i=0; i<4; i++){
            for (int j=0; j<1; j++){
            cout << A[i][j] << " ";
            }
            cout << endl;
            }
         
            
    getch ();
    return 0;
}
И вообще можно ли в С++ так работать с столбцами, ведь я читал на форуме массивы в языке С и производных хранятся в памяти построчно.
Corvette вне форума Ответить с цитированием
Старый 07.09.2011, 18:14   #2
valeologiya
Пользователь
 
Регистрация: 07.07.2009
Сообщений: 37
По умолчанию

И в С и в С++ двумерные массивы расположены в памяти построчно. Почитайте литературу.

На Вашем месте, если не важна скорость, я бы сделал функцию, которая сдвигает один столбец на 1 позицию.

Код:
void MoveColumn( int ** ppMatr,      
                         unsigned int nRowQuantity,   
                         unsigned int nColumnNumber)   
{
    int nTempElement = ppMatr[nRowQuantity][nColumnNumber];
    for(unsigned int i = nRowQuantity-1; i>0 nRowQuantity; --i)
    {
         ppMatr[i][nColumnNumber] = ppMatr[i-1][nColumnNumber];
    }
    ppMatr[0][nColumnNumber] = nTempElement;
    return;
}
И использовал её то количество раз, сколько надо.

П.С. Код не проверял. Написал как сочинение
valeologiya вне форума Ответить с цитированием
Старый 07.09.2011, 21:15   #3
Corvette
Пользователь
 
Регистрация: 31.07.2011
Сообщений: 55
По умолчанию

Спасибо!!!
Corvette вне форума Ответить с цитированием
Ответ


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



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклический сдвиг строк в многомерном массиве. Corvette Общие вопросы C/C++ 12 29.08.2011 22:05
Массивы и циклический сдвиг элементов CHESTER_ROB Общие вопросы C/C++ 5 23.11.2010 13:46
Не получается циклический сдвиг элементов списка влево Джиксер Общие вопросы C/C++ 5 02.06.2010 23:38
C++.циклический сдвиг элементов квадратной матрицы arsalan Помощь студентам 1 11.05.2010 08:08
Циклический сдвиг столбцов в массиве С++ Помогите! Ладушка Общие вопросы C/C++ 10 01.05.2008 23:17