Дана целочисленная матрица размера mn. Найти матрицу, получающуюся перестановкой столбцов (первого с последним, второго с предпоследним и т.д.). 1. Составить схему программы и программу для решения задачи в соответствии с вариантом задания в соответствии с вариантом задания. Указатели не использовать.
2. Составить схему программы и программу для решения задачи в соответствии с вариантом задания. Использовать указатели.

Kss140916 Kss140916    2   21.12.2020 22:42    22

Ответы
olykylak2551 olykylak2551  19.01.2024 14:02
Хорошо, для решения данной задачи воспользуемся следующим алгоритмом:

1. Считываем значения переменных m и n, которые определяют размерность матрицы.
2. Создаем двумерный массив, представляющий матрицу с размером mn, и считываем значения элементов матрицы.
3. Создаем еще один двумерный массив, который будет являться результатом перестановки столбцов, и заполняем его нулями с размером mn.
4. Используя цикл for, мы будем проходить по всем столбцам и копировать значения из исходной матрицы в результат, меняя столбцы местами по условию задачи (первый с последним, второй с предпоследним и т.д.).
5. Выводим полученную матрицу после перестановки столбцов.

Рассмотрим решение данной задачи без использования указателей:

```c++
#include
using namespace std;

int main() {
int m, n;
cout << "Введите количество строк m: ";
cin >> m;
cout << "Введите количество столбцов n: ";
cin >> n;

int matrix[m][n];

cout << "Введите элементы матрицы:" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}

int result[m][n];

for (int j = 0; j < n; j++) {
for (int i = 0; i < m; i++) {
result[i][j] = matrix[i][n - 1 - j];
}
}

cout << "Матрица после перестановки столбцов:" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << result[i][j] << " ";
}
cout << endl;
}

return 0;
}
```

Теперь рассмотрим решение с использованием указателей. В данном случае мы используем указатели для работы с массивами:

```c++
#include
using namespace std;

int main() {
int m, n;
cout << "Введите количество строк m: ";
cin >> m;
cout << "Введите количество столбцов n: ";
cin >> n;

int** matrix = new int*[m];
for (int i = 0; i < m; i++) {
matrix[i] = new int[n];
}

cout << "Введите элементы матрицы:" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cin >> matrix[i][j];
}
}

int** result = new int*[m];
for (int i = 0; i < m; i++) {
result[i] = new int[n];
}

for (int j = 0; j < n; j++) {
for (int i = 0; i < m; i++) {
result[i][j] = matrix[i][n - 1 - j];
}
}

cout << "Матрица после перестановки столбцов:" << endl;
for (int i = 0; i < m; i++) {
for (int j = 0; j < n; j++) {
cout << result[i][j] << " ";
}
cout << endl;
}

for (int i = 0; i < m; i++) {
delete[] matrix[i];
delete[] result[i];
}
delete[] matrix;
delete[] result;

return 0;
}
```

В обоих решениях, нам необходимо вводить количество строк и столбцов с помощью cout и cin, чтобы определить размерность матрицы. Затем мы используем циклы for для ввода элементов матрицы, а затем второй цикл for для перестановки столбцов. После этого мы выводим полученную матрицу с помощью цикла for и cout.

Оба решения получают матрицу после перестановки столбцов, однако второе решение использует указатели для работы с памятью и динамическим выделением пространства для матрицы и результата. Это может быть полезно, если размер матрицы неизвестен заранее или может быть изменен во время выполнения программы.
ПОКАЗАТЬ ОТВЕТЫ
Другие вопросы по теме Информатика