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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 10, средняя оценка - 4.80
Sasha1994
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 15
#1

Указатели: сдвинуть элементы циклически на 1 позицию влево - C++

04.10.2012, 23:00. Просмотров 1398. Ответов 20
Метки нет (Все метки)

Условие задачи: Заполните случайным образом одномерный массив из n элементов и здвиньте элементы циклически на 1 позицию влево. (Например для n=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
33
#include<stdio.h>
#include<conio.h>
#include <iostream>
 
using namespace std;
 
int main(){
int n,i;
 
cout<<"\n\tNachalnaya matriza";
 
cout<<"\n\t";
int mas[8];
 
for(i=0;i<8;i++)
  {
      mas[i]=rand()%100;
      cout<<mas[i];cout<<" ";
  }
 
 
cout<<"\n\n\tNoviy masiv\n\n\t";
 
for(i=0;i<7;i++)// oskl'ki mi zsunuli elementi masivu na 1 vlivo, znachit jogo rozmir zmenshivsya na 1  
  {
    mas[i]=mas[i+1];// drugij element stae pershim i tak dali
    cout<<mas[i];cout<<" ";
  }
 
cout<<"\n";
cout<<"\n\n\tnazhmit bud-yaku klavishu dlya vihodu z programi";
getch();
}
Вариант с указателем(не работает):

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
#include<iostream>
#include<conio.h>
#include<stdio.h>
using namespace std;
int main() {
 
int mas[8];
int* pMas;
int i,n;
pMas = &mas[0];
 
cout<<"\n\tNachalnaya matriza\n";
cout<<"\n\t";
 
for(i=0;i<8;i++)
  {
  pMas+=i;
  *pMas=rand()%100;
  cout<<*pMas;cout<<" ";
  }
 
cout<<"\n\n\tNoviy masiv\n\n\t";
 
for(i=1;i<8;i++)
  {
  pMas+=i;
  cout<<*pMas;cout<<" ";
  }
cout<<"\n";
system("pause");
}
В новой матрице числа совсем не такие, как в начяльной матрице
Что я делаю неправильно в варианте с указателем? Помогите пожалуйста.
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
04.10.2012, 23:00
Здравствуйте! Я подобрал для вас темы с ответами на вопрос Указатели: сдвинуть элементы циклически на 1 позицию влево (C++):

Сформировать массив десятичных цифр числа А. Элементы массива цифр сдвинуть циклически влево на 1 позицию - C++
дано целое десятичное число А. Сформировать массив десятичных цифр числа А. Элементы массива цифр сдвинуть циклически влево на 1 позицию ....

Элементы массива циклически сдвинуть на k позиций влево - C++
Помогите пожалуйста написать программу!!!понимаю что все должно быть оч легко, но... В С++: 1. Дан массив, состоящий из символов....

Сдвинуть все элементы последовательности циклически на k позиций влево - C++
1. Дано целое число. Если число отрицательное, то необходимо вывести все четные числа, начиная со введенного до -2. Если число...

Одномерный массив. Сдвинуть элементы циклически на n позиций влево - C++
Ввести одномерный статический массив из k чисел. Сдвинуть элементы массива циклически на n позиций влево. #include &lt;iostream&gt; ...

Сдвинуть циклически элементы одномерного массива на k позиций влево - C++
Тема и есть условие задачи... Сам же я застопорился на написании алгоритма сдвига :- #include &lt;iostream.h&gt; #include &lt;math.h&gt; int...

Все элементы массива X(30) циклически сдвинуть на n позиций влево - C++
Все элементы массива X(30) циклически сдвинуть на n позиций влево при помощи указателей

20
DiffEreD
1432 / 769 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.10.2012, 23:49 #16
Цитата Сообщение от John Prick Посмотреть сообщение
это С++11 ?
array и новый цикл for да, rotate и generate - стандартные алгоритмы.
1
John Prick
830 / 763 / 152
Регистрация: 27.07.2012
Сообщений: 2,176
Завершенные тесты: 3
04.10.2012, 23:55 #17
Цитата Сообщение от BumerangSP Посмотреть сообщение
И ей еще бы универсальности. Чтоб не только с 8 элементами работала.
Ну это уж сами. Не маленькие.

Добавлено через 2 минуты
yuron_477, а вот это разве есть в старом стандарте?
generate(ar.begin(), ar.end(), [] {return rand()%100;});
0
DiffEreD
1432 / 769 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
04.10.2012, 23:59 #18
Я точно не знаю были ли лямбды в старом стандарте
0
Sasha1994
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 15
05.10.2012, 00:09  [ТС] #19
Цитата Сообщение от yuron_477 Посмотреть сообщение
C++
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
#include <iostream>
#include <array>
#include <algorithm>
#include <ctime>
#include <Windows.h>
 
const int n = 8;
using namespace std;
int main()
{
    SetConsoleCP (1251); SetConsoleOutputCP (1251); //для русификации текста
    srand(time(0));
    array<int, n> ar;
    generate(ar.begin(), ar.end(), [] {return rand()%100;});
    cout<<"Начальный массив:\n";
    for (const int& x : ar) cout<<x<<" ";
    rotate(ar.begin(), ar.begin() + 1, ar.end());
    cout<<"\nПосле сдвига влево:\n";
    for (const int& x : ar) cout<<x<<" ";
    cout<<endl;
    system("pause");
    return 0;
}
у меня почему то не работает
0
Миниатюры
Указатели: сдвинуть элементы циклически на 1 позицию влево  
DiffEreD
1432 / 769 / 95
Регистрация: 21.06.2011
Сообщений: 1,740
Записей в блоге: 2
05.10.2012, 00:15 #20
Ваш компилятор, видимо этого не поддерживает. Попробуйте заменить цикл вывода
C++
1
for (int i = 0; i<n; i++) cout<<ar[i]<<" ";
1
Sasha1994
0 / 0 / 0
Регистрация: 07.09.2012
Сообщений: 15
05.10.2012, 00:24  [ТС] #21
наверное остановлюсь на этом, так как я на 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
#include<iostream>
using namespace std;
 
int main()
{
 
    int mas[8];
    int* pMas = mas;
    int i;
 
    cout<<"\n\tNachalnaya matriza\n";
    cout<<"\n\t";
    // Создаём массив
    for(i=0; i < 8; ++i)
    {
        pMas[i] = rand() % 100;
        cout << pMas[i] << " ";
    }
    // Циклически сдвигаем на 1
    cout<<"\n\n\tNoviy masiv\n\n\t";
    int first = pMas[0];
    for(i = 0; i < 7; ++i) // индекс до 7, а не 8, иначе выйдем за границу массива
        pMas[i] = pMas[i + 1];
    pMas[7] = first;
    for (i = 0; i < 8; ++i)
        cout << pMas[i] << " ";
 
    cout<<"\n";
    system("pause");
}
п.с. К концу октября нужно сдать 8 лабораторных(это уже №5), а мы еще даже массивы и указатели не учили. Тупая система образования в Украине(ну или препод неочень).
п.п.с Всем спс что помогли
0
05.10.2012, 00:24
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
05.10.2012, 00:24
Привет! Вот еще темы с ответами:

Элементы линейного массива сдвинуть циклически на две позиции влево - C++
Дорогие форумчане помогите с переводом с pascal в C++ { of integer; i,j:integer; N:integer; Begin ClrScr; Repeat ...

Сдвинуть элементы на одну позицию вправо\влево - C++
Ребята помогите пожалуйста с решением задачи на с++ : Сдвинуть элементы на одну позицию вправо\влево.

Сдвинуть элементы массива циклически на M влево, перевернуть нечетные строки и посчитать простые числа - C++
Доброго времени суток. Помогите составить программу. Заранее благодарен. Тут несколько условий, не обязательно одну большую делать, можно к...

Циклически сдвинуть все элементы матрицы влево в строках, которые начинаются с положительного элемента - C++
(((Там какая та задача из темы Массивов))) Для решения этой задачи: В матрице Z(4,5) сдвинуть все элементы влево (циклически) в тех...


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

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

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