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

Произвести циклический сдвиг вправо элементов массива - C++

Восстановить пароль Регистрация
 
Рейтинг: Рейтинг темы: голосов - 20, средняя оценка - 4.90
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
19.10.2010, 22:14     Произвести циклический сдвиг вправо элементов массива #1
Люди в Си++ дуб дубом. Помагите очень надо.
Вот текст задачи.
Ввести одномерный целочисленный массив A, вывести его. Произвести циклический сдвиг вправо его элементов столько раз, сколько раз в массиве встречаются отрицательные числа.
Люди надо очень срочно. Пожалуйста.
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
19.10.2010, 22:22     Произвести циклический сдвиг вправо элементов массива #2
Дмитрий Дьяков, Ну кидайте свои попытки решения. Или вы думаете здесь люди сидят и от нефига делать всем все решают?
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
20.10.2010, 17:38  [ТС]     Произвести циклический сдвиг вправо элементов массива #3
Я же написал что я в си дуб дубом. Я не программист и даже не учусь на него. Но на кой то мне дали делать задачи на си. Вот щас и мучаюсь. Ну спасибо что хоть ответили.

Добавлено через 18 часов 14 минут
Вот я попытался Начать. В этом коде я ввожу и вывожу массив на экран. Выводит полный брет. Что не так.

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
#include <stdio.h>
#include <math.h>
 
void main (void)
{
float a[10]; int i;
 printf("Vvedite massiv iz 10 celix elementov\n");
 
 for (i=0; i<10; i++) // Ввод массива из 10 элементовж
  scanf("%d", &a[i]);
   for (i=0; i<10; i++) // Вывод массива из 10 элементовж
  printf("%d " , &a[i]);
 
 
  fflush(stdin);
  getchar();
}
angels
 Аватар для angels
1 / 1 / 3
Регистрация: 20.10.2010
Сообщений: 30
20.10.2010, 18:04     Произвести циклический сдвиг вправо элементов массива #4
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>
 
void main (void)
{
int a[10];//int- öåëî÷èñåëüГ*ûé ГІГЁГЇ
 int i;
printf("Vvedite massiv iz 10 celix elementov\n");
 
for (i=0; i<10; i++) // Ââîä Г¬Г*Г±Г±ГЁГўГ* ГЁГ§ 10 ýëåìåГ*òîâæ
scanf("%f", &a[i]);
for (i=0; i<10; i++) // Âûâîä Г¬Г*Г±Г±ГЁГўГ* ГЁГ§ 10 ýëåìåГ*òîâæ
printf("%f " , &a[i]);
 
 
fflush(stdin);
getchar();
}
должно работать...
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
20.10.2010, 18:06  [ТС]     Произвести циклический сдвиг вправо элементов массива #5
Нет по проежнему выводит полный бред
angels
 Аватар для angels
1 / 1 / 3
Регистрация: 20.10.2010
Сообщений: 30
20.10.2010, 18:13     Произвести циклический сдвиг вправо элементов массива #6
Сообщение было отмечено автором темы, экспертом или модератором как ответ
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
#include <stdio.h>
#include <math.h>
 
void main (void)
{
int a[10];//int- öåëî÷èñåëüГ*ûé ГІГЁГЇ
 int i;
printf("Vvedite massiv iz 10 celix elementov\n");
 
for (i=0; i<10; i++) // Ââîä Г¬Г*Г±Г±ГЁГўГ* ГЁГ§ 10 ýëåìåГ*òîâæ
scanf("%d", &a[i]);
for (i=0; i<10; i++) // Âûâîä Г¬Г*Г±Г±ГЁГўГ* ГЁГ§ 10 ýëåìåГ*òîâæ
printf("%d " , a[i]);
 
 
fflush(stdin);
getchar();
}

А сейчас???
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
20.10.2010, 18:18  [ТС]     Произвести циклический сдвиг вправо элементов массива #7
Все равно нет.
Я сделал по другому. Я вот что понять не могу. Я нашел кол-во отрицательных элементов в массиве. мне надо теперь сделать циклический сдвиг вправо элеменнтов столько раз сколько отрицательных элементов в массиве
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
20.10.2010, 18:18     Произвести циклический сдвиг вправо элементов массива #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 <algorithm>
#include <iostream>
#include <functional>
using namespace std;
 
void Reverse(int * Arr,size_t k) {std::reverse(Arr,Arr+k);}
 
int main()
{
    int * Arr;
    cout << "Enter size   ";
     size_t size ;
     cin >> size;
     Arr = new int[size];
     for(int i = 0;i < size;++i)
     {
         cout << "Arr[ " << i << " ] = ";
             cin >> Arr[i];
     }
    size_t k = std::count_if(Arr,Arr+size,std::bind2nd(std::less<int>(),0));
    k = size - k;
    Reverse(Arr,k);
    Reverse(Arr+k,size-k);
    Reverse(Arr,size);
 
 
    for(int i = 0;i < 10;++i)
        cout << Arr[i] << " ";
    
 
system("pause");
}
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
20.10.2010, 19:25  [ТС]     Произвести циклический сдвиг вправо элементов массива #9
Вот код
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 <iostream>
#include <conio.h>
const int n = 10; //îáúÿâëÿåì ГЄГ®Г*Г±ГІГ*Г*ГІГі äëÿ Г¬Г*Г±Г±ГЁГўГ*
void main () {
 
int X[n]; //îáúÿâëÿåì ïåðåìåГ*Г*ûé äðîáГ*îãî ГІГЁГЇГ*
int i; //ïåðåìåГ*Г*Г*Гї äëÿ öèêëГ*
int n;
n=0;
for (i = 0; i < 10 ; i++){
std::cout<<"X["<<i<<"] = "; //ГЌГ* ГЅГЄГ°Г*Г* âûâîäèòñÿ 'X[i] = '
std::cin>>X[i]; //ââîäèì Г± ГЄГ«Г*ГўГЁГ*òóðû öåëûå Г·ГЁГ±Г«Г*
}
std::cout<<"\n"; //Ïåðåõîä Г*Г* ñëåäóþùóþ ñòðîêó
 
for (i = 0; i < 10 ; i++){
std::cout<<"X["<<i<<"] = "<<X[i]<<"\t";
//ГЌГ* ГЅГЄГ°Г*Г* âûâîäèòñÿ ðåçóëüòГ*ГІ Г*Г*ГёГҐГЈГ® ââîäГ*
}
 
for (i = 0; i < 10 ; i++)
if (X[i]<0) n++;
std::cout<<"Kol-vo otricatelnix elementov="<<n<<"\n";
 
 
 
_getch(); //ГќГЄГ°Г*Г* Г*ГҐ Г§Г*êðûâГ*ГҐГІГ±Гї, ïîêГ* Г*ГҐ Г*Г*Г¦Г*ГІГ* ëþáГ*Гї ГЄГ«Г*ГўГЁГёГ*
}
Добавлено через 35 минут
Ну что ни кто помоч не может?

Добавлено через 31 минуту
Люди вы если не знаете вы хоть напишите. Я просто жду. Никак не могу понять как это сделать.
angels
 Аватар для angels
1 / 1 / 3
Регистрация: 20.10.2010
Сообщений: 30
20.10.2010, 19:42     Произвести циклический сдвиг вправо элементов массива #10
отталкивайся от количества отрицательных елементов.
C++
1
2
3
4
for (i = 0; i < n+1 ; i++)//n-количество отрицательных елементов
printf(" ");
for (i = 0; i < 10 ; i++)
printf("%d",X[n]);//выходной масив
...отталкивайся от етого... других вариантов уменя нет...
TheMachinist
 Аватар для TheMachinist
242 / 174 / 15
Регистрация: 14.06.2010
Сообщений: 422
20.10.2010, 20:03     Произвести циклический сдвиг вправо элементов массива #11
А чем мой вариант не устраивает???
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
20.10.2010, 23:32  [ТС]     Произвести циклический сдвиг вправо элементов массива #12
Мне это ни чего не дает. Я написал код. Вот отталкиваясь от него мне нужна помощь. Как сдвинуть элементы массива циклически

Добавлено через 5 минут
Да я не пойму как твоим вариантом можно циклически сдивнуть элементы массива.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.10.2010, 23:43     Произвести циклический сдвиг вправо элементов массива #13
Дмитрий Дьяков, В таком случае советую прочитать про STL.
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
20.10.2010, 23:44  [ТС]     Произвести циклический сдвиг вправо элементов массива #14
Спасибо. Я искал в нете ответ на свой вопрос. нашел два алгоритма но не могу с ними разобраться.
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
20.10.2010, 23:45     Произвести циклический сдвиг вправо элементов массива #15
Дмитрий Дьяков, Скиньте код. Попробуем прояснить.
Только заключите его в тег C++, иначе никто читать не будет.
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
21.10.2010, 00:00  [ТС]     Произвести циклический сдвиг вправо элементов массива #16
Вот код
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
 
const n=10;
 
void main(){
** int b,A[n]={1,2,3,4,5,6,7,8,9,0};
** b=A[n-1]; 
** for(int i=n-2;i>=0;i--)
******A[i+1]=A[i];
** A[0]=b;
** for(i=0; i<n;i++)
****cout<< A[i]<<',';
}
но как к своей программе это припоять ума не приложу. При этом у меня в программе массив должен сдвигаться на кол-во отрицательных элементов. я его нашел

Добавлено через 13 минут
Извеняюсь про теги не сразу увидел

C++
1
2
3
4
5
6
7
8
9
10
11
12
13
#include <iostream.h>
 
const n=10;
 
void main(){
** int b,A[n]={1,2,3,4,5,6,7,8,9,0};
** b=A[n-1]; 
** for(int i=n-2;i>=0;i--)
******A[i+1]=A[i];
** A[0]=b;
** for(i=0; i<n;i++)
****cout<< A[i]<<',';
}
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.10.2010, 00:06     Произвести циклический сдвиг вправо элементов массива #17
Дмитрий Дьяков, Код по сути действительно циклически сдвигает элементы. A[i+1] становится равным A[i]...
А чтобы произвести такой циклический сдвиг я так понимаю должно быть что-то вроде...

C++
1
2
3
4
b=A[numb_of_negative_elements-1];
for(int i=numb_of_negative_elements-2; i>=0; i--)
    A[i+1]=A[i];
A[0]=b;
Правильность совершенно не гарантирую
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
21.10.2010, 00:17  [ТС]     Произвести циклический сдвиг вправо элементов массива #18
К сожалению это не правильно. А не подскажите как можно осущиствить цикл не от 1 до 10. а наоборот от10 до 1?
ForEveR
Модератор
Эксперт C++
 Аватар для ForEveR
7927 / 4709 / 318
Регистрация: 24.06.2010
Сообщений: 10,524
Завершенные тесты: 3
21.10.2010, 00:21     Произвести циклический сдвиг вправо элементов массива #19
Дмитрий Дьяков,

C++
1
for(int i=10; i>=0; --i)
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
21.10.2010, 12:29     Произвести циклический сдвиг вправо элементов массива
Еще ссылки по теме:

C++ Циклический сдвиг четных строк двумерного массива на k элементов вправо
C++ Осуществить циклический сдвиг элементов массива вправо на k позиций
C++ Циклический сдвиг вниз и вправо двумерного динамического массива

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

Или воспользуйтесь поиском по форуму:
Дмитрий Дьяков
0 / 0 / 0
Регистрация: 19.10.2010
Сообщений: 11
21.10.2010, 12:29  [ТС]     Произвести циклический сдвиг вправо элементов массива #20
Ни как не могу реализовать. люди помогите. Завтра сдавать

Добавлено через 33 минуты
Вот написал код сдвига вправо на 1 элемент. а как сделать на N не могу понять.
C++
1
2
3
4
5
p=X[9];
 
for (i=9;i>0; i--)
X[i]=X[i--];
X[0]=p;
Добавлено через 11 часов 23 минуты
Этот вариант не подошел. Всем спасибо. Уже сделал по своему и сегодня сдал лабу. Еще раз всем спасибо. Если что буду обращаться. Вижу что люди откликаются на позывы о помощи.
Yandex
Объявления
21.10.2010, 12:29     Произвести циклический сдвиг вправо элементов массива
Ответ Создать тему
Опции темы

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