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

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

Войти
Регистрация
Восстановить пароль
 
Рейтинг: Рейтинг темы: голосов - 33, средняя оценка - 4.97
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
#1

Как поменять порядок следования элементов в массиве на противоположный? - C++

08.02.2012, 22:26. Просмотров 4824. Ответов 11
Метки нет (Все метки)

Есть код:
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 <iostream>
#include <ctime>
using namespace std;
int kontrmas(int mass[],int size);
int main()
{
const int a=10;
int mas[a]={};
 
kontrmas(mas,a);
 
return 0;
}
int kontrmas(int mass[],int size)
{
 
    
//заполним массив
    srand(time(NULL));
    int i;
    for(i=0;i<size;i++)
    {
         mass[i]=rand()%200-100;
         cout<<"mass"<<mass[i]<<endl;
    }
    int d;
    for(int j=0;j<size;j++)
    {
        
        
        cout<<"mas"<<mass[j]<<endl;
    
    }
 
return 0;
}
В этом коде последний цикл не заполнен, так как с ним связан вопрос. В созданной функции есть массив, который заполняется случайными элементами в диапазоне от -100 до 100. Как в созданном массиве чисел поменять порядок их следования на противоположный? Уже что хочешь делаю, но в массиве меняется только первая половина чисел, а вторая половина зеркально отражает первую. Кто знает как поменять последовательность не прибегая к употреблению реверсов всяких, а самыми простыми методами. Сразу скажу, что вариант с переменной d обозначенной в коде и присвоении ей значения массива в таком виде:
C++
1
2
3
d=mass[j];
mass[j]=mass[size-1-j];
mass[size-1-j]=d;
...в этом виде я получаю все тот же зеркальный вариант массива... Если кто владеет хорошим приемом поделитесь, так как уже довольно долго думаю над задачей...
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
08.02.2012, 22:26     Как поменять порядок следования элементов в массиве на противоположный?
Посмотрите здесь:

Составить программу, которая меняет порядок следования элементов в массиве на обратный для линейных таблиц Х[12] и Y[10] C++
C++ Если К меньше N, изменить порядок следования элементов в исходном массиве на обратный
C++ Поменять порядок следования массива
C++ измените порядок следования элементов в массиве так,чтобы...
Изменить порядок следования элементов в массиве C++
Если целые числа упорядочены по возрастанию (a<b<c<d) сменить порядок их следования на противоположный C++
Изменить порядок следования элементов в массиве на обратный, используя массив указателей C++
После регистрации реклама в сообщениях будет скрыта и будут доступны все возможности форума.
Байт
Эксперт C
15537 / 9879 / 1484
Регистрация: 24.12.2010
Сообщений: 18,475
09.02.2012, 00:14     Как поменять порядок следования элементов в массиве на противоположный? #2
lesha1980, Вынеси вывод из цикла. После цикла реверса - цикл вывода. А ты показываешь еще не сделанную работу

Добавлено через 56 минут
Прости, я ошибся. Дело не в этом. Цикл надо крутить не до size, а до половины его. А так ты обратно ставишь элементы на свои места.
Но все равно - вывод массива надо делать после работы с ним.
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
09.02.2012, 16:06  [ТС]     Как поменять порядок следования элементов в массиве на противоположный? #3
Цитата Сообщение от Байт Посмотреть сообщение
lesha1980, Вынеси вывод из цикла. После цикла реверса - цикл вывода. А ты показываешь еще не сделанную работу

Добавлено через 56 минут
Прости, я ошибся. Дело не в этом. Цикл надо крутить не до size, а до половины его. А так ты обратно ставишь элементы на свои места.
Но все равно - вывод массива надо делать после работы с ним.
Ну правильно... цикл не доделан, как я и говорил, но выполнение цикла всего лишь до половины задачу не решает, так как выводит лишь первую половину массива. Если же к этой половине добавить еще один шаг, то появляется следующий элемент того же рода, что и в зеркальном виде. Вобщем возвращаюсь все к тому же результату. Хотя по идее в цикле должно присваиваться переменной d значение элемента массива, затем идет замена этого элемента массива на последний элемент по шагу, а затем этот последний элемент получает значение сохраненное в переменной d. Но так почему-то не происходит, т.е. - не выполняется последнее присваивание значения сохраненного в переменной d.
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.02.2012, 16:15     Как поменять порядок следования элементов в массиве на противоположный? #4
Вы не поняли, что вам написали. Байт имел в виду следующее
C++
1
2
3
4
5
6
for(int i=0,i_end = size/2;i<i_end;++i)
{
       int d = A[i];
       A[i] = A[size-1-i];
       A[size-1-i] = d;
}
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
09.02.2012, 17:51  [ТС]     Как поменять порядок следования элементов в массиве на противоположный? #5
Цитата Сообщение от I.M. Посмотреть сообщение
Вы не поняли, что вам написали. Байт имел в виду следующее
C++
1
2
3
4
5
6
for(int i=0,i_end = size/2;i<i_end;++i)
{
       int d = A[i];
       A[i] = A[size-1-i];
       A[size-1-i] = d;
}
Я об этом же, но в таком вот виде:
C++
1
2
3
4
5
6
7
8
9
for(int j=0;j<size/2;j++)
    {
        d=mass[j];
        mass[j]=mass[size-1-j];
        mass[size-1-j]=d;
        
        cout<<"mas"<<mass[j]<<endl;
    
    }
Как в данном виде, так и в приведенном выше вами виде кода выдает один и тот же результат в виде половины элементов массива... Задание еще не решено. Я бы бросил его и спросил бы у преподавателя, но как-то не хочется бросать, если есть все же хорошее решение. У меня куча еще других заданий, а на это задание просто хочется увидеть это решение и понять в чем моя ошибка и почему не могу его решить. Вот и вся проблема... Ведь в принципе эта половина size/2 и тот вариант, что вами представлен с еще одной дополнительной управляющей переменной и префиксным вариантом инкримента в принципе одно и то же...
I.M.
564 / 547 / 5
Регистрация: 16.12.2011
Сообщений: 1,389
09.02.2012, 20:03     Как поменять порядок следования элементов в массиве на противоположный? #6
Да что же вы упорно делаете вывод в том же цикле, что и перестановку элементов. Перестановку надо делать до size/2, а вывод, естественно, до size. Вот так:
C++
1
2
3
4
5
6
7
8
9
10
for(int i=0,i_end = size/2;i<i_end;++i)
{
       int d = A[i];
       A[i] = A[size-1-i];
       A[size-1-i] = d;
}
for(int i=0;i<size;++i)
{
       std::cout << A[i] << std::endl;
}
lesha1980
3 / 3 / 0
Регистрация: 06.01.2012
Сообщений: 42
09.02.2012, 20:51  [ТС]     Как поменять порядок следования элементов в массиве на противоположный? #7
I.M.,
Да, работает отлично. А я словно в ступор стал с этим выводом и никак в толк не мог взять как это сделать. А выходит я просто останавливался на пол шаге, делая вывод в том же цикле. Большое спасибо за подсказанное решение. Это решение отличное.
Igorjokia
0 / 0 / 0
Регистрация: 21.01.2015
Сообщений: 3
21.01.2015, 13:01     Как поменять порядок следования элементов в массиве на противоположный? #8
I.M.,
Добрый день! подскажите, почему в цикле нужно идти до середины.
Спасибо
SatanaXIII
Супер-модератор
Эксперт С++
5589 / 2623 / 239
Регистрация: 01.11.2011
Сообщений: 6,448
Завершенные тесты: 1
21.01.2015, 13:06     Как поменять порядок следования элементов в массиве на противоположный? #9
Цитата Сообщение от Igorjokia Посмотреть сообщение
подскажите, почему в цикле нужно идти до середины
Потому что массив зеркалируется относительно середины.
cooliofv
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 2
08.08.2016, 00:00     Как поменять порядок следования элементов в массиве на противоположный? #10
C++
1
2
3
4
5
6
7
8
9
10
11
for (int i = 0; i < size; i++) {
 
        
        for (int j = 0; j < size - i; j++) {
 
              swap(Arr[j], Arr[size - j - 1]);
            
        }//for j
 
        
}//for
а если цикл содержит нечетное количество элементов?
zss
Модератор
Эксперт С++
6242 / 5845 / 1891
Регистрация: 18.12.2011
Сообщений: 14,975
Завершенные тесты: 1
08.08.2016, 08:07     Как поменять порядок следования элементов в массиве на противоположный? #11
cooliofv, Обоснуйте, зачем Вы написали цикл в цикле?
Алгоритм поста 6 абсолютно корректный.
Если массив имеет нечетный размер, то средний элемент никуда не будет двигаться.
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
08.08.2016, 21:03     Как поменять порядок следования элементов в массиве на противоположный?
Еще ссылки по теме:

C++ При выполнении определенного условия поменять порядок следования символов строки на противоположный
В массиве, все элементы которого различны, найти и удалить n наименьших элементов, «поджимая» массив к началу и сохраняя порядок следования C++
C++ Изменить порядок следования элементов массива на противоположный
C++ Изменить порядок следования всех элементов в стеке на противоположный по условию
Изменить порядок следования элементов в массиве на обратный C++

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

Или воспользуйтесь поиском по форуму:
cooliofv
0 / 0 / 0
Регистрация: 07.08.2016
Сообщений: 2
08.08.2016, 21:03     Как поменять порядок следования элементов в массиве на противоположный? #12
хотел по аналогии сортировки методом пузырька как то провернуть.Только начал изучать программирование, искал варианты. Действительно, перестановка до половины массива работает и с нечетным количеством. Спасибо.
Yandex
Объявления
08.08.2016, 21:03     Как поменять порядок следования элементов в массиве на противоположный?
Ответ Создать тему
Опции темы

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