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

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

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

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

20.10.2011, 17:44. Просмотров 813. Ответов 7
Метки нет (Все метки)

Добрый день!!!

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

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

То есть из исходного массива
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;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
20.10.2011, 17:44
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Циклический сдвиг столбцов (C++):

Динамические массивы,циклический сдвиг столбцов массива - C++
Здравствуйте, Нужно сдвинуть столбцы динамической матрицы циклически вправо, у меня почему то ошибка, подскажите пожалуйста в чем...

Выполнить циклический сдвиг массива на заданное количество столбцов - C++
Дан двумерный массив размерностью N x M, заполненный случайными числами из диапазона от 0 до 100. Выполнить циклический сдвиг массива на...

Выполнить циклический сдвиг двумерного массива на заданное количество столбцов - C++
Дан двумерный массив размерностью N x M, заполненный случайными числами из диапазона от 0 до 100. Выполнить циклический сдвиг массива на...

Написать функцию, осуществляющую циклический сдвиг строк и/или столбцов заданной матрицы - C++
2. Дана матрица порядка MxN (M строк, N столбцов). Необходимо заполнить ее значениями и написать функцию, осуществляющую циклический сдвиг...

циклический сдвиг - C++
написать программу на СИ (обычном ,НЕ Си++), используя символьные массивы : Если число отрицательных элементов масива А чётно,то...

Циклический сдвиг. - C++
Нужно написать вот такую прогу, где нужно сдвинуть число а на n бит влево.

7
valeriikozlov
Эксперт С++
4673 / 2499 / 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] и немного переделайте код и все получится.
1
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;
}
0
valeriikozlov
Эксперт С++
4673 / 2499 / 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];
    }
ну и далее таким же образом.
1
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 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 ];
}
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;
}
0
Toshkarik
1143 / 860 / 51
Регистрация: 03.08.2011
Сообщений: 2,390
Завершенные тесты: 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 ];
    }
2
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;

}
0
21.10.2011, 00:00
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2011, 00:00
Привет! Вот еще темы с ответами:

Циклический сдвиг - C++
Здравствуйте помогите пожалуйста мне надо все нечетные строки матрицы сдвинуть циклически на К элементов влево. Знаю тут ужас но не...

Циклический сдвиг - C++
Ребята, в чем может быть проблема? Надо организовать ф-цию циклического сдвига вправо. ТО бишь x-&gt;y, y-&gt;z, z-&gt;x. Что я делаю не так? ...

Циклический сдвиг числа - C++
Написать программу, которая предлагает пользователю ввести пятизначное число и циклически сдвигает его влево и выводит результат в консоль....

циклический сдвиг подскажите - C++
Необходимо написать программу со следующей функциональностью: 2. Функции циклического сдвига влево и вправо на заданное число...


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

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

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