Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
1

Как сделать цикличный сдвиг?

20.01.2015, 00:52. Показов 1511. Ответов 12
Метки нет (Все метки)

Подскажите как сделать цикличный сдвиг.
1) влево
2) вправо.

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
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    const int size = 10;
    int a[size],temp;
    
    for (int i = 0; i < size; ++i)
    {
        a[i] = rand() % 10;
        cout << a[i];
    }
    for (int i = 0; i < size; i++)
    {
        temp = a[i];
        a[i] = a[size - i-1];
        a[size - i-1] = temp;
    }
    cout << '\n';
    for (int i = 0; i < size; i++)
        cout << a[i] << ' ';
    }
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
20.01.2015, 00:52
Ответы с готовыми решениями:

Цикличный сдвиг элементов последовательности на 1 позицию
Дано натуральное число n (n&lt;100), целое число k (k=\pm 1) и последовательность целых чисел а1, а2,...

Подскажите, как сделать сдвиг массива вправо для вставки нового элемента?
// После каждого четного числа добавить число 0. const int n=10; int ar,k=n,t; for(int...

Проверить, как организована память в двумерном массиве. Сделать сдвиг вправо для каждой строчки двумерного мас
Проверить, как организована память в двумерном массиве. Сделать сдвиг вправо для каждой строчки...

Сделать сдвиг на количество символов в строке
Пытаюсь взять длину сообщения. if (isalpha(mess)) mess=0x(strlen(mess)); Пишет:...

12
Диссидент
Эксперт C
26355 / 16361 / 3558
Регистрация: 24.12.2010
Сообщений: 36,237
20.01.2015, 01:08 2
Цитата Сообщение от paradox_1326 Посмотреть сообщение
for (int i = 0; i < size; i++)
* * {
* * * * temp = a[i];
* * * * a[i] = a[size - i-1];
* * * * a[size - i-1] = temp;
* * }
Это не циклический сдвиг. Это - инверсия (неудачная, ибо она оставляет все на своих местах, два раза переворачивает). для правильной инверсии условие цикла должно быть
C++
1
i <= size/2
0
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
20.01.2015, 01:46  [ТС] 3
а нужно чтобы был сдвиг, я не понимаю как этот сдвиг сделать.

Добавлено через 11 минут
вот попробовал переделать но запутлся во всем что только можно.
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
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    const int size = 10;
    int a[size],temp;
    
    for (int i = 0; i < size; ++i)
    {
        a[i] = rand() % 10;
        cout << a[i];
    }
    for (int i = i-1; i >=0; i--)
    {
        temp = a[i-1];
        a[i+1] = a[i];
        a[0] = temp;
    }
    cout << '\n';
    for (int i = 0; i < size; i++)
        cout << a[i] << ' ';
    }
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.01.2015, 01:50 4
paradox_1326, напиши условие задачи
0
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
20.01.2015, 01:53  [ТС] 5
есть массив из 10- случайных элеменнтов, нужно вывести циклический сдвиг на 1 влево, и циклический сдвиг н а 1 вправо.
0
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.01.2015, 02:04 6
paradox_1326,
сдвиг на k элементов:
1. переворачиваешь первые k элементов
2. переворачиваешься элементы от k до конца массива
3. переворачиваешься все элементы массива
в твоем случае k = 1
0
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
20.01.2015, 02:08  [ТС] 7
все равно не понимаю как это записать(((
0
26 / 26 / 18
Регистрация: 16.01.2014
Сообщений: 161
20.01.2015, 02:15 8
Лучший ответ Сообщение было отмечено paradox_1326 как решение

Решение

C++
1
2
3
4
5
int temp = a[0];
for(int i = 0; i < 9; i++) {
a[i] = a[i+1];
}
a[9] = temp;
1
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
20.01.2015, 14:44  [ТС] 9
нет не работатет.

Добавлено через 7 часов 56 минут
((( все равно не получается (((

Добавлено через 4 часа 12 минут
немного подкоректировал но все равно выдает ошибку. в консоли.((((
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
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    const int n = 10;
    int a[n];
    for (int i = 0; i < n; ++i)
    {
        a[i] = rand() % 10;
        cout << a[i];
    }
    int temp=a[0];
    for (int i = 0; i < n; i++) 
    {
        a[i] = a[i + 1];
        a[i-1] = temp;
    }
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << ' ';
    }
    
}
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.01.2015, 14:50 10
Что то я тоже прогнал.
0
0 / 0 / 3
Регистрация: 17.12.2014
Сообщений: 111
20.01.2015, 14:52  [ТС] 11
)))) ГОТОВО.

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
#include<iostream>
#include<cstdlib>
#include<ctime>
using namespace std;
void main()
{
    srand((int)time(0));
    const int n = 10;
    int a[n];
    for (int i = 0; i < n; ++i)
    {
        a[i] = rand() % 10;
        cout << a[i] << '\n';
    }
    int temp=a[0];
    for (int i = 0; i < 9; i++) 
    {
        a[i] = a[i + 1];
        a[9] = temp;
    }
    for (int i = 0; i < n; i++)
    {
        cout << a[i] << ' ';
    }
}
0
4200 / 1792 / 211
Регистрация: 24.11.2009
Сообщений: 27,562
20.01.2015, 14:56 12
C++
1
2
3
4
5
6
t=a[0];
for (i=0; i<size; ++i)
{
 a[i]=a[(i+1)%size];
}
a[size-1]=t;
1
571 / 539 / 280
Регистрация: 25.12.2013
Сообщений: 1,456
20.01.2015, 15:01 13
Цитата Сообщение от paradox_1326 Посмотреть сообщение
есть массив из 10- случайных элеменнтов, нужно вывести циклический сдвиг на 1 влево, и циклический сдвиг н а 1 вправо.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include<iostream>
#include<vector>
#include<algorithm>
#include<iterator>
int main()
{
    std::vector<int> ivec = {1,2,3,4,5,6,7,8,9};
    std::copy(ivec.begin(),ivec.end(),std::ostream_iterator<int> (std::cout," "));
    size_t const k = 1;
    std::rotate(ivec.begin(), ivec.begin() + k, ivec.end());
    std::cout<<"\nleft: ";
    std::copy(ivec.begin(),ivec.end(),std::ostream_iterator<int> (std::cout," "));
    std::rotate(ivec.rbegin(), ivec.rbegin() + 1, ivec.rend());
    std::cout<<"\nRight: ";
    std::copy(ivec.begin(),ivec.end(),std::ostream_iterator<int> (std::cout," "));
    return 0;
}
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
20.01.2015, 15:01

Цикличный include
Добрый день. Есть вот такая вот реализация. Помогите пожалуйста правильно расстваить extern чтобы...

матрица,цикличный здвиг
Дана матрица m,n. По жыланию пользавателя осушествить циклычний здвиг елементов строки або столбца...

Где и когда уместно применять операции << (сдвиг влево) и >> (сдвиг вправо)?
Кто может привести пример , когда нужно использовать операции: 1) &lt;&lt; сдвиг влево 2) &gt;&gt; сдвиг...

Как сделать цикличный ввод данных?
Как сделать цикличный ввод данных например мне нужно выпытвть у пользователя значения для каждого ...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru