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

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

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

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

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

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

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

Требования к реализации: вам нужно реализовать только функцию циклического сдвига. При этом она не должна вводить или выводить что-либо. При решении этой задачи вы можете определять любые вспомогательные функции, если они вам нужны. Реализовывать функцию main не нужно. Предполагается, что вам не потребуется дополнительная память, а именно: массивы и стандартные контейнеры. Пользоваться стандартными алгоритмами и контейнерами не разрешается, даже если вы с ними знакомы.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
07.10.2015, 18:35     Функция, сдвигающая содержимое массива влево на заданное число позиций
Посмотрите здесь:
C++ Cдвинуть элементы массива X на заданное число K позиций влево
Сдвинуть элементы одномерного динамического массива на заданное число позиций влево C++
C++ Сдвинуть элементы двумерного массива на k позиций влево
Осуществить сдвиг элементов массива влево на K позиций C++
Элементы массива циклически сдвинуть на k позиций влево C++
Элементы вещественного массива сдвинуть на k позиций влево C++
Осуществить циклический сдвиг элементов массива влево на k позиций C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
438 / 331 / 123
Регистрация: 27.11.2014
Сообщений: 1,038
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
Модератор
Эксперт PHP
2178 / 1974 / 689
Регистрация: 14.05.2014
Сообщений: 5,773
Записей в блоге: 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
5269 / 4589 / 1538
Регистрация: 14.04.2014
Сообщений: 18,227
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
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
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
438 / 331 / 123
Регистрация: 27.11.2014
Сообщений: 1,038
07.10.2015, 21:09     Функция, сдвигающая содержимое массива влево на заданное число позиций #6
В википедию что никто не ходил?
gru74ik
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
08.10.2015, 09:43     Функция, сдвигающая содержимое массива влево на заданное число позиций #7
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,734
08.10.2015, 09:49     Функция, сдвигающая содержимое массива влево на заданное число позиций #8
Функция сдвига массива
стопитсот решений три из них мои
ture
438 / 331 / 123
Регистрация: 27.11.2014
Сообщений: 1,038
08.10.2015, 09:52     Функция, сдвигающая содержимое массива влево на заданное число позиций #9
Цитата Сообщение от gru74ik Посмотреть сообщение
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
Как же найти в голове наследие науки о численных методах? Впрочем теперь можешь сходить. Фотку пришли что ль, ту с застывшим удивлением.
gru74ik
Модератор
Эксперт CЭксперт С++
4106 / 1751 / 197
Регистрация: 20.02.2013
Сообщений: 4,856
Записей в блоге: 21
08.10.2015, 10:02     Функция, сдвигающая содержимое массива влево на заданное число позиций #10
Цитата Сообщение от ture Посмотреть сообщение
Как же найти в голове наследие науки о численных методах?
Нету у меня там никаких численных методов. Я гуманитарий.
Если что-то прям сильно срочно надо, в гугле найду, в книгах или на форуме.

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

Добавлено через 50 секунд
Цитата Сообщение от ture Посмотреть сообщение
Фотку пришли что ль, ту с застывшим удивлением.
Ты всегда такой борзый или только по четвергам?
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
13.12.2016, 11:52     Функция, сдвигающая содержимое массива влево на заданное число позиций #11
Ни одно из предложенных решений, не верно!!! Нигде не объявляются переменные в функциях. Их ведь нужно декларировать для дальнейшей работы.
ValeryS
Модератор
6551 / 5017 / 463
Регистрация: 14.02.2011
Сообщений: 16,734
13.12.2016, 20:17     Функция, сдвигающая содержимое массива влево на заданное число позиций #12
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Их ведь нужно декларировать для дальнейшей работы.
с Си времен Керниган и Ричи не попутал?
zss
Модератор
Эксперт С++
6321 / 5905 / 1913
Регистрация: 18.12.2011
Сообщений: 15,184
Завершенные тесты: 1
13.12.2016, 22:03     Функция, сдвигающая содержимое массива влево на заданное число позиций #13
MilkyWay888, приведите пример переменной, которая не объявлена.
Я таких не вижу.
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 параметра цикла.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2016, 20:50     Функция, сдвигающая содержимое массива влево на заданное число позиций
Еще ссылки по теме:
Сдвинуть циклически элементы одномерного массива на k позиций влево C++
Все элементы массива X(30) циклически сдвинуть на n позиций влево C++
Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций C++
Функция вычисляющая количество элементов массива отличающихся от максимального не более чем на заданное число C++

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

Или воспользуйтесь поиском по форуму:
MilkyWay888
3 / 3 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
16.12.2016, 20:50     Функция, сдвигающая содержимое массива влево на заданное число позиций #15
Волосы на голове посидели пока понял как это решается
Yandex
Объявления
16.12.2016, 20:50     Функция, сдвигающая содержимое массива влево на заданное число позиций
Ответ Создать тему
Опции темы

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