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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 117, средняя оценка - 4.91
PlayaRC
5 / 5 / 0
Регистрация: 10.03.2012
Сообщений: 121
#1

Циклический сдвиг массива влево и вправо - C++

03.12.2012, 01:53. Просмотров 16321. Ответов 4
Метки нет (Все метки)

Нужно реализовать циклический сдвиг массива влево и вправо!
Например есть массив int- {121605}? mass_len=6, нужно чтобы после сдвига влево на один он принял вид {211056}!
И после сдвига вправо принял свой первоначальный вид!
Уже два дня не могу сделать это, прошу помощи, хотя бы просто не большой кусок кода, заранее спасибо!

Добавлено через 18 минут
с начало число 121605 нужно разбить на группы по три числа (121, 605), а потом над каждой тройкой сделать циклический сдвиг влево
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
03.12.2012, 01:53     Циклический сдвиг массива влево и вправо
Посмотрите здесь:

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

Циклический сдвиг битов в байте влево или вправо - C++
Кто-нибудь пробовал реализовать такую задачу на С++. Если да, то какой алгоритм? Например, если 32 << 10, то в результате должны...

Циклический сдвиг односвязного списка, организованного структурами, на N элементов вправо/влево - C++
Подскажите, как лучше всего циклически сдвинуть односвязный список, организованный структурами, на N элементов вправо/влево, может ему...

Циклический сдвиг массива влево - C++
условие: задан массив целочисленный состоящий из 10 элементов нужно сделать циклический сдвиг влево так чтобы первый максимум стал на...

Циклический сдвиг массива влево - C++
Дан массив y1, ... , y20. Сформировать массив Z1, ... , Z20, элементы которого соответствуют элементам yi , сдвинутым на одну позицию...

Циклический сдвиг массива вправо - C++
дан двумерный массив MxN нужно осуществить поэлементный сдвиг вправо на 1 элемент

После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.12.2012, 01:59     Циклический сдвиг массива влево и вправо #2
http://en.cppreference.com/w/cpp/algorithm/rotate
PlayaRC
5 / 5 / 0
Регистрация: 10.03.2012
Сообщений: 121
03.12.2012, 02:10  [ТС]     Циклический сдвиг массива влево и вправо #3
сдвиг влево понял
C++
1
2
3
    for (int i=0;i<n-1;i++) 
ecrypt_text1[i]=ecrypt_text1[i+1]; 
ecrypt_text1[n-1]=first;
теперь не пойму, как сделать чтобы строка в данном цикле обрабатывалась по три символа?

Добавлено через 4 минуты
Цитата Сообщение от yuron_477 Посмотреть сообщение
тут сдвиг всей строки, а мне нужно разбить строку на части по три символа и над каждой тройкой совершить сдвиг, а потом опять соединить в одну строку! вот не пойму как разбить строку на три части

Добавлено через 2 минуты
то есть на части по три символа)
DiffEreD
1429 / 766 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.12.2012, 12:06     Циклический сдвиг массива влево и вправо #4
Можно немного поколдовать с rotate и все получится:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
#include <iostream>
#include <algorithm>
 
const size_t size = 6;
std::ostream& operator<<(std::ostream& os, const int* arr)
{
    for (size_t i = 0; i<size; ++i)
        os<<arr[i]<<" ";
    os<<std::endl;
    return os;
}
int main()
{
    int ar[size] = {1,2,1,6,0,5};
    std::cout<<"Before: "<<ar;
    std::rotate(ar, ar+1, ar+3);
    std::rotate(ar+3, ar+4, ar+size);
    std::cout<<"After:  "<<ar;
    system("pause");
    return 0;
}
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
03.12.2012, 13:02     Циклический сдвиг массива влево и вправо
Еще ссылки по теме:

Циклический сдвиг элементов массива влево - C++
Совершить циклический сдвиг элементов массива влево так, чтобы первый максимальный элемент был на K-месте ( K- вводиться с клавиатуры)

Осуществить циклический сдвиг массива вправо на m позиций - C++
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn (1&lt;=n&lt;=20). Элементы массива принимают значения от 0 до 255 и...

Произвести циклический сдвиг вправо элементов массива - C++
Люди в Си++ дуб дубом. Помагите очень надо. Вот текст задачи. Ввести одномерный целочисленный массив A, вывести его. Произвести...

Циклический сдвиг элементов массива вправо на К позиций - C++
Дан массив размера N и число К (0&lt;k&lt;5, K&lt;n) Осуществить циклический сдвиг элементов массива вправо на К позиций .

Осуществить циклический сдвиг элементов массива влево на k позиций - C++
Дан массив размера N и число k (0 &lt; k &lt; 5, k &lt; N). Осуществить циклический сдвиг элементов массива влево на k позиций. Гуглю весь день,...

Циклический сдвиг элементов массива по диагонали влево вниз - C++
Квадратный массив N×N по диагонали влево вверх. //--------------------------------------------------------------------------- ...


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

Или воспользуйтесь поиском по форуму:
-=ЮрА=-
Заблокирован
Автор FAQ
03.12.2012, 13:02     Циклический сдвиг массива влево и вправо #5
PlayaRC,ниже пример с массивом
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
46
47
48
49
50
51
52
53
54
55
#include <iostream>
#include <algorithm>
using namespace std;
 
void out_vec(int n, int * vec);
void shift_array(int n, int *arr);
void shift_three(int * vec);
 
int main()
{
    int arr[]= {1,2,1,6,0,5,7,8,9,12,13,15};
    
    int n = sizeof(arr)/sizeof(arr[0]);
    cout<<"Input array : "<<endl;
    out_vec(n, arr);
    
    cout<<"Shift1 array : "<<endl;
    shift_array(n, arr); 
    out_vec(n, arr);
    cout<<"Shift2 array : "<<endl;
    shift_array(n, arr); 
    out_vec(n, arr);
    cout<<"Shift3 array : "<<endl;
    shift_array(n, arr); 
    out_vec(n, arr);
    return 0;
}
 
void out_vec(int n, int * vec)
{
    for(int j = 0; j < n; j++)
        cout<<vec[j];
    cout<<endl;
}
 
void shift_three(int * vec)
{
    swap(vec[0], vec[1]);//2-Г© Г± 1-Г¬
    swap(vec[1], vec[2]);//2-Г© Г± 3-Г¬
}
 
void shift_array(int n, int *arr)
{
    int vec[3] = {0};
    for(int i = 0; i < n; i += 3)
    {
        vec[0] = arr[i];
        vec[1] = arr[i + 1];
        vec[2] = arr[i + 2];
        shift_three(vec);
        arr[i]     = vec[0];
        arr[i + 1] = vec[1];
        arr[i + 2] = vec[2];
    }
}
http://codepad.org/KUnBle6N

Output:
Input array :
121605789121315
Shift1 array :
211056897131512
Shift2 array :
112560978151213
Shift3 array :
121605789121315
Миниатюры
Циклический сдвиг массива влево и вправо  
Yandex
Объявления
03.12.2012, 13:02     Циклический сдвиг массива влево и вправо
Ответ Создать тему
Опции темы

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