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

Циклический сдвиг столбцов - C++

Восстановить пароль Регистрация
 
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
20.10.2011, 17:44     Циклический сдвиг столбцов #1
Добрый день!!!

Подскажите, пожалуйста, где у меня ошибка в программу.

Программа реализует циклический сдвиг столбцов массива влево.

То есть из исходного массива
1 0 0 1
1 1 0 1
0 1 0 1
0 1 1 0

Получить массив

0 0 1 1
1 0 1 1
1 0 1 0
1 1 0 0


Но у меня получается
0 0 1 0
1 0 1 0
1 0 1 0
1 1 0 0

Где ошибка???

Код
#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

const int size1 = 4, size2=4;

int main ()
{
    int A [size1][size2] = {{1,0,0,1},
                           {1,1,0,1},
                           {0,1,0,1},
                           {0,1,1,0}};
    
    for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    cout << A[i][j] << " ";
    }
    cout << endl;
    }
    cout << endl;
    
    int c=0;
    for (int i=0; i<size1; i++) 
    { 
    c = A [i][0];
    }
    
    for (int i=0; i<size1; i++)  
    {
    for (int j=1; j<size2; j++) 
    {
        A [i][j-1] = A[i][j];
    }
    }
    
    for (int i=0; i<size1; i++) 
    { 
    A [i][size2-1] = c;
    }
 
 
     for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    cout << A[i][j] << " ";
    }
    cout << endl;
    }
    
    getch ();
    return 0;
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2011, 17:44     Циклический сдвиг столбцов
Посмотрите здесь:

C++ Циклический сдвиг битов 2
C++ Циклический сдвиг.
Циклический сдвиг C++
C++ циклический сдвиг
C++ Циклический сдвиг массива
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2011, 18:24     Циклический сдвиг столбцов #2
Цитата Сообщение от Corvette Посмотреть сообщение
Где ошибка???
Вы пытаетесь в переменной? предназначенной для хранения одного значения типа int сохранить целый столбец значений типа int:

Цитата Сообщение от Corvette Посмотреть сообщение
int c=0;
for (int i=0; i<size1; i++)
{
c = A [i][0];
}
замените int c; на int c[size1] и немного переделайте код и все получится.
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
20.10.2011, 18:34  [ТС]     Циклический сдвиг столбцов #3
Спасибо за подсказку!!!
Я реально протупил. Теперь все работает.
Код
#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

const int size1 = 4, size2=4;

int main ()
{
    int A [size1][size2] = {{1,0,0,1},
                           {1,1,0,1},
                           {0,1,0,1},
                           {0,1,1,0}};
    
    for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    cout << A[i][j] << " ";
    }
    cout << endl;
    }
    cout << endl;
    
    int c [4][1]= {{0}};
    for (int i=0; i<size1; i++) 
    { 
    c [i][0]= A [i][0];
    }
    
    for (int i=0; i<size1; i++)  
    {
    for (int j=1; j<size2; j++) 
    {
        A [i][j-1] = A[i][j];
    }
    }
    
    for (int i=0; i<size1; i++) 
    { 
    A [i][size2-1] = c [i][0];
    }
 
 
     for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    cout << A[i][j] << " ";
    }
    cout << endl;
    }
    
    getch ();
    return 0;
}
valeriikozlov
Эксперт C++
 Аватар для valeriikozlov
4660 / 2486 / 321
Регистрация: 18.08.2009
Сообщений: 4,550
20.10.2011, 19:05     Циклический сдвиг столбцов #4
Corvette,
Цитата Сообщение от Corvette Посмотреть сообщение
int c [4][1]= {{0}};
можно просто обойтись: int c[4];
тогда будет так:
C++
1
2
3
4
    for (int i=0; i<size1; i++) 
    { 
    c [i]= A [i][0];
    }
ну и далее таким же образом.
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.10.2011, 19:42     Циклический сдвиг столбцов #5
Можно еще построчно, вот что в голову пришло
C++
1
2
3
4
5
6
7
8
9
for ( int i = 0; i < size; i ++ )
{
    int temp = arr[ i ][ 0 ];
    for ( int j = 0; j < size; j++ )
        if ( j == size - 1 )
            arr[ i ][ j ] = temp;
        else
            arr[ i ][ j ] = arr[ i ][ j + 1 ];
}
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
20.10.2011, 22:40  [ТС]     Циклический сдвиг столбцов #6
Спасибо за ответы!!!

Добавлено через 1 час 31 минуту
Подскажите пожалуйста, что надо сделать чтобы получились сдвинуть влево к раз в данном случаи 4
Вот написал но пока чего то получается.

Заранее благодарен за помощь!!!!!!!!!!!

Код
#include <iostream>
#include <conio.h>
#include <fstream>

using namespace std;

const int size1 = 4, size2=4;

int main ()
{
    int A [size1][size2] = {{1,0,0,1},
                           {1,1,0,1},
                           {0,1,0,1},
                           {0,1,1,0}};
    
    int B [4][size1][size2] = {{{0}}};
    for (int k=0; k<4; k++)
    {
    for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    B [k][i][j] = A[i][j];
    }
    }
    }
/*
      for (int k=0; k<4; k++)
    {
     for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    cout << B[k][i][j] << " ";
    }
    cout << endl;
    }
    cout << endl;
}
    */
    
    int c [4][4][1]= {{0}};
    
    for (int k=0; k<4; k++)
    {
    for (int i=0; i<size1; i++) 
    { 
    c [k][i][0]= B [k][i][0];
    }
    }
    
    for (int k=0; k<4; k++)
    {
    for (int i=0; i<size1; i++)  
    {
    for (int j=1; j<size2; j++) 
    {
        B [k][i][j-1] = B [k][i][j];
    }
    }
    }
    for (int k=0; k<4; k++)
    {
    for (int i=0; i<size1; i++) 
    { 
    B [k][i][size2-1] = c [k][i][0];
    }
    }
 
 
 
    for (int k=0; k<4; k++)
    {
     for (int i=0; i<size1; i++) 
    { 
    for (int j=0; j<size2; j++) 
    {
    cout << B[k][i][j] << " ";
    }
    cout << endl;
    }
    cout << endl;
}
    
    getch ();
    return 0;
}
Toshkarik
 Аватар для Toshkarik
1139 / 856 / 50
Регистрация: 03.08.2011
Сообщений: 2,381
Завершенные тесты: 1
20.10.2011, 22:43     Циклический сдвиг столбцов #7
C++
1
2
3
4
5
6
7
8
9
10
for ( int k = 1; k <= 4; k++ )
    for ( int i = 0; i < size; i ++ )
    {
        int temp = arr[ i ][ 0 ];
        for ( int j = 0; j < size; j++ )
            if ( j == size - 1 )
                arr[ i ][ j ] = temp;
            else
                arr[ i ][ j ] = arr[ i ][ j + 1 ];
    }
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2011, 00:00     Циклический сдвиг столбцов
Еще ссылки по теме:

Циклический сдвиг C++
C++ Циклический сдвиг
Выполнить циклический сдвиг массива на заданное количество столбцов C++

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

Или воспользуйтесь поиском по форуму:
Corvette
1 / 1 / 0
Регистрация: 09.09.2011
Сообщений: 45
21.10.2011, 00:00  [ТС]     Циклический сдвиг столбцов #8
Спасибо Toshkarik!!!

Все работает, спасибо!!!!!
Код
const int size = 4;

int main ()
{
    int arr [size][size] = {{1,0,0,1},
                           {1,1,0,1},
                           {0,1,0,1},
                           {0,1,1,0}};

    

for ( int k = 1; k <= 4; k++ ){
        for ( int i = 0; i < size; i ++ )
        {
                int temp = arr[ i ][ 0 ];
                for ( int j = 0; j < size; j++ )
                        if ( j == size - 1 )
                                arr[ i ][ j ] = temp;
                        else
                                arr[ i ][ j ] = arr[ i ][ j + 1 ];                
        }
        
        
    for (int z=0; z<size; z++) 
    { 
    for (int y=0; y<size; y++) 
    {
    cout << arr [z][y] << " ";
    }
    cout << endl;
    }
    cout << endl;

}
Yandex
Объявления
21.10.2011, 00:00     Циклический сдвиг столбцов
Ответ Создать тему
Опции темы

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