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

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

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

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

19.05.2012, 20:51. Просмотров 3218. Ответов 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++):

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

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

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

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

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

Осуществить циклический сдвиг элементов массива влево1|вправо2 на k позиций - C++
Добрый день ребят, очень нужна Ваша помощь. Помогите решить задачу. Дан массив размера N и число k (0&lt;k&lt;5, k&lt;N). Осуществить...

25
MrGluck
Модератор
Эксперт CЭксперт С++
7525 / 4663 / 704
Регистрация: 29.11.2010
Сообщений: 12,738
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
1291 / 953 / 51
Регистрация: 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Эксперт С++
7525 / 4663 / 704
Регистрация: 29.11.2010
Сообщений: 12,738
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 / 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");
}
1
David Sylva
1291 / 953 / 51
Регистрация: 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
1291 / 953 / 51
Регистрация: 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
1291 / 953 / 51
Регистрация: 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
1288 / 532 / 110
Регистрация: 02.08.2011
Сообщений: 2,754
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
1288 / 532 / 110
Регистрация: 02.08.2011
Сообщений: 2,754
21.05.2012, 23:52 #15
C++
1
16 delete []A;
поместить перед getch();
иначе может не то получиться
0
21.05.2012, 23:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.05.2012, 23:52
Привет! Вот еще темы с ответами:

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

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

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

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


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

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

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