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

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

Войти
Регистрация
Восстановить пароль
 
Aleksandr_sf
0 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 6
#1

Сдвинуть элементы на одну позицию вправо\влево - C++

09.07.2015, 13:39. Просмотров 665. Ответов 11
Метки нет (Все метки)

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

Указатели: сдвинуть элементы циклически на 1 позицию влево - C++
Условие задачи: Заполните случайным образом одномерный массив из n элементов и здвиньте элементы циклически на 1 позицию влево. (Например...

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

Сформировать массив десятичных цифр числа А. Элементы массива цифр сдвинуть циклически влево на 1 позицию - C++
дано целое десятичное число А. Сформировать массив десятичных цифр числа А. Элементы массива цифр сдвинуть циклически влево на 1 позицию ....

Нужно сдвинуть число на 4 разряда влево и вправо - C++
Нужно сдвинуть 1000 на 4 разряда влево и вправо. Тема указатели. Препод говорил, что число нужно переводить в двоичную систему, что-то с...

Сдвинуть буквы, в каждом слове, влево или вправо, на n символов - C++
Задача: Взять из файла текст (слова, разделённые знаками препинания и пробелами) и сдвинуть буквы, в каждом слове, влево или вправо, на n...

В двухмерном массиве сдвинуть ячейки влево вправо / вверх вниз - C++
Добрый день. Вот текст задачи: Создайте двухмерный массив. Заполните его случайными числами и покажите на экран. Пользователь выбирает...

11
volvo
Супер-модератор
Эксперт Pascal/DelphiАвтор FAQ
23828 / 15820 / 4775
Регистрация: 22.10.2011
Сообщений: 27,986
Записей в блоге: 5
09.07.2015, 13:41 #2
Элементы чего? Массива?
0
григорий15567
Заблокирован
09.07.2015, 13:47 #3
Добрый день. Предположим что у вас массив и сдвигать нужно элементы массива. Причем массив одномерный, статистический. Тогда проходим по каждому элементу массива в цикле.
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 <cstdlib>
#include <iostream>
 
using namespace std;
 
int main(int argc, char *argv[])
{
   
  int p[5] = {1, 2, 3, 4, 5};  
  int i; 
  int t; 
  // cдвигаем влево (для право просто вычитаем еденицу, а цикл от 1 до 5)
   for(int i=0;i<4;i++) 
  {
  t=p[i];
  p[i]=p[i+1];
  p[i+1]=t;          
  }
  // выводим значения массива
   for(int i=0;i<5;i++)
   printf("%d", p[i]);
   // ждем нажатия клавиши
    system("PAUSE");
    return EXIT_SUCCESS;
}

Если помог жмем спасибо, если что то не понятно - пишите с радостью объясню. Компилятор по умолчанию dev c++ консольный режим.


mssove@mail.ru mssove - скайп
Курсовые и дипломы, а так же блок схемы и задачи. Дешевизна и качество совместимы, так как помогаю за спасибо ))
0
mr_mczakenberg
65 / 65 / 31
Регистрация: 10.04.2015
Сообщений: 281
09.07.2015, 13:56 #4
Зачем iostream если нет ниодного cout / cin ?
Зачем объявлять int i; если в цикле вы все равно объявляете int i = 0?

Последний элемент не выводится. Если вам нужно выводить, последний элемент, который не заменяли - создайте отдельный цикл на вывод элементов.
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
#include <iostream>
int main()
{
    const int N = 5;
    int mas [N] = {1,2,3,4,5};
    
    for(int i = 0; i <N-1;i++)
    {
        int t = mas[i];
        mas[i] = mas[i+1];
        mas[i+1] = t;
        std::cout<<mas[i]<< " ";
    }
    return 0;
    
}
0
григорий15567
Заблокирован
09.07.2015, 14:50 #5
Пожалуйста не говорите бред. Последний элемент выводиться ! Специально проверял. И еще одно
Зачем iostream - стоит по умолчанию в компиляторе.
Зачем объявлять int i; - для совместимости с разными компиляторами, в частности например в языке С в цикле объявить не получиться.
0
vua72
415 / 415 / 85
Регистрация: 28.11.2010
Сообщений: 1,183
Завершенные тесты: 1
09.07.2015, 16:21 #6
при сдвиге, что должно оказаться в крайней позиции, со стороны которой происходит сдвиг??
0
григорий15567
Заблокирован
09.07.2015, 19:07 #7
Элемент с другого конца массива. Это же элементарно. При этом нельзя просто заменить крайние элементы массива, так как это будет ошибка, нужно сдвинуть все элементы.
0
Aleksandr_sf
0 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 6
09.07.2015, 19:11  [ТС] #8
григорий15567 ? спасибо большое все работает
0
mr_mczakenberg
65 / 65 / 31
Регистрация: 10.04.2015
Сообщений: 281
09.07.2015, 20:19 #9
Цитата Сообщение от григорий15567 Посмотреть сообщение
Пожалуйста не говорите бред. Последний элемент выводиться !
Про элемент - это я уже описывал свой код... не зря там пропуск в строчку стоит.
0
Петров
0 / 0 / 0
Регистрация: 23.11.2014
Сообщений: 17
09.07.2015, 21:29 #10
Здравствуйте! Недавно видел подобную задачу, только сдвигать нужно было на k элементов(если k положительное - сдвигать вправо, если отрицательное - сдвигать влево). Для этого создавался дополнительный массив b[i] и в цикле пишем:
C++
1
2
for (int i=0; i<n; i++)
b[i]=a[(i-k+n)%n];
Соответственно для вашего случая тоже будет работать.
0
MicM
822 / 480 / 90
Регистрация: 29.12.2009
Сообщений: 1,097
Завершенные тесты: 1
09.07.2015, 21:43 #11
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
#include <iostream>
using namespace std;
 
void left_shift (int *array, int size)
{
    int tmp = array[0];
    for (int i = 0; i < size - 1; i++)
        array[i] = array[i + 1];
    array[size - 1] = tmp;
}
 
void right_shift (int *array, int size)
{
    int tmp = array[size - 1];
    for (int i = size - 1; i > 0; i--)
        array[i] = array[i - 1];
    array[0] = tmp;
}
 
void show_array (int *array, int size)
{
    for (int i = 0; i < size; i++)
        cout << array[i] << ' ';
    cout << endl;
}
 
int main (int argc, char *argv[])
{
    int const N = 4;
    int a[N] = {1, 2, 3, 4};
    left_shift (a, N);
    show_array (a, N);
    right_shift (a, N);
    show_array (a, N);
    return 0;
}
0
Aleksandr_sf
0 / 0 / 0
Регистрация: 09.07.2015
Сообщений: 6
10.07.2015, 18:11  [ТС] #12
MicM , в право сдвигает влево нет
0
10.07.2015, 18:11
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
10.07.2015, 18:11
Привет! Вот еще темы с ответами:

Осуществить циклический сдвиг элементов массива влево на одну позицию - C++
Помогите, пожалуйста, решить программы на си++, если не решу мне хана, заранее спасибо: Дан массив размера N. Осуществить циклический...

Осуществить циклический сдвиг элементов массива вправо на одну позицию - C++
4Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на одну позицию (при этом A 1 перейдет в A 2 , A 2 — в A 3 ,...

Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево) - C++
Написать программу, которая делает циклический сдвиг всех элементов массива а1, а2, ..., аn на одну позицию влево, то-есть будет получен...

Сдвинуть элементы массива на k элементов вправо - C++
Дан одномерный массив из 10 элементов. Сдвинуть элементы массива на k элементов вправо, заполняя освободившиеся места выдвинутыми...


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

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

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