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

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

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 117, средняя оценка - 4.91
PlayaRC
4 / 4 / 0
Регистрация: 10.03.2012
Сообщений: 121
03.12.2012, 01:53     Циклический сдвиг массива влево и вправо #1
Нужно реализовать циклический сдвиг массива влево и вправо!
Например есть массив int- {121605}? mass_len=6, нужно чтобы после сдвига влево на один он принял вид {211056}!
И после сдвига вправо принял свой первоначальный вид!
Уже два дня не могу сделать это, прошу помощи, хотя бы просто не большой кусок кода, заранее спасибо!

Добавлено через 18 минут
с начало число 121605 нужно разбить на группы по три числа (121, 605), а потом над каждой тройкой сделать циклический сдвиг влево
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
DiffEreD
 Аватар для DiffEreD
1420 / 757 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.12.2012, 01:59     Циклический сдвиг массива влево и вправо #2
http://en.cppreference.com/w/cpp/algorithm/rotate
PlayaRC
4 / 4 / 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
 Аватар для DiffEreD
1420 / 757 / 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;
}
-=ЮрА=-
Заблокирован
Автор 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     Циклический сдвиг массива влево и вправо
Ответ Создать тему
Опции темы

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