Форум программистов, компьютерный форум CyberForum.ru

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

Восстановить пароль Регистрация
 
lerka1996
2 / 2 / 0
Регистрация: 04.03.2015
Сообщений: 76
07.10.2015, 18:35     Функция, сдвигающая содержимое массива влево на заданное число позиций #1
На вход функция принимает массив, его размер и величину сдвига. Например, если на вход функции подан массив: int a[] = { 1, 2, 3, 4, 5 }; и требуется циклически сдвинуть его влево на 2 позиции, то на выходе мы получим числа в таком порядке: 3, 4, 5, 1, 2.

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

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

Сдвинуть все элементы последовательности циклически на k позиций влево C++
Сдвинуть циклически элементы одномерного массива на k позиций влево C++
Осуществить сдвиг элементов массива влево на K позиций C++
Все элементы массива X(30) циклически сдвинуть на n позиций влево C++
Одномерный массив. Сдвинуть элементы циклически на n позиций влево C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
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;
        }
    }
}
Kerry_Jr
Модератор
 Аватар для Kerry_Jr
1855 / 1651 / 574
Регистрация: 14.05.2014
Сообщений: 4,726
Записей в блоге: 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;
    }
}
nmcf
4265 / 3696 / 1243
Регистрация: 14.04.2014
Сообщений: 14,478
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;
    }
}
gru74ik
Модератор
 Аватар для gru74ik
3080 / 1325 / 164
Регистрация: 20.02.2013
Сообщений: 3,763
Записей в блоге: 17
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, блин, я практически так же написал Но я не списывал, честно!
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
07.10.2015, 21:09     Функция, сдвигающая содержимое массива влево на заданное число позиций #6
В википедию что никто не ходил?
gru74ik
Модератор
 Аватар для gru74ik
3080 / 1325 / 164
Регистрация: 20.02.2013
Сообщений: 3,763
Записей в блоге: 17
08.10.2015, 09:43     Функция, сдвигающая содержимое массива влево на заданное число позиций #7
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
ValeryS
Модератор
6374 / 4840 / 441
Регистрация: 14.02.2011
Сообщений: 16,042
08.10.2015, 09:49     Функция, сдвигающая содержимое массива влево на заданное число позиций #8
Функция сдвига массива
стопитсот решений три из них мои
ture
 Аватар для ture
404 / 297 / 120
Регистрация: 27.11.2014
Сообщений: 1,004
08.10.2015, 09:52     Функция, сдвигающая содержимое массива влево на заданное число позиций #9
Цитата Сообщение от gru74ik Посмотреть сообщение
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
Как же найти в голове наследие науки о численных методах? Впрочем теперь можешь сходить. Фотку пришли что ль, ту с застывшим удивлением.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.10.2015, 10:02     Функция, сдвигающая содержимое массива влево на заданное число позиций
Еще ссылки по теме:

элементы вещественного массива сдвинуть на k позиций влево C++
Преобразовать целочисленный массив путем сдвига его элементов на k позиций влево C++
C++ Cдвинуть элементы массива X на заданное число K позиций влево

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

Или воспользуйтесь поиском по форуму:
gru74ik
Модератор
 Аватар для gru74ik
3080 / 1325 / 164
Регистрация: 20.02.2013
Сообщений: 3,763
Записей в блоге: 17
08.10.2015, 10:02     Функция, сдвигающая содержимое массива влево на заданное число позиций #10
Цитата Сообщение от ture Посмотреть сообщение
Как же найти в голове наследие науки о численных методах?
Нету у меня там никаких численных методов. Я гуманитарий.
Если что-то прям сильно срочно надо, в гугле найду, в книгах или на форуме.

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

Добавлено через 50 секунд
Цитата Сообщение от ture Посмотреть сообщение
Фотку пришли что ль, ту с застывшим удивлением.
Ты всегда такой борзый или только по четвергам?
Yandex
Объявления
08.10.2015, 10:02     Функция, сдвигающая содержимое массива влево на заданное число позиций
Ответ Создать тему
Опции темы

Текущее время: 10:28. Часовой пояс GMT +3.
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2016, vBulletin Solutions, Inc.
Рейтинг@Mail.ru