Форум программистов, компьютерный форум, киберфорум
Наши страницы
С++ для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.75/8: Рейтинг темы: голосов - 8, средняя оценка - 4.75
Nikolay_1
0 / 0 / 2
Регистрация: 15.01.2014
Сообщений: 24
1

Вывести элементы массива в виде таблицы и переставить его элементы местами

21.01.2014, 14:12. Просмотров 1587. Ответов 19
Метки нет (Все метки)

Скажите каким образом переставляется двумерный массив ? К примеру : {1,2,3,4,5} мне нужно элементы поменять местами так чтобы последний (5) стал на место предпоследнего (4) и так со всеми элементами в массиве , у меня есть коды , там где я выводил мин./макс элемент в массиве (с этим более менее ясно) , а вот с перестановкой запутался ... Спасибо заранее.
0
Similar
Эксперт
41792 / 34177 / 6122
Регистрация: 12.04.2006
Сообщений: 57,940
21.01.2014, 14:12
Ответы с готовыми решениями:

Ввести массив в виде таблицы и переставить его элементы местами
То есть последний элемент в массиве становится предпоследним и тд... Вот я написал массив в виде...

Ввести элементы двумерного массива с клавы С++.Нужно вывести его на экран в виде таблицы, в конце каждой строки надо вывести самый большой элемент
Вот мой код : #include <iostream> #include <Windows.h> using namespace std; using std::cout;...

Дан массив а1+ a2+…+an Переставить его элементы так чтобы в начале массива расположились все его неотрицательные элементы, а в конце - отрицательные
Дан массив а1+ a2+…+an помогите переставить его элементы так чтобы в начале массива расположились...

Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в начале массива расположились все его неотрицательные элементы, а в конце – отрицательные
Помогите плиз написать программу: Дан массив а1,а2,,…,аn. Переставить его элементы так, чтобы в...

Переставить местами элементы массива так, чтобы сначала были элементы на четных позициях, а потом на нечетных
нужно переставить местами элементы массива так, чтобы сначала были элементы на четных позициях, а...

19
shinarthas
0 / 0 / 0
Регистрация: 06.12.2013
Сообщений: 30
21.01.2014, 17:21 2
Доступ к каждому элементу массива можно получить с помощью индекса mas[i][j][k], где I j k его номер, поменять элементы массива можно с помощью простого обмена это возможно с мощью вспомогательной переменной (наприме buf).
Ps я думаю и без кода разберёшься.
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
21.01.2014, 19:19 3
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
мне нужно элементы поменять местами так
Не совсем понятно, как именно вам надо поменять местами элементы. Вот есть массив m={1,2,3,4,5}, что должно получиться в итоге ? вот такой массив m={1,3,2,5,4} ?
0
Ev_Hyper
Заблокирован
21.01.2014, 20:22 4
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
Скажите каким образом переставляется двумерный массив ? К примеру : {1,2,3,4,5} мне нужно элементы поменять местами так чтобы последний (5) стал на место предпоследнего (4)
то, что вы привели НЕ двумерный массив.

Поясните, то, что вы имеете ввиду на примере:

1 2 3 4 5
1 2 3 4 6
7 8 9 0 9
0
21.01.2014, 20:22
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
21.01.2014, 20:24 5
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
то, что вы привели НЕ двумерный массив.
Да и не важно это. Можно и на примере одномерного показать, главное принцип узнать.
А сортировать - да, придется двумерный.
0
Nikolay_1
0 / 0 / 2
Регистрация: 15.01.2014
Сообщений: 24
22.01.2014, 01:34  [ТС] 6
Цитата Сообщение от shinarthas Посмотреть сообщение
Доступ к каждому элементу массива можно получить с помощью индекса mas[i][j][k], где I j k его номер, поменять элементы массива можно с помощью простого обмена это возможно с мощью вспомогательной переменной (наприме buf).
Ps я думаю и без кода разберёшься.
Вот как раз мне с этим-то и не понятно , как работает buf , и как взаимозаменять элементы подставлять значения , Вы верно понимаете вопрос , вот мой код , (вроде бы все просто на первый взгляд , но мне не очень) Как вот их менять местами через вышеуказанный buf и переменные?
Написал комменты как понимаю код...

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
37
38
39
40
41
42
43
const int Y = 3, X = 4;//Высота и ширина массива
    int a[Y][X] = {0};//Создание массива
 
    cout << "Input elements:\n";
    for (int i = 0; i < Y; i++)//Перебираем строки
    {
        for (int j = 0; j < X; j++)//Перебираем столбцы
        {
            cout << "a[" << i << "][" << j << "] = ";//a[0][0] = 
            cin >> a[i][j];//Вводим текущий элемент
        }
    }
    //Вывод массива в виде таблицы
    cout << "Source matrix\n";
    for (int i = 0; i < Y; i++)
    {
        
        for (int j = 0; j < X; j++)
        {
            cout << a[i][j] << "\t";
        }
        cout << "\n";
    }
    for (int i1=0, i2=Y-1;i1<i2;i1++,i2--)
    {
    for(int j=0; j<X;j++)
    {
        int buf=a[i1][j]=a[i2][j]; 
        a[i2][j]=buf;
    }
 
    }
    
 
    cout << "Result matrix:\n";
    for (int i=0; i <Y; i++)
    {
        for (int j=0; j < X;j++)
        {
            cout << a [i][j] << "\t";
        }
        cout <<"\n";
    }
Добавлено через 4 минуты
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
то, что вы привели НЕ двумерный массив.

Поясните, то, что вы имеете ввиду на примере:

1 2 3 4 5
1 2 3 4 6
7 8 9 0 9
Прошу прощения , я поспешил , нужно ввести с клавиатуры элементы двумерного массива. Необходимо вывести массив на экран в виде таблицы, после чего переставить его строки в обратном порядке(первая становится последней, вторая - предпоследней. и т.д.) и вывести массив на экран еще раз;
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 04:03 7
уже поздно, завтра обещаю написать код и объяснить, как он работает.
0
abit
273 / 272 / 83
Регистрация: 03.02.2013
Сообщений: 779
22.01.2014, 04:39 8
Nikolay_1,
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
const int Y = 3, X = 4;//Высота и ширина массива
* * int a[Y][X] = {0};//Создание массива
не надо так писать, это плохие рудименты Си

C++
1
cout << "Input elements:\n";
эм... вы слыхали про области видимости? термин std может знаком?

C++
1
 for (int i = 0; i < Y; i++)//Перебираем строки
ой-ой... когда в for вместо ++i пишут i++ это всё равно что на моих глазах убивают белого котёнка, больно смотреть, здесь нет никакой необходимости душить котят, как и дальше в коде, впрочем

дальше читать не возможно, раз в каждой строчке до этого ошибки...

дайте конкретно вашу задачу где что переставлять, из фразы
К примеру : {1,2,3,4,5} мне нужно элементы поменять местами так чтобы последний (5) стал на место предпоследнего (4) и так со всеми элементами в массиве
нехрена не ясно, кроме, что надо переставить 4 и 5 местами, что со стальными то? с какими конкретно элементами? как переставлять? я никакой связи не вижу, ну вот вам задача в ответ, я написал число 123456, переставил там две цифры, получил 132456, переставь остальные цифры
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 05:44 9
abit,
Цитата Сообщение от abit Посмотреть сообщение
эм... вы слыхали про области видимости? термин std может знаком?
Возможно, пространство имён объявлено выше, так что не надо придираться)

Цитата Сообщение от abit Посмотреть сообщение
ой-ой... когда в for вместо ++i пишут i++
Нууу, это если мы будем работать с "тяжелыми" типами данных, а в данном случае простительно но вообще, правда Ваша, лучше использовать префикс, чтобы не привыкнуть, а постфикс только в тех случаях, где он действительно необходим)

Цитата Сообщение от Nikolay_1 Посмотреть сообщение
первая становится последней, вторая - предпоследней. и т.д.
Думаю, после этого уже что-то прояснилось, но не полностью. Вам самому не надоело, что Вас уже пятый раз переспрашивают ?) Ладно, переставим первую строку на место последней, вторую, на место предпоследней.. А куда девать последнюю и предпоследнюю ? на место первой и второй или циклически сдвигать вниз ? Да поясните вы уже на простом примере, чем писать сочинение...

Вот массив:
1 2 3 4 5
6 7 8 9 9
8 7 6 5 4
7 9 4 5 3
0 0 4 3 5

Что мы должны получить на выходе ?
0
Ev_Hyper
Заблокирован
22.01.2014, 09:18 10
Цитата Сообщение от abit Посмотреть сообщение
ой-ой... когда в for вместо ++i пишут i++ это всё равно что на моих глазах убивают белого котёнка, больно смотреть, здесь нет никакой необходимости душить котят, как и дальше в коде, впрочем
в чем существенная разница использования префиксной и постфиксной формы в цикле for?

Цитата Сообщение от Бедел Посмотреть сообщение
А куда девать последнюю и предпоследнюю ? на место первой и второй или циклически сдвигать вниз ? Да поясните вы уже на простом примере, чем писать сочинение...
Автор уже обяснил:
Цитата Сообщение от Nikolay_1 Посмотреть сообщение
после чего переставить его строки в обратном порядке(первая становится последней, вторая - предпоследней. и т.д.) и вывести массив на экран еще раз;
Цитата Сообщение от Бедел Посмотреть сообщение
1 2 3 4 5
6 7 8 9 9
8 7 6 5 4
7 9 4 5 3
0 0 4 3 5
на выходе:
0 0 4 3 5
7 9 4 5 3
8 7 6 5 4
6 7 8 9 9
1 2 3 4 5
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 18:21 11
Ev_Hyper,
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
в чем существенная разница использования префиксной и постфиксной формы в цикле for?
Позвольте мне ответить на этот вопрос) В данном случае - абсолютно никакой. Любой современный оптимизированный компилятор выдаст одинаковый ассемблерный код, то есть, компилятор сам заменит постфиксную форму на префиксную, так как первое значение итератора нигде не используется. Если же мы имеем дело с объектами, то компилятору при постфиксном инкременте приходится создавать дополнительно временный объёкт для хранения предыдущего значения, что увеличивает время исполнения вашего кода. Впрочем, почитайте об этом, тема довольно-таки заезженная, и уже достаточное количество раз обсуждалась)
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
на выходе:
0 0 4 3 5
7 9 4 5 3
8 7 6 5 4
6 7 8 9 9
1 2 3 4 5
Надеюсь, мы правильно поняли ТС)
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 19:48 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
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
#include <iostream>
#include <iomanip>
 
using namespace std;
 
int main()
{
    setlocale(LC_ALL, "Russian");
    int const a=5, b=5;
    int mas[a][b];
    cout << "Введите элементы массива: " << "\n";
    for (int i=0; i<a; ++i)
        for (int j=0; j<b; ++j)
            cin >> mas[i][j];
            cout << "Введенный массив: "<< "\n";
    for (int i=0; i<a; ++i)
    {
       for (int j=0; j<b; ++j)
            cout << setw(4) << mas[i][j];  // setw() используется для корректного отображения массива, почитайте о нём сами.
      cout << "\n\n";
    }
    int buf;
    for (int i=0; i<a/2; ++i)  // Пробегаем до середины матрицы, ибо если пойдем дальше, то цикл переставит всё обратно на свои места, и толку от проделанной работы не будет (поэксперементируйте сами)
    {
        for (int j=0; j<b; ++j)
        {
            {
                buf=mas[i][j];  // В переменную buf копируем текущий элемент mas[i][j].
                mas[i][j]=mas[a-i-1][j];  // Для первого цикла эта операция элемент mas[0][0] заменит на mas[4][0]. 
                mas[a-i-1][j]=buf; // А теперь мы вместо элемента mas[4][0] кидаем туда то, что было в переменной buf. А там находится текущяя ячейка mas[0][0].
            }
        }
    }
    cout << "Преобразованный массив: " << "\n";
    for (int i=0; i<a; ++i)
    {
       for (int j=0; j<b; ++j)
            cout << setw(4) << mas[i][j];
      cout << "\n\n";
    }
    return 0;
}
Надеюсь, это именно то, что Вам требовалось.
Вывести элементы массива в виде таблицы и переставить его элементы местами


Смысл переменной buf в том, чтобы не потерять текущий элемент mas[i][j], когда мы в него поместим элемент последней строки.

Желаю удачи. Если будут вопросы - спрашивайте
1
Ev_Hyper
Заблокирован
22.01.2014, 20:43 13
Цитата Сообщение от Бедел Посмотреть сообщение
Если же мы имеем дело с объектами, то компилятору при постфиксном инкременте приходится создавать дополнительно временный объёкт для хранения предыдущего значения, что увеличивает время исполнения вашего кода.
пример можно увидеть?
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 21:00 14
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
пример можно увидеть?
Вот пример, который приводится в статье на хабре.

Кликните здесь для просмотра всего текста
Префиксный оператор инкремента изменяет состояние объекта и возвращает себя в уже изменённом виде. Оператор префиксного инкремента в классе итератора для работы с std::vector может выглядеть так:
_Myt& operator++()
{ // preincrement
++_Myptr;
return (*this);
}

В случае постфиксного инкремента ситуация сложнее. Состояние объекта должно измениться, но при этом возвращено предыдущее состояние. Возникает дополнительный временный объект:
_Myt operator++(int)
{ // postincrement
_Myt _Tmp = *this;
++*this;
return (_Tmp);
}


Помучайте гугл)) или хотя этот форум. Вот ссылка на тему, где это подробно обсуждается.
i++ vs ++i (циклы)
0
Ev_Hyper
Заблокирован
22.01.2014, 21:09 15
Цитата Сообщение от Бедел Посмотреть сообщение
Вот пример, который приводится в статье на хабре.
где вы увидели тут цикл for?
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 21:33 16
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
где вы увидели тут цикл for?
а кто Вам говорил про цикл for ? Почитайте меня ещё раз внимательно.

Это касалось цикла for:
Цитата Сообщение от Бедел Посмотреть сообщение
В данном случае - абсолютно никакой разницы. Любой современный оптимизированный компилятор выдаст одинаковый ассемблерный код, то есть, компилятор сам заменит постфиксную форму на префиксную, так как первое значение итератора нигде не используется.
А вот цитата с первой страницы...
"Нууу, это если мы будем работать с "тяжелыми" типами данных, а в данном случае простительно но вообще, правда Ваша, лучше использовать префикс, чтобы не привыкнуть, а постфикс только в тех случаях, где он действительно необходим)"

Добавлено через 2 минуты
Посмотрите свой #13 пост, Вы процитировали коммент про объекты и попросили пример, я его Вам привёл.
Что касается цикла for, то разницы абсолютно никакой. Если первое значение итератора нигде не используется, то компилятор сам заменит постфиксную итерацию на префиксную. Это я уже повторил несколько раз.
0
Ev_Hyper
Заблокирован
22.01.2014, 21:37 17
Цитата Сообщение от Бедел Посмотреть сообщение
а кто Вам говорил про цикл for ? Почитайте меня ещё раз внимательно
Я же конкретно про цикл for спрашивал:

Цитата Сообщение от Ev_Hyper Посмотреть сообщение
в чем существенная разница использования префиксной и постфиксной формы в цикле for?
Цитата Сообщение от Бедел Посмотреть сообщение
Посмотрите свой #13 пост, Вы процитировали коммент про объекты и попросили пример, я его Вам привёл.
Конечно, я хотел увидеть пример, который показывает, что префикс лучше именно при использовании цикла for. Вы, наверное, неправильно поняли мои слова. Бывает.
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 21:40 18
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
Я же конкретно про цикл for спрашивал:
Конкретно про цикл for я Вам ответил, что разницы никакой а дальше просто дополнил, что лучше привыкать к префиксной форме, ибо с объектами ситуация немного иная)
Всего хорошего.
0
Ev_Hyper
Заблокирован
22.01.2014, 21:44 19
Цитата Сообщение от Бедел Посмотреть сообщение
Конкретно про цикл for я Вам ответил, что разницы никакой
именно поэтому я и спрашивал не вас. Постфиксный вариант на мой взгляд понятнее. Но вопрос я поднял из-за этой фразы:

"ой-ой... когда в for вместо ++i пишут i++ это всё равно что на моих глазах убивают белого котёнка, больно смотреть, здесь нет никакой необходимости душить котят"

Поэтому и решил узнать, какая-же разница в использовании преф/пост форм в цикле.

Цитата Сообщение от Бедел Посмотреть сообщение
Всего хорошего.
Спасибо И вам не хворать
0
Бедел
233 / 29 / 11
Регистрация: 04.06.2010
Сообщений: 293
22.01.2014, 21:52 20
Ev_Hyper, да, уж слишком трагично данную ситуацию описал господин abit)) мне тоже стало интересно, вдруг есть такое, чего я не знаю, поэтому и ответил на его коммент, но он куда-то пропал..)
И вообще, куда делался ТС ? А то мне кажется, что сейчас снова всплывут условия задачи, о которых мы не знали ранее
0
22.01.2014, 21:52
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 21:52

Переставить местами максимальный и минимальный элементы массива
Дан массив, состоящий из n целых чисел (n&lt;=10). Переставить местами максимальный и минимальный...

Переставить местами минимальный и максимальный элементы массива
Добрый вечер, помогите пожалуйста решить В одномерном массиве, состоящем из 10 случайных чисел от...

Переставить местами максимальный и последний элементы массива
Необходимо переставить местами максимальный и последний элементы массива, если максимальный и...


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

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

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