Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 5.00/3: Рейтинг темы: голосов - 3, средняя оценка - 5.00
minimaks
0 / 0 / 1
Регистрация: 17.11.2015
Сообщений: 12
#1

Осуществить циклический сдвиг элементов одномерного массива на k позиций

18.11.2015, 16:23. Просмотров 605. Ответов 9
Метки нет (Все метки)

работает правильно только если k=1 если больше то сдвиг делает правильно, но когда на место их переносит числа путает их, что не так?

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
#include "stdafx.h" 
#include <ctime>
#include <iostream> 
 
#define SIZE 6
int main()
{
    srand(time(0));
    //const int size = 6;
    int arr[SIZE];
    int k;
    
    for (int i = 0; i < SIZE; i++)
    {
        arr[i] = rand() % 9;
        std::cout << arr[i] << " ";
    }
    printf("\n");
    printf("vvedite chislo: \n");
    scanf_s("%i", &k);
    printf("\n");
    int tmp = arr[SIZE - k];
    for (int i = SIZE + k; i >= 0; i--)
        arr[i + k] = arr[i];
    arr[1] = tmp;
    std::cout << std::endl;
    for (int i = 0; i < SIZE; i++) 
        std::cout << arr[i] << " ";
    getc(0);
    return 0;
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
18.11.2015, 16:23
Ответы с готовыми решениями:

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

Осуществить циклический сдвиг элементов массива вправо на k позиций
Решаю задачи на сервере одном, задание было &quot;Дан массив размера N ≥ 2 и число...

Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций
Добрый день ребят, очень нужна Ваша помощь. Помогите решить задачу. Дан...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на...

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента
Помогите пожалуйста решить эту задачу, Дан массив размера N. Осуществить...

9
mster-doc
14 / 14 / 12
Регистрация: 10.11.2012
Сообщений: 239
18.11.2015, 20:24 #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
#include <iostream> 
#include <conio.h>
 
using namespace std;
 
int main()
{
    int a[] = {4,12,0,34,5};
    
    int k=1;
    
    rotate(a, a+k, a+5);    // а+к - то на сколько нужно сдвинуть 
                                     // а+5  - размер
     
    for(int i=0;i<5;i++)
    {
            cout<<a[i]<<" ";
    }
     
    cout<<endl;
     
    getch();
    return 0;
}
1
Байт
Эксперт C
17936 / 11927 / 2478
Регистрация: 24.12.2010
Сообщений: 24,021
01.11.2016, 09:48 #3
Прошу прощения, что залез в такую толщу веков. Но уж если залез, оставляю метку для грядущих поколений. Оба кода - бредовы.
0
MrGluck
Модератор
Эксперт CЭксперт С++
8075 / 4927 / 1431
Регистрация: 29.11.2010
Сообщений: 13,352
01.11.2016, 09:53 #4
Функция циклического сдвига массива
0
SatanaXIII
Супер-модератор
Эксперт С++
5773 / 2772 / 376
Регистрация: 01.11.2011
Сообщений: 6,744
Завершенные тесты: 1
01.11.2016, 09:54 #5
Осуществить циклический сдвиг элементов массива вправо на k позиций
Функция циклического сдвига массива
0
Babysitter
208 / 125 / 50
Регистрация: 23.11.2015
Сообщений: 369
Завершенные тесты: 2
01.11.2016, 11:10 #6
Цитата Сообщение от Байт Посмотреть сообщение
Оба кода - бредовы.
ну тот парень по крайней мере попробовал использовать std::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>
 
using namespace std;
 
int main()
{
    int a[] {4, 12, 0, 34, 5};
    int k = 1;  // shift for
    size_t sz = end(a) - begin(a);
 
    if (k > sz) {
        k = k % sz;
    }
    rotate(begin(a), end(a) - k, end(a));
 
    for (auto i : a) {
        cout << i << " ";
    }
    cout << endl;
}
Добавлено через 29 минут
а, так товарищ просто сдвигал влево, что-то я тогда совсем не понимаю такого грубого наезда.
0
Байт
Эксперт C
17936 / 11927 / 2478
Регистрация: 24.12.2010
Сообщений: 24,021
01.11.2016, 15:11 #7
Babysitter, Еще раз повторю. Оба коды - бредовы настолько, что аргументировать неохота. И это не входило в мои планы. Ибо видно и без аргументов. Я просто искал в "нижних подсказках", на чтобы сослаться. И случайно попал на этот топ. Подумав, что кто-то может это принять как руководство к действию, счел своим долгом всякий случай предупредить.
Ну а для тех, у кого неважно с глазками, говорю по буквам.
Код 1. Строки 23-24 При неотрицательном k происходит выход за границы массива. Лично мне этого достаточно для оценки кода. А вам, видимо, нужно чтобы из системного блока дым повалил?
Код 2. Строка 12. Что за функция rotate? Если она из std, то она работает с классом ForwardIt. Где этот класс? Где #include <algorithm>? Какова познавательная ценность этого шаляй-валяйного поста?
Вам достаточно, или охота еще поболтать на эту пустую тему?
0
MrGluck
Модератор
Эксперт CЭксперт С++
8075 / 4927 / 1431
Регистрация: 29.11.2010
Сообщений: 13,352
01.11.2016, 15:21 #8
Цитата Сообщение от Байт Посмотреть сообщение
то она работает с классом ForwardIt
ForwardIt - абстракция, параметр шаблона. Указатель на массив вполне под него подходит.
Из определения rotate
C++
1
2
3
template <class ForwardIterator>
ForwardIterator rotate (ForwardIterator first, ForwardIterator middle,
                        ForwardIterator last);
То есть просто не хватало заголовочного файла.
2
Байт
Эксперт C
17936 / 11927 / 2478
Регистрация: 24.12.2010
Сообщений: 24,021
01.11.2016, 15:28 #9
Цитата Сообщение от MrGluck Посмотреть сообщение
То есть просто не хватало заголовочного файла.
Не надо оправдывать автора поста 2. Тем более, что я его вовсе не осуждаю. Хотел помочь человек. Сделал это как мог. Но руководством для ищущих его пост являться не может. Вот и все, что я хотел сказать.

Не по теме:

Babysitter, а вас я хочу успокоить. Вам не стоит опасаться "симметричного ответа". Не потому что я такой добрый. Просто я считаю возможность отрицательных отзывов штукой неправильной. И никогда к ней не прибегал и в дальнейшим не собираюсь. Ну а тем, кто этой возможностью все-таки пользуется, рекомендую подумать.

0
Babysitter
208 / 125 / 50
Регистрация: 23.11.2015
Сообщений: 369
Завершенные тесты: 2
01.11.2016, 15:47 #10
Цитата Сообщение от Байт Посмотреть сообщение
Какова познавательная ценность этого шаляй-валяйного поста?
немного неряшливо, но человек отправил почитать про std::rotate.
это забавно, но не так уж много программистов знают об этой функции.

из-за этого ценность такого поста гораздо выше, чем у велосипедов, которые предложены в других топиках.
из-за этого я тут и впрягаюсь за второй листинг - он полезен, вот еще классная штука на посмотреть, в тему [ссылка на ютуб с таймкодом].

Добавлено через 9 минут

Не по теме:

Цитата Сообщение от Байт Посмотреть сообщение
Babysitter, а вас я хочу успокоить. Вам не стоит опасаться "симметричного ответа". Не потому что я такой добрый. Просто я считаю возможность отрицательных отзывов штукой неправильной. И никогда к ней не прибегал и в дальнейшим не собираюсь. Ну а тем, кто этой возможностью все-таки пользуется, рекомендую подумать.
опять же, без этой мотивации вы бы никогда больше не вернулись в эту тему, а не все еще было сказано. я хотел показать, что не вникнув во второй листинг вы несправедливо его обвинили. меня один упертый борландовец уже отучил бояться. он был неправ, но забрал у меня всю карму, так что эти цифры мало что значат. если по справедливости считаете, что я несу чушь - можете минусовать, это право каждого участника форума, заложенное администрацией.

1
01.11.2016, 15:47
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
01.11.2016, 15:47

Осуществить циклический сдвиг массива вправо на m позиций
Разработать алгоритм и программу. Дан одномерный массив С размерностью 1хn...

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

Осуществить сдвиг элементов массива влево на K позиций
Дан массив размера N и целое число K (1 ≤ K &lt; N). Осуществить сдвиг элементов...


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

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

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