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

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

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

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

07.10.2015, 18:35. Просмотров 875. Ответов 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     Функция, сдвигающая содержимое массива влево на заданное число позиций
Посмотрите здесь:

Элементы массива циклически сдвинуть на k позиций влево C++
Сдвинуть циклически элементы одномерного массива на k позиций влево C++
Осуществить сдвиг элементов массива влево на K позиций C++
Все элементы массива X(30) циклически сдвинуть на n позиций влево C++
C++ Сдвинуть элементы двумерного массива на k позиций влево
Элементы вещественного массива сдвинуть на k позиций влево C++
C++ Cдвинуть элементы массива X на заданное число K позиций влево
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ture
 Аватар для ture
430 / 323 / 121
Регистрация: 27.11.2014
Сообщений: 1,027
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
2040 / 1836 / 639
Регистрация: 14.05.2014
Сообщений: 5,355
Записей в блоге: 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
4484 / 3822 / 1289
Регистрация: 14.04.2014
Сообщений: 15,003
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Эксперт С++
 Аватар для gru74ik
3851 / 1609 / 188
Регистрация: 20.02.2013
Сообщений: 4,635
Записей в блоге: 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
 Аватар для ture
430 / 323 / 121
Регистрация: 27.11.2014
Сообщений: 1,027
07.10.2015, 21:09     Функция, сдвигающая содержимое массива влево на заданное число позиций #6
В википедию что никто не ходил?
gru74ik
Модератор
Эксперт CЭксперт С++
 Аватар для gru74ik
3851 / 1609 / 188
Регистрация: 20.02.2013
Сообщений: 4,635
Записей в блоге: 21
08.10.2015, 09:43     Функция, сдвигающая содержимое массива влево на заданное число позиций #7
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
ValeryS
Модератор
6451 / 4917 / 451
Регистрация: 14.02.2011
Сообщений: 16,308
08.10.2015, 09:49     Функция, сдвигающая содержимое массива влево на заданное число позиций #8
Функция сдвига массива
стопитсот решений три из них мои
ture
 Аватар для ture
430 / 323 / 121
Регистрация: 27.11.2014
Сообщений: 1,027
08.10.2015, 09:52     Функция, сдвигающая содержимое массива влево на заданное число позиций #9
Цитата Сообщение от gru74ik Посмотреть сообщение
ture, я не ходил. Самому иногда интереснее решить задачку, чем просто тупо откуда-то списать.
Как же найти в голове наследие науки о численных методах? Впрочем теперь можешь сходить. Фотку пришли что ль, ту с застывшим удивлением.
gru74ik
Модератор
Эксперт CЭксперт С++
 Аватар для gru74ik
3851 / 1609 / 188
Регистрация: 20.02.2013
Сообщений: 4,635
Записей в блоге: 21
08.10.2015, 10:02     Функция, сдвигающая содержимое массива влево на заданное число позиций #10
Цитата Сообщение от ture Посмотреть сообщение
Как же найти в голове наследие науки о численных методах?
Нету у меня там никаких численных методов. Я гуманитарий.
Если что-то прям сильно срочно надо, в гугле найду, в книгах или на форуме.

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

Добавлено через 50 секунд
Цитата Сообщение от ture Посмотреть сообщение
Фотку пришли что ль, ту с застывшим удивлением.
Ты всегда такой борзый или только по четвергам?
MilkyWay888
2 / 2 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
13.12.2016, 11:52     Функция, сдвигающая содержимое массива влево на заданное число позиций #11
Ни одно из предложенных решений, не верно!!! Нигде не объявляются переменные в функциях. Их ведь нужно декларировать для дальнейшей работы.
ValeryS
Модератор
6451 / 4917 / 451
Регистрация: 14.02.2011
Сообщений: 16,308
13.12.2016, 20:17     Функция, сдвигающая содержимое массива влево на заданное число позиций #12
Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Их ведь нужно декларировать для дальнейшей работы.
с Си времен Керниган и Ричи не попутал?
zss
Модератор
Эксперт С++
 Аватар для zss
6115 / 5718 / 1849
Регистрация: 18.12.2011
Сообщений: 14,609
Завершенные тесты: 1
13.12.2016, 22:03     Функция, сдвигающая содержимое массива влево на заданное число позиций #13
MilkyWay888, приведите пример переменной, которая не объявлена.
Я таких не вижу.
MilkyWay888
2 / 2 / 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 параметра цикла.
MilkyWay888
2 / 2 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
16.12.2016, 20:50     Функция, сдвигающая содержимое массива влево на заданное число позиций #15
Волосы на голове посидели пока понял как это решается
Nishen
16.12.2016, 20:52
  #16

Не по теме:

Цитата Сообщение от MilkyWay888 Посмотреть сообщение
Волосы на голове посидели пока понял как это решается
Значит на Вашей голове знания будут выражаться исключительно поседевшими волосами.

gru74ik
16.12.2016, 20:54
  #17

Не по теме:

Цитата Сообщение от Nishen Посмотреть сообщение
поседевшими
посидевшими!

Nishen
16.12.2016, 20:56
  #18

Не по теме:

Цитата Сообщение от gru74ik Посмотреть сообщение
посидевшими!
От слова сИдя. А седой от слова сЕд.

Хотя, его волосы может и посидели.

А, всё, увидел у него ошибку. Аахахха!

MilkyWay888
2 / 2 / 0
Регистрация: 03.11.2016
Сообщений: 137
Завершенные тесты: 1
16.12.2016, 21:05     Функция, сдвигающая содержимое массива влево на заданное число позиций #19
о
Цитата Сообщение от Nishen Посмотреть сообщение
А, всё, увидел у него ошибку. Аахахха!
Это все от лукавого
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
16.12.2016, 21:18     Функция, сдвигающая содержимое массива влево на заданное число позиций
Еще ссылки по теме:

Осуществить циклический сдвиг элементов массива влево на k позиций C++
Функция вычисляющая количество элементов массива отличающихся от максимального не более чем на заданное число C++
Сдвинуть элементы одномерного динамического массива на заданное число позиций влево C++
Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций C++
Написать функцию, которая циклически сдвигает одномерный массив вправо или влево на указанное число позиций C++

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

Или воспользуйтесь поиском по форуму:
GbaLog-
Не Эксперт C++
2040 / 840 / 222
Регистрация: 24.08.2014
Сообщений: 3,204
Записей в блоге: 1
Завершенные тесты: 2
16.12.2016, 21:18     Функция, сдвигающая содержимое массива влево на заданное число позиций #20
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
#include <iostream>
#include <algorithm>
 
int main()
{
    int arr[] = { 1, 2, 3, 4, 5 };
    
    std::rotate(arr, arr + 2, arr + 5);
    
    for( auto it : arr )
    {
        std::cout << it << ' ';
    }
}
Yandex
Объявления
16.12.2016, 21:18     Функция, сдвигающая содержимое массива влево на заданное число позиций
Ответ Создать тему
Опции темы

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