Форум программистов, компьютерный форум, киберфорум
Наши страницы

С++ для начинающих

Войти
Регистрация
Восстановить пароль
 
 
lerka1996
2 / 2 / 0
Регистрация: 04.03.2015
Сообщений: 76
#1

Функция, сдвигающая содержимое массива влево на заданное число позиций - C++

07.10.2015, 18:35. Просмотров 1574. Ответов 21
Метки нет (Все метки)

На вход функция принимает массив, его размер и величину сдвига. Например, если на вход функции подан массив: int a[] = { 1, 2, 3, 4, 5 }; и требуется циклически сдвинуть его влево на 2 позиции, то на выходе мы получим числа в таком порядке: 3, 4, 5, 1, 2.

Обратите внимание, что величина сдвига может быть нулевой, а может быть и больше размера массива, все эти случаи нужно учесть.

Требования к реализации: вам нужно реализовать только функцию циклического сдвига. При этом она не должна вводить или выводить что-либо. При решении этой задачи вы можете определять любые вспомогательные функции, если они вам нужны. Реализовывать функцию main не нужно. Предполагается, что вам не потребуется дополнительная память, а именно: массивы и стандартные контейнеры. Пользоваться стандартными алгоритмами и контейнерами не разрешается, даже если вы с ними знакомы.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2015, 18:35
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Функция, сдвигающая содержимое массива влево на заданное число позиций (C++):

Cдвинуть элементы массива X на заданное число K позиций влево - C++
Братишки помогите пожалуйста. 12. Дан массив X из 10 чисел. Воспользовавшись вспомогательным массивом такой же размерности, сдвинуть...

Сдвинуть элементы одномерного динамического массива на заданное число позиций влево - C++
Создать одномерный динамический массив целых чисел iArr размера n, где n вводит пользователь. Заполнить его случайными целыми числами...

Осуществить сдвиг элементов массива влево на K позиций - C++
Дан массив размера N и целое число K (1 ≤ K < N). Осуществить сдвиг элементов массива влево на K позиций (при этом AN перейдет в AN–K, AN–1...

Сдвинуть элементы двумерного массива на k позиций влево - C++
Немножко не умею пользоваться динамическими массивами. Из-за этого кажется сделал глупые ошибки в программе Суть программы: Сдвинуть...

Элементы вещественного массива сдвинуть на k позиций влево - C++
Здравствуйте! Помогите, пожалуйста, с задачей: элементы вещественного массива сдвинуть на k позиций влево

Элементы массива циклически сдвинуть на k позиций влево - C++
Помогите пожалуйста написать программу!!!понимаю что все должно быть оч легко, но... В С++: 1. Дан массив, состоящий из символов....

21
ture
441 / 334 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
07.10.2015, 18:42 #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
26
27
28
29
30
31
32
33
34
35
36
void rotate(int * m, unsigned n, int shift)
{
shift %= int(n);
 
    if(shift) { 
        //преобразование отрицательного сдвига
        shift = shift > 0 ? shift : n + shift;
 
        //реверс всего массива
        int * pb = m;
        int * pe = m + n - 1;
        while(pb < pe) {
            int t = *pb;
            *pb++ = *pe;
            *pe-- = t;
        }
 
        //реверс 1 блока
        pb = m;
        pe = m + n-1-shift;
        while(pb < pe) {
            int t = *pb;
            *pb++ = *pe;
            *pe-- = t;
        }
 
        //реверс 2 блока
        pb = m + n - shift;
        pe = m + n - 1;
        while(pb < pe) {
            int t = *pb;
            *pb++ = *pe;
            *pe-- = t;
        }
    }
}
0
Kerry_Jr
Модератор
Эксперт PHP
2206 / 2002 / 701
Регистрация: 14.05.2014
Сообщений: 5,867
Записей в блоге: 1
Завершенные тесты: 5
07.10.2015, 18:44 #3
lerka1996, ture,
C++
1
2
3
4
5
6
7
8
9
10
11
void shift(int *array, int size, int step)
{
    int temp;
    for (int i = 0, j; i < step; ++i)
    {
        temp = array[0];
        for (j = 0; j < size - 1; ++j)
            array[j] = array[j + 1];
        array[j] = temp;
    }
}
1
nmcf
5544 / 4854 / 1647
Регистрация: 14.04.2014
Сообщений: 19,710
07.10.2015, 18:46 #4
C++
1
2
3
4
5
6
7
8
9
10
11
void Shift(int *a, int size, int sh)
{
    if (size < 2) return;
    sh %= size;
    for (int i = 0; i < sh; ++i)
    {
        int l = a[0];
        for (int j = 1; j < size; ++j) a[j - 1] = a[j];
        a[size - 1] = l;
    }
}
1
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
07.10.2015, 19:43 #5
lerka1996, мой вариант:
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
void shift_arr_elem(int * arr, int arrSize, int shift)
{
    int realShift = 0;
    if (shift > arrSize)
        realShift = shift - arrSize * (shift/arrSize);
    else
        realShift = shift;
 
 
    for (int i = 0, temp = 0; i < realShift; ++i)
    {
        temp = arr[0];
 
        for (int j = 0; j < arrSize-1; ++j)
            arr[j] = arr[j+1];
 
        arr[arrSize-1] = temp;
    }
}
Добавлено через 3 минуты
Kerry_Jr, блин, я практически так же написал Но я не списывал, честно!
0
ture
441 / 334 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
07.10.2015, 21:09 #6
В википедию что никто не ходил?
0
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
08.10.2015, 09:43 #7
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,212
08.10.2015, 09:49 #8
Функция сдвига массива
стопитсот решений три из них мои
1
ture
441 / 334 / 126
Регистрация: 27.11.2014
Сообщений: 1,042
08.10.2015, 09:52 #9
Цитата Сообщение от gru74ik Посмотреть сообщение
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
Как же найти в голове наследие науки о численных методах? Впрочем теперь можешь сходить. Фотку пришли что ль, ту с застывшим удивлением.
0
gru74ik
Эксперт CЭксперт С++
4197 / 1845 / 198
Регистрация: 20.02.2013
Сообщений: 4,991
Записей в блоге: 22
08.10.2015, 10:02 #10
Цитата Сообщение от ture Посмотреть сообщение
Как же найти в голове наследие науки о численных методах?
Нету у меня там никаких численных методов. Я гуманитарий.
Если что-то прям сильно срочно надо, в гугле найду, в книгах или на форуме.

Добавлено через 1 минуту
Цитата Сообщение от ture Посмотреть сообщение
Впрочем теперь можешь сходить.
Спасибо, блин, разрешил.

Добавлено через 50 секунд
Цитата Сообщение от ture Посмотреть сообщение
Фотку пришли что ль, ту с застывшим удивлением.
Ты всегда такой борзый или только по четвергам?
1
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
13.12.2016, 11:52 #11
Ни одно из предложенных решений, не верно!!! Нигде не объявляются переменные в функциях. Их ведь нужно декларировать для дальнейшей работы.
0
ValeryS
Модератор
6709 / 5118 / 482
Регистрация: 14.02.2011
Сообщений: 17,212
13.12.2016, 20:17 #12
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Их ведь нужно декларировать для дальнейшей работы.
с Си времен Керниган и Ричи не попутал?
0
zss
Модератор
Эксперт С++
6537 / 6099 / 2009
Регистрация: 18.12.2011
Сообщений: 15,866
Завершенные тесты: 1
13.12.2016, 22:03 #13
MilkyWay888, приведите пример переменной, которая не объявлена.
Я таких не вижу.
0
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
13.12.2016, 22:08 #14
C++
1
2
3
4
5
6
7
8
9
10
11
void shift(int *array, int size, int step)
{
    int temp;
    for (int i = 0, j; i < step; ++i)
    {
        temp = array[0];
        for (j = 0; j < size - 1; ++j)
            array[j] = array[j + 1];
        array[j] = temp;
    }
}
Один из примеров в цикле первом: j. Может я не знаю чего то, но впервые вижу 4 параметра цикла.
0
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
16.12.2016, 20:50 #15
Волосы на голове посидели пока понял как это решается
0
16.12.2016, 20:50
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2016, 20:50
Привет! Вот еще темы с ответами:

Все элементы массива X(30) циклически сдвинуть на n позиций влево - C++
Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей

Сдвинуть циклически элементы одномерного массива на k позиций влево - C++
Тема и есть условие задачи... Сам же я застопорился на написании алгоритма сдвига :- #include &lt;iostream.h&gt; #include &lt;math.h&gt; int...

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

Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций - C++
Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций. Сдвиг также должен быть...


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

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

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