Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > C/C++ программирование > Общие вопросы C/C++
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 01.12.2011, 21:37   #1
zvir
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 15
По умолчанию как сделать циклический сдвиг в массиве на к елементов вправо и влево на язеке с++????

как сделать циклический сдвиг в массиве на к елементов вправо и влево на язеке с++????
zvir вне форума Ответить с цитированием
Старый 01.12.2011, 21:49   #2
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

Запросто.
Код:
void right( int a[], int N){ //функция смещение на 1 вправо
     int temp=a[0];
     for (int i=N-1; i>0;i--) a[i]=a[i-1];
     a[0]=temp;
}
void left( int a[], int N){ //функция смещение на 1 влево
     int temp=a[0];
     for (int i=0; i<N-1;i++) a[i]=a[i+1];
     a[N-1]=temp;
}
Зачем только темы дублировать?
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 01.12.2011, 22:04   #3
zvir
Пользователь
 
Регистрация: 01.12.2011
Сообщений: 15
По умолчанию циклическийсдвиг

сдвиг елементов массива на к елементов



#include <conio.h>
#include<iostream.h>
int a[100];
int x;
void main()
{
int i,j,k,n=100;
cout<<"введите количество элементов массива\n";
cin>>n;
// инициализация массива
for (i =0; i < n; i++)
{a[i]=pow(i,2.0);
cout <<"\n"<<a[i];}
// цикиличний сдвиг массива на k позиций вправо
cout<<"\n введите количество позиций сдвига k= ";
cin>>k;
for(j=0; j<k; j++)
{x=a[n];
for (i = n; i > 1; i--)
a[i]=a[i-1];
a[1]=x;
}
// вывод массива
for(i=1; i<n; i++)
cout <<"\n"<<a[i];
getch();
}


што я сделел не так ?

и как осуществить сдвиг влево также???
zvir вне форума Ответить с цитированием
Старый 01.12.2011, 22:17   #4
Ezhuk
Форумчанин
 
Регистрация: 09.10.2010
Сообщений: 217
По умолчанию

У вас это компилируется? И русские символы выводит?

И почему вам не нравится мои функции?

А сдвиг влево осуществляется аналогично, только не слева направо, а справа налево.

P.S. И прочитайте правила, а то код ни как не оформлен.
Ёж птица гордая, пока не пнешь не полетит.
Ezhuk вне форума Ответить с цитированием
Старый 01.12.2011, 22:30   #5
Rififi
Старожил
 
Регистрация: 19.08.2009
Сообщений: 2,119
По умолчанию

zvir

как сделать циклический сдвиг в массиве на к елементов вправо и влево на язеке с++????

Код:
int arr[] = {1,2,3,4,5};
std::rotate(arr, arr+4, arr+5); // вправо
std::rotate(arr, arr+1, arr+5); // влево
Rififi вне форума Ответить с цитированием
Старый 13.11.2012, 01:24   #6
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

скажите, пожалуйста, как вывести массив на экран?
что-то типо такого, только чтобы было правильно..
Код:
cout<<mas[]<<endl;

Последний раз редактировалось Faton 11; 13.11.2012 в 02:22.
Faton 11 вне форума Ответить с цитированием
Старый 13.11.2012, 01:34   #7
BDA
МегаМодератор
СуперМодератор
 
Аватар для BDA
 
Регистрация: 09.11.2010
Сообщений: 7,289
По умолчанию

Faton 11, вообще, не положено "поднимать" старые темы.
Но в этом случае, наверное, можно
Код:
int *
right( int a[], int N){ //функция смещение на 1 вправо
     int temp=a[N-1];
     for (int i=N-1; i>0;i--) a[i]=a[i-1];
     a[0]=temp;
     return a;
}
Ezhuk ошибся (при копировании кода, наверное) и сохранил не тот элемент массива.
Нужно сохранить во временной переменной самый правый элемент массива, т.к. он "затрется" в цикле.
Затем присвоить его 0-му элементу.
Возврат массива не имеет смысла, т.к. изменится сам массив а (если я не ошибся ).
Тогда уж, нужно написать, чтобы не "портить" массив а:
Код:
nt *
right( int a[], int N)
{
     int *b = calloc(N, sizeof(*b));
     memcpy(&b[1],a,(N-1)*sizeof(*b));
     b[0]=a[N-1];
     return b;
}
Не забыть освободить массив, который вернет функция вызовом free.
Пишите язык программирования - это форум программистов, а не экстрасенсов. (<= это подпись )

Последний раз редактировалось BDA; 13.11.2012 в 01:41.
BDA вне форума Ответить с цитированием
Старый 13.11.2012, 03:37   #8
Faton 11
Пользователь
 
Регистрация: 04.10.2011
Сообщений: 74
По умолчанию

новые по пустякам создавать не хочется =) Вам как всегда спасибо!

(А на счет этого уже понятно:
Код:
cout<<mas[]<<endl;
)

Последний раз редактировалось Faton 11; 13.11.2012 в 03:39.
Faton 11 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц

Опции темы Поиск в этой теме
Поиск в этой теме:

Расширенный поиск


Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Циклический сдвиг элементов столбца вниз в многомерном массиве. Corvette Общие вопросы C/C++ 2 07.09.2011 21:15
Циклический сдвиг строк в многомерном массиве. Corvette Общие вопросы C/C++ 12 29.08.2011 22:05
Не получается циклический сдвиг элементов списка влево Джиксер Общие вопросы C/C++ 5 02.06.2010 23:38
КАК повернуть матрицу на 90 градусов вправо (или влево). RomT24 Помощь студентам 15 09.12.2009 10:52
Циклический сдвиг столбцов в массиве С++ Помогите! Ладушка Общие вопросы C/C++ 10 01.05.2008 23:17