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

Массивы: осуществить циклический сдвиг элементов массива - C++

Восстановить пароль Регистрация
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
19.05.2012, 20:51     Массивы: осуществить циклический сдвиг элементов массива #1
Подскажите пожалуйста,правильно ли написала код к задаче:дан массив размера N.Осуществить циклический сдвиг элементов массива вправо на одну позицию(при этом А1 перейдёт в А22-в А3,...АN в А1.
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
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main()
{
int N,i,k;
int A;
clrscr();
cout <<"Vvedite N=";
cin >> N;
float a[10];
for(i=0;i<N;i++)
{
cout <<" Vvedite element massiva=";
cin >> a[i];
}
k=a[0];
for(i=0;i<N+1;i++)
  {
  a[i]=a[i+1];
  cout <<"\n Novui element massiva="<<a[i];
  }
  cout <<"\n Novui element massiva="<<k;
getch();
}
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2012, 20:51     Массивы: осуществить циклический сдвиг элементов массива
Посмотрите здесь:

C++ Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k- индекс максимального элемента.
C++ Осуществить циклический сдвиг элементов массива влево на одну позицию
Одномерные массивы (циклический сдвиг всех элементов массива на одну позицию влево) C++
C++ Осуществить циклический сдвиг элементов квадратной
Осуществить циклический сдвиг элементов C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
19.05.2012, 21:11     Массивы: осуществить циклический сдвиг элементов массива #2
либо создавай динамический массив, размерностью N, либо задавай N в виде константы
C++
1
const int N  = 10;
и в цикле работай так:
C++
1
2
3
for (int i=1; i < N; i++)
    a[i] = a[i-1];
a[0] = k;
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 21:51  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #3
Честно говоря,как то не совсем то получаетсялибо все элементы 1 равны и больше на 1 чем надо,либо сумашедшие числа дает

Добавлено через 12 минут
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
#include<conio.h>
#include<stdio.h>
#include<iostream.h>
void main()
{
int N,i,k;
int *a;
clrscr();
cout <<"Vvedite N=";
cin >> N;
a=new int[N];
for(i=0;i<N;i++)
{
cout <<" Vvedite element massiva=";
cin >> a[i];
}
for(i=1;i<N;i++)
  {
  a[i]=a[i-1];
  a[0]=k;
  cout <<"\n Novui element massiva="<<a[i];
}
  cout <<"\n Novui element massiva="<<k;
getch();
}
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
21.05.2012, 21:57     Массивы: осуществить циклический сдвиг элементов массива #4
Можно сделать вот так, коряво конечно, но как вариант

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
#include <ctime>
#include <iostream> 
using namespace std; 
 
int main() 
{   
    setlocale(LC_CTYPE, "Russian");
    srand(time(0)); 
    int i, j; 
    const int size = 20; // размерность
    int array[size];
    for (i = 0; i < size; i++) array[i] = rand() % 20; // задаём массив случайных чисел
 
    cout << "Исходный массив " << endl;
    for ( i = 0; i < size; i++) 
        cout << array[i] << " "; 
    cout << endl << endl; 
 
    int temp = array[0]; // присваиваем временной переменной значение первого элемента
    for (  i = 1; i < size; i++)    
        array[i-1] = array[i]; // делаем сдвиг 
    array[size-1] = temp;// последнему элементу присваиваем значение первого элемента
 
    
for (int j = 0; j < size; j++) // выводим получившийся массив
        cout << array[j] << " "; 
    cout << endl; 
 
}
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:03  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #5
Я бы хотела в моем варианте)просто исправить что не знаю))Но спасибо)Не хочу задавать изначально размер массиву,а сделать через N как у меня..все отлично вот только значения меня пугают...ошибку найти не могу,но она где то в знаке или цифре...
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
21.05.2012, 22:08     Массивы: осуществить циклический сдвиг элементов массива #6
Вот так правильнее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <ctime>
#include <iostream> 
 
int main() 
{   
    srand(time(0));  
    const int size = 20;
    int arr[size];
    for (int i=0; i < size; i++)
    {  
        arr[i] = rand() % 20;
        std::cout<< arr[i]<< " ";
    }
    int tmp = arr[size-1];
    for (int i = size - 1; i >=0; i--)    
        arr[i+1] = arr[i];
    arr[0] = tmp;
    std::cout<< std::endl;  
    for (int i=0; i < size; i++) // выводим получившийся массив
        std::cout << arr[i] << " "; 
    return 0; 
}
Precise
26 / 26 / 1
Регистрация: 20.05.2012
Сообщений: 43
21.05.2012, 22:11     Массивы: осуществить циклический сдвиг элементов массива #7
Если я правильно понял, то должно, как-то так получиться!
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<Window.h>
#include<stdio.h>
#include<iostream>
using namespace std;
 
void main()
{
const int N = 10;
 
int arr[N];
int arrNew[N];
cout <<"Vvedite elementi massiva!"<<endl;
for(int i=0; i < N; i++)
{
    cin>>arr[i];
}
 
for(int i=0; i < N; i++)
    cout<<arr[i]<<" ";
    cout<<"Old massiv!"<<endl;
 
for(int i = 0; i < N-1; i++)
{   
    arrNew[0] = arr[N-1];
    arrNew[i+1]=arr[i];
}
 
for(int i = 0; i < N; i++)
{
    arr[i]=arrNew[i];
}
for(int i=0; i < N; i++)
    cout<<arr[i]<<" ";
    cout<<"New massiv!"<<endl;
system("pause");
}
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
21.05.2012, 22:17     Массивы: осуществить циклический сдвиг элементов массива #8
Исправленный вариант
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
#include <conio.h>
#include <stdio.h>
#include <iostream> 
using namespace std;
 
int main()
{
 
int N, i, k;
int *a;
 
cout <<"Vvedite N = ";
cin >> N;
a = new int [N];
for(i = 0; i < N; i++)
{
cout <<" Vvedite element massiva=";
cin >> a[i];
}
 
k = a[0];
 
for(i = 1;i < N; i++)
  {
  a[i-1]=a[i];
  
  cout <<"\n Novui element massiva="<<a[i];
}
  cout <<"\n Novui element massiva="<<k;
getch(); 
 
}
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:25  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #9
а в чем он исправлен?)))Вроде то же самое что и я писала выше...вот просто посмотрите сам результат который прога дает)Там чепуха
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
21.05.2012, 22:36     Массивы: осуществить циклический сдвиг элементов массива #10
Читайте комментарии
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
#include<conio.h>
#include<stdio.h>
#include<iostream> // #include <iostream> 
// нехватает using namespace std; 
using namespace std;
void main()
{
int N,i,k;
int *a;
 
cout <<"Vvedite N=";
cin >> N;
a=new int[N];
for(i=0;i<N;i++)
{
cout <<" Vvedite element massiva=";
cin >> a[i]; 
 k = a[0];// до цикла присвоить переменной К значение первого элемента
}
for(i=1;i<N;i++)
  {
  a[i-1]=a[i];// лучше a[i-1] = a[i];
  //у переменной к нет значения, нельзя присвоить 
  cout <<"\n Novui element massiva="<<a[i];
}
  cout <<"\n Novui element massiva="<<k;
getch();
}
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:44  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #11
Я пишу в Borland C))Зачем там скажите Using namespace std.....
David Sylva
 Аватар для David Sylva
1281 / 943 / 51
Регистрация: 17.05.2012
Сообщений: 2,686
21.05.2012, 22:48     Массивы: осуществить циклический сдвиг элементов массива #12
Не знал. На Visual Studio всё работает.
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:49  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #13
Ясно,тогда спасибо))Если там работает,то лучше сдам в Visual тогда)))Спасибо)
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
21.05.2012, 23:05     Массивы: осуществить циклический сдвиг элементов массива #14
Borland C++ 3.1

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
#include <iostream.h>
#include <conio.h>
 
void main()
{
//Ввод данных
  clrscr();
  int *A,N;
  cin>>N;
  A=new int[N];
      for (int i=0;i<N;i++)
      {
       cout<<"element = ";
       cin>>A[i];
      }
  delete []A;
 
//Чтоб ненужное не бросалось в глаза
  clrscr();
  cout<<"Massiv = ";
  for (i=0;i<N;i++) cout<<A[i]<<"   "; //Вывод массива на экран
  cout<<endl;
 
  int buf=A[N-1]; //Запоминаем последнее значение
 
  for (i=0;i<N;i++) A[N-i]=A[N-i-1]; //Сдвиг элементов
  A[0]=buf; //Первый элемент стал равен первоначальному последнему
 
      cout<<'\n';
       for (i=0;i<N;i++) cout<<A[i]<<"   "; //Вывод видеизмененного массива на экран
 
 getch();
 return;
}
Главное не в чем сдавать, а понимать технолгию
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
21.05.2012, 23:52     Массивы: осуществить циклический сдвиг элементов массива #15
C++
1
16 delete []A;
поместить перед getch();
иначе может не то получиться
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
22.05.2012, 19:08  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #16
Отлично...сдвиг влево сделали.....что насчет моей просьбы ВПРАВОя же спрашивала насчет знака где изменить или число..надо чтоб последний стал первым,первый-вторым и т.д

Добавлено через 4 часа 30 минут
Влево и так работало....но никто не увидел что просила ВПРАВО)))
MrGluck
Ворчун
Эксперт С++
 Аватар для MrGluck
4922 / 2665 / 243
Регистрация: 29.11.2010
Сообщений: 7,420
22.05.2012, 19:17     Массивы: осуществить циклический сдвиг элементов массива #17
Цитата Сообщение от Ri Посмотреть сообщение
Отлично...сдвиг влево сделали.....что насчет моей просьбы ВПРАВОя же спрашивала насчет знака где изменить или число..надо чтоб последний стал первым,первый-вторым и т.д

Добавлено через 4 часа 30 минут
Влево и так работало....но никто не увидел что просила ВПРАВО)))
Я вообще-то правильный ответ уже давно дал.
Цитата Сообщение от MrGluck Посмотреть сообщение
Вот так правильнее
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
#include <ctime>
#include <iostream> 
 
int main() 
{   
    srand(time(0));  
    const int size = 20;
    int arr[size];
    for (int i=0; i < size; i++)
    {  
        arr[i] = rand() % 20;
        std::cout<< arr[i]<< " ";
    }
    int tmp = arr[size-1];
    for (int i = size - 1; i >=0; i--)    
        arr[i+1] = arr[i];
    arr[0] = tmp;
    std::cout<< std::endl;  
    for (int i=0; i < size; i++) // выводим получившийся массив
        std::cout << arr[i] << " "; 
    return 0; 
}
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
22.05.2012, 19:27  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #18
А 20 мне зачем?Если он размера N.Также не совсем поняла таймы там зачем..Можно ли это в предложенном мной формате написать пожалуйста?
daslex
1084 / 494 / 101
Регистрация: 02.08.2011
Сообщений: 2,408
22.05.2012, 19:28     Массивы: осуществить циклический сдвиг элементов массива #19
Цитата Сообщение от Ri Посмотреть сообщение
Влево и так работало....но никто не увидел что просила ВПРАВО)))
1 2 3 4 5 --> 5 1 2 3 4 это лево?
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 19:38     Массивы: осуществить циклический сдвиг элементов массива
Еще ссылки по теме:

Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо на k позиций, где k – индекс максимального элемента C++
Осуществить циклический сдвиг массива вправо на m позиций C++
C++ Осуществить циклический сдвиг массива на N элементов

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

Или воспользуйтесь поиском по форуму:
Ri
 Аватар для Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
22.05.2012, 19:38  [ТС]     Массивы: осуществить циклический сдвиг элементов массива #20
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
#include <iostream.h>
#include <conio.h>
 
void main()
{
//Ввод данных
  clrscr();
  int *A,N;
  cin>>N;
  A=new int[N];
      for (int i=0;i<N;i++)
      {
       cout<<"element = ";
       cin>>A[i];
      }
  delete []A;
 
//Чтоб ненужное не бросалось в глаза
  clrscr();
  cout<<"Massiv = ";
  for (i=0;i<N;i++) cout<<A[i]<<"   "; //Вывод массива на экран
  cout<<endl;
 
  int buf=A[N-1]; //Запоминаем последнее значение
 
  for (i=0;i<N;i++) A[N-i]=A[N-i-1]; //Сдвиг элементов
  A[0]=buf; //Первый элемент стал равен первоначальному последнему
 
      cout<<'\n';
       for (i=0;i<N;i++) cout<<A[i]<<"   "; //Вывод видеизмененного массива на экран
 
 getch();
 return;
}
Вот этот вариант замечательно..только одно но...можно ли этот буф убрать на что нибудь другое?
Yandex
Объявления
22.05.2012, 19:38     Массивы: осуществить циклический сдвиг элементов массива
Ответ Создать тему
Опции темы

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