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

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

Войти
Регистрация
Восстановить пароль
 
 
Рейтинг: Рейтинг темы: голосов - 9, средняя оценка - 4.67
Nikolay_1
0 / 0 / 0
Регистрация: 15.01.2014
Сообщений: 24
#1

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

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

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

Ввести массив в виде таблицы и переставить его элементы местами - C++
То есть последний элемент в массиве становится предпоследним и тд... Вот я написал массив в виде таблицы (вывел макс. число). Что мне...

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

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

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

Переставить местами максимальный и последний элементы массива - C++
Необходимо переставить местами максимальный и последний элементы массива, если максимальный и минимальный элементы на четных позициях,...

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

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 / 4
Регистрация: 04.06.2010
Сообщений: 286
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
Бедел
233 / 29 / 4
Регистрация: 04.06.2010
Сообщений: 286
21.01.2014, 20:24 #5
Цитата Сообщение от Ev_Hyper Посмотреть сообщение
то, что вы привели НЕ двумерный массив.
Да и не важно это. Можно и на примере одномерного показать, главное принцип узнать.
А сортировать - да, придется двумерный.
0
Nikolay_1
0 / 0 / 0
Регистрация: 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 / 4
Регистрация: 04.06.2010
Сообщений: 286
22.01.2014, 04:03 #7
уже поздно, завтра обещаю написать код и объяснить, как он работает.
0
abit
271 / 270 / 35
Регистрация: 03.02.2013
Сообщений: 756
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 / 4
Регистрация: 04.06.2010
Сообщений: 286
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 / 4
Регистрация: 04.06.2010
Сообщений: 286
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 / 4
Регистрация: 04.06.2010
Сообщений: 286
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 / 4
Регистрация: 04.06.2010
Сообщений: 286
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
22.01.2014, 21:09
MoreAnswers
Эксперт
37091 / 29110 / 5898
Регистрация: 17.06.2006
Сообщений: 43,301
22.01.2014, 21:09
Привет! Вот еще темы с ответами:

Переставить местами элементы массива по заданной схеме - C++
2.Дан массив из 18 вещественных чисел. Преобразовать его следующим образом: а1,а18,а2,а17,а3,а16,а4,а15...

Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами - C++
Дан массив размера 10. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами....

Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами - C++
Дан массив размера 10. Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами....

Переставить в обратном порядке элементы массива, расположенные между его минимальным и максимальным элементами - C++
Доброго времени суток,есть задача которую мне необходимо решить, однако я не имею представления как ее решать(я нуб) так что прошу о...


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

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

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