Форум программистов, компьютерный форум, киберфорум
С++ для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.60/35: Рейтинг темы: голосов - 35, средняя оценка - 4.60
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 87
1

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

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

Author24 — интернет-сервис помощи студентам
Подскажите пожалуйста,правильно ли написала код к задаче:дан массив размера 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
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
19.05.2012, 20:51
Ответы с готовыми решениями:

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

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

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

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

25
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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
Сообщений: 87
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
1321 / 983 / 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
Сообщений: 87
21.05.2012, 22:03  [ТС] 5
Я бы хотела в моем варианте)просто исправить что не знаю))Но спасибо)Не хочу задавать изначально размер массиву,а сделать через N как у меня..все отлично вот только значения меня пугают...ошибку найти не могу,но она где то в знаке или цифре...
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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
28 / 28 / 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
1321 / 983 / 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
Сообщений: 87
21.05.2012, 22:25  [ТС] 9
а в чем он исправлен?)))Вроде то же самое что и я писала выше...вот просто посмотрите сам результат который прога дает)Там чепуха
0
1321 / 983 / 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
Сообщений: 87
21.05.2012, 22:44  [ТС] 11
Я пишу в Borland C))Зачем там скажите Using namespace std.....
0
1321 / 983 / 267
Регистрация: 17.05.2012
Сообщений: 2,687
21.05.2012, 22:48 12
Не знал. На Visual Studio всё работает.
0
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 87
21.05.2012, 22:49  [ТС] 13
Ясно,тогда спасибо))Если там работает,то лучше сдам в Visual тогда)))Спасибо)
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
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
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
21.05.2012, 23:52 15
C++
1
16 delete []A;
поместить перед getch();
иначе может не то получиться
0
Ri
48 / 11 / 1
Регистрация: 15.09.2011
Сообщений: 87
22.05.2012, 19:08  [ТС] 16
Отлично...сдвиг влево сделали.....что насчет моей просьбы ВПРАВОя же спрашивала насчет знака где изменить или число..надо чтоб последний стал первым,первый-вторым и т.д

Добавлено через 4 часа 30 минут
Влево и так работало....но никто не увидел что просила ВПРАВО)))
0
Форумчанин
Эксперт CЭксперт С++
8215 / 5045 / 1437
Регистрация: 29.11.2010
Сообщений: 13,453
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
Сообщений: 87
22.05.2012, 19:27  [ТС] 18
А 20 мне зачем?Если он размера N.Также не совсем поняла таймы там зачем..Можно ли это в предложенном мной формате написать пожалуйста?
0
1373 / 596 / 199
Регистрация: 02.08.2011
Сообщений: 2,882
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
Сообщений: 87
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
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
22.05.2012, 19:38
Помогаю со студенческими работами здесь

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

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

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

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


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

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru