Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 18, средняя оценка - 4.89
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
#1

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

19.05.2012, 20:51. Просмотров 3386. Ответов 25
Метки нет (Все метки)

Подскажите пожалуйста,правильно ли написала код к задаче:дан массив размера 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();
}
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
19.05.2012, 20:51
Я подобрал для вас темы с готовыми решениями и ответами на вопрос Массивы: осуществить циклический сдвиг элементов массива (C++):

Осуществить циклический сдвиг элементов массива
Здравствуйте! Имеется задача: &quot;Дан массив размера N и число k (0 &lt; k &lt; 5, k &lt;...

Осуществить циклический сдвиг массива на N элементов
Осуществить циклический сдвиг массива на N элементов, направление указывает...

Осуществить циклический сдвиг элементов массива влево на k позиций
Дан массив размера N и число k (0 &lt; k &lt; 5, k &lt; N). Осуществить циклический...

Осуществить циклический сдвиг элементов массива вправо на k позиций
Решаю задачи на сервере одном, задание было &quot;Дан массив размера N ≥ 2 и число...

Осуществить циклический сдвиг элементов одномерного массива на k позиций
работает правильно только если k=1 если больше то сдвиг делает правильно, но...

Осуществить циклический сдвиг элементов массива вправо на одну позицию
4Дан массив размера N. Осуществить циклический сдвиг элементов массива вправо...

25
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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;
1
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();
}
0
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
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; 
 
}
0
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:03  [ТС] #5
Я бы хотела в моем варианте)просто исправить что не знаю))Но спасибо)Не хочу задавать изначально размер массиву,а сделать через N как у меня..все отлично вот только значения меня пугают...ошибку найти не могу,но она где то в знаке или цифре...
0
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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; 
}
0
Precise
26 / 26 / 8
Регистрация: 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");
}
1
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
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(); 
 
}
1
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:25  [ТС] #9
а в чем он исправлен?)))Вроде то же самое что и я писала выше...вот просто посмотрите сам результат который прога дает)Там чепуха
0
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
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();
}
1
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:44  [ТС] #11
Я пишу в Borland C))Зачем там скажите Using namespace std.....
0
David Sylva
1293 / 955 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
21.05.2012, 22:48 #12
Не знал. На Visual Studio всё работает.
0
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
21.05.2012, 22:49  [ТС] #13
Ясно,тогда спасибо))Если там работает,то лучше сдам в Visual тогда)))Спасибо)
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
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;
}
Главное не в чем сдавать, а понимать технолгию
1
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
21.05.2012, 23:52 #15
C++
1
16 delete []A;
поместить перед getch();
иначе может не то получиться
0
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
22.05.2012, 19:08  [ТС] #16
Отлично...сдвиг влево сделали.....что насчет моей просьбы ВПРАВОя же спрашивала насчет знака где изменить или число..надо чтоб последний стал первым,первый-вторым и т.д

Добавлено через 4 часа 30 минут
Влево и так работало....но никто не увидел что просила ВПРАВО)))
0
MrGluck
Модератор
Эксперт CЭксперт С++
8023 / 4866 / 1425
Регистрация: 29.11.2010
Сообщений: 13,251
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; 
}
0
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 86
22.05.2012, 19:27  [ТС] #18
А 20 мне зачем?Если он размера N.Также не совсем поняла таймы там зачем..Можно ли это в предложенном мной формате написать пожалуйста?
0
daslex
1291 / 535 / 177
Регистрация: 02.08.2011
Сообщений: 2,756
22.05.2012, 19:28 #19
Цитата Сообщение от Ri Посмотреть сообщение
Влево и так работало....но никто не увидел что просила ВПРАВО)))
1 2 3 4 5 --> 5 1 2 3 4 это лево?
0
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;
}
Вот этот вариант замечательно..только одно но...можно ли этот буф убрать на что нибудь другое?
0
22.05.2012, 19:38
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.05.2012, 19:38
Привет! Вот еще темы с решениями:

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

Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций
Добрый день ребят, очень нужна Ваша помощь. Помогите решить задачу. Дан...

Осуществить циклический сдвиг массива на N элементов. Направление сдвига указывает пользователь
Осуществить циклический сдвиг массива на N элементов. Направление сдвига...

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


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

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

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