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

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

03.12.2012, 01:53. Показов 23985. Ответов 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
Ответ Создать тему
Новые блоги и статьи
Установка Android SDK, NDK, JDK, CMake и т.д.
8Observer8 25.01.2026
Содержание блога Перейдите по ссылке: https:/ / developer. android. com/ studio и в самом низу страницы кликните по архиву "commandlinetools-win-xxxxxx_latest. zip" Извлеките архив и вы увидите. . .
Вывод текста со шрифтом TTF на Android с помощью библиотеки SDL3_ttf
8Observer8 25.01.2026
Содержание блога Если у вас не установлены Android SDK, NDK, JDK, и т. д. то сделайте это по следующей инструкции: Установка Android SDK, NDK, JDK, CMake и т. д. Сборка примера Скачайте. . .
Использование SDL3-callbacks вместо функции main() на Android, Desktop и WebAssembly
8Observer8 24.01.2026
Содержание блога Если вы откроете примеры для начинающих на официальном репозитории SDL3 в папке: examples, то вы увидите, что все примеры используют следующие четыре обязательные функции, а. . .
моя боль
iceja 24.01.2026
Выложила интерполяцию кубическими сплайнами www. iceja. net REST сервисы временно не работают, только через Web. Написала за 56 рабочих часов этот сайт с нуля. При помощи perplexity. ai PRO , при. . .
Модель сукцессии микоризы
anaschu 24.01.2026
Решили писать научную статью с неким РОманом
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
/ * Дана цепь(не выше 3-го порядка) постоянного тока с элементами R, L, C, k(ключ), U, E, J. Программа находит переходные токи и напряжения на элементах схемы классическим методом(1 и 2 з-ны. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru