Другие языки программирования и технологии
Как поменять местами столбцы в матрице. C++
Есть ключ (например - 2,4,3,1,0) и матрица 4х4 заполненная буквами английского алфавита! Как поменять местами столбцы по заданному ключу? То есть, чтобы первым столбцом стал второй, вторым - четвертый и так далее! Прошу обычный пример, желательно с указателями! Заранее спасибо!
#include <algorithm>
#include <iostream>
using namespace std;
int main() {
char a[5][5] =
{{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' }};
int k[5] = { 2, 4, 3, 1, 0 };
for (char *r = *a; r < *a + 5 * 5; r += 5) {
for (char *c = r; c < r + 5; ++c) cout << *c << ' ';
cout << endl;
}
for (char *r = *a; r < *a + 5 * 5; r += 5) {
char t[5], *pt = t;
for (int *pk = k; pk < k + 5; ++pk) *pt++ = *(r + *pk);
copy(t, t + 5, r);
}
cout << endl;
for (char *r = *a; r < *a + 5 * 5; r += 5) {
for (char *c = r; c < r + 5; ++c) cout << *c << ' ';
cout << endl;
}
return 0;
}
#include <iostream>
using namespace std;
int main() {
char a[5][5] =
{{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' },
{ 'a', 'b', 'c', 'd', 'e' }};
int k[5] = { 2, 4, 3, 1, 0 };
for (char *r = *a; r < *a + 5 * 5; r += 5) {
for (char *c = r; c < r + 5; ++c) cout << *c << ' ';
cout << endl;
}
for (char *r = *a; r < *a + 5 * 5; r += 5) {
char t[5], *pt = t;
for (int *pk = k; pk < k + 5; ++pk) *pt++ = *(r + *pk);
copy(t, t + 5, r);
}
cout << endl;
for (char *r = *a; r < *a + 5 * 5; r += 5) {
for (char *c = r; c < r + 5; ++c) cout << *c << ' ';
cout << endl;
}
return 0;
}
/*
Для массива не в динамической памяти переписывать значения надо.
Если же массив создан через new именно постолбцам, то менять указатели на столбец.
*/
char k[5] = {2,4,3,1,0}; // ключ из 5 чисел
char **m = new char*[5]; // указатели на 5 столбцов
for(int i=0; i<5; i++) m = new char[5]; // данные по столбцам
// заполним символами столбцы
int ks = 'a';
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
{
m[ i ][ j ] = ks;
ks++;
}
// покажем столбцы
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++) cout << m[ j ][ i ] << " ";
cout << endl;
}
// обмен столбцов согласно ключу
char *u[5]; // 5 указателей в порядке столбцов по ключу
for(int i=0; i<5; i++) u[ i ] = m[k[ i ]];
for(int i=0; i<5; i++) m[ i ] = u[ i ]; // новый порядок
cout << endl;
// покажем столбцы
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++) cout << m[ j ][ i ] << " ";
cout << endl;
}
// удаляем память
for(int i=0; i<5; i++) delete[] m[ i ];
delete[] m;
Для массива не в динамической памяти переписывать значения надо.
Если же массив создан через new именно постолбцам, то менять указатели на столбец.
*/
char k[5] = {2,4,3,1,0}; // ключ из 5 чисел
char **m = new char*[5]; // указатели на 5 столбцов
for(int i=0; i<5; i++) m = new char[5]; // данные по столбцам
// заполним символами столбцы
int ks = 'a';
for(int i=0; i<5; i++)
for(int j=0; j<5; j++)
{
m[ i ][ j ] = ks;
ks++;
}
// покажем столбцы
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++) cout << m[ j ][ i ] << " ";
cout << endl;
}
// обмен столбцов согласно ключу
char *u[5]; // 5 указателей в порядке столбцов по ключу
for(int i=0; i<5; i++) u[ i ] = m[k[ i ]];
for(int i=0; i<5; i++) m[ i ] = u[ i ]; // новый порядок
cout << endl;
// покажем столбцы
for(int i=0; i<5; i++)
{
for(int j=0; j<5; j++) cout << m[ j ][ i ] << " ";
cout << endl;
}
// удаляем память
for(int i=0; i<5; i++) delete[] m[ i ];
delete[] m;
Похожие вопросы
- кто-нибудь знает как поменять местами столбцы с максимальным и минимальным элементами матрицы (в паскале), очень нужно..
- кто может сделать прогу в C++ которая поменяет местами в каждом столбце минимальный и максимальные элементы в матрице??
- C++. Перевернуть столбцы в матрице!
- В чем ошибка? Помогите разобраться! (программа на С++: добавление столбца в матрицу)
- Написать в С++.В заданной матрице A[1:N,1:M] поменять местами следующие два элемента:
- Даны 2 матрицы 2х3. Нужно поменять местами наибольшее значение из 1 с наименьшим из 2. На C++
- C++ Как найти сумму и произведение элементов K - го столбца данной матрицы?
- Поменять местами 2 Nod'a в TreeView C# (Visual Studio)
- C++. Поменять местами слова в строке
- Как поменять местами минимальный и первый элемент матрицы в паскале?