Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 5.00/119: Рейтинг темы: голосов - 119, средняя оценка - 5.00
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121

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

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

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

Добавлено через 18 минут
с начало число 121605 нужно разбить на группы по три числа (121, 605), а потом над каждой тройкой сделать циклический сдвиг влево
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
03.12.2012, 01:53
Ответы с готовыми решениями:

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

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

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

4
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.12.2012, 01:59
http://en.cppreference.com/w/cpp/algorithm/rotate
0
5 / 5 / 1
Регистрация: 10.03.2012
Сообщений: 121
03.12.2012, 02:10  [ТС]
сдвиг влево понял
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 минуты
то есть на части по три символа)
0
 Аватар для DiffEreD
1458 / 795 / 257
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
03.12.2012, 12:06
Можно немного поколдовать с 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;
}
0
Автор FAQ
 Аватар для -=ЮрА=-
6614 / 4256 / 401
Регистрация: 08.08.2009
Сообщений: 10,325
Записей в блоге: 24
03.12.2012, 13:02
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
Миниатюры
Циклический сдвиг массива влево и вправо  
1
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
03.12.2012, 13:02
Помогаю со студенческими работами здесь

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

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

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

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

Рекурсия: циклический сдвиг массива вправо
дана такая задача (Напишите рекурсивную функцию, которая принимает двухмерный массив целых чисел и количество сдвигов и выполняет...


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

Или воспользуйтесь поиском по форуму:
5
Ответ Создать тему
Новые блоги и статьи
http://iceja.net/ математические сервисы
iceja 20.01.2026
Обновила свой сайт http:/ / iceja. net/ , приделала Fast Fourier Transform экстраполяцию сигналов. Однако предсказывает далеко не каждый сигнал (см ограничения http:/ / iceja. net/ fourier/ docs ). Также. . .
http://iceja.net/ сервер решения полиномов
iceja 18.01.2026
Выкатила http:/ / iceja. net/ сервер решения полиномов (находит действительные корни полиномов методом Штурма). На сайте документация по API, но скажу прямо VPS слабенький и 200 000 полиномов. . .
Расчёт переходных процессов в цепи постоянного тока
igorrr37 16.01.2026
/ * Дана цепь постоянного тока с R, L, C, k(ключ), U, E, J. Программа составляет систему уравнений по 1 и 2 законам Кирхгофа, решает её и находит переходные токи и напряжения на элементах схемы. . . .
Восстановить юзерскрипты Greasemonkey из бэкапа браузера
damix 15.01.2026
Если восстановить из бэкапа профиль Firefox после переустановки винды, то список юзерскриптов в Greasemonkey будет пустым. Но восстановить их можно так. Для этого понадобится консольная утилита. . .
Сукцессия микоризы: основная теория в виде двух уравнений.
anaschu 11.01.2026
https:/ / rutube. ru/ video/ 7a537f578d808e67a3c6fd818a44a5c4/
WordPad для Windows 11
Jel 10.01.2026
WordPad для Windows 11 — это приложение, которое восстанавливает классический текстовый редактор WordPad в операционной системе Windows 11. После того как Microsoft исключила WordPad из. . .
Classic Notepad for Windows 11
Jel 10.01.2026
Old Classic Notepad for Windows 11 Приложение для Windows 11, позволяющее пользователям вернуть классическую версию текстового редактора «Блокнот» из Windows 10. Программа предоставляет более. . .
Почему дизайн решает?
Neotwalker 09.01.2026
В современном мире, где конкуренция за внимание потребителя достигла пика, дизайн становится мощным инструментом для успеха бренда. Это не просто красивый внешний вид продукта или сайта — это. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru