Транспонировать матрицу, поменять в ней 1й столбец на столбец с заданным номером - C (СИ)
Формулировка задачи:
Помогите пожалуйста!
Задать двумерный массив MxN
Транспонировать матрицу, поменять в ней 1й столбец на столбец с заданным номером.
Строку с заданным номером записать в массив умножив все элементы на 3.
Например:
была матрица-
3102
3412
1045
после транспонирования получилась-
331
140
014
225
После смены столбца (Столбец 3):
131
040
414
525
Решение задачи: «Транспонировать матрицу, поменять в ней 1й столбец на столбец с заданным номером»
textual
Листинг программы
#include <stdio.h>
#include <conio.h>
#include <iostream>
#include <malloc.h>
void main() {
setlocale (0,"");
int m;
int n;
printf ("Введите количество строк\n");
scanf ("%i",&m);
printf ("Введите количество столбцов\n");
scanf ("%i",&n);
int ** matr = (int**)malloc(m*(sizeof(int)));
for (int i=0; i<m; i++) {
matr[i] = (int*)malloc(n*(sizeof(int)));
}
int ** matr1 = (int**)malloc(n*(sizeof(int))); //транспонированная
for (int i=0; i<n; i++) {
matr1[i] = (int*)malloc(m*(sizeof(int)));
}
int * mas = (int*)malloc(m*(sizeof(int))); // массив для записи элемента строки в конце
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
printf ("введите matr[%i][%i]",i,j);
scanf ("%i",&matr[i][j]);
}
}
printf ("Исходная\n");
for (int i=0; i<m; i++) {
for (int j=0; j<n; j++) {
printf ("%i ",matr[i][j]);
}
printf ("\n");
}
for (int i=0; i<n;i++) {
for (int j=0; j<m; j++) {
matr1[i][j]=matr[j][i];
}
}
printf ("Транспонированная:\n");
for (int i=0; i<n;i++) {
for (int j=0; j<m; j++) {
printf ("%i ",matr1[i][j]);
}
printf ("\n");
}
printf ("Введите столбец,на который надо заменить первый\n");
int number;
scanf ("%i",&number);
for (int i=0; i<n;i++) {
matr1[i][0] = matr1[i][number-1]; // number -1 для удобного зрительного восприятия, так как нумерация начинается с нуля
}
printf ("Поменяли столбцы\n");
for (int i=0; i<n;i++) {
for (int j=0; j<m; j++) {
printf ("%i ",matr1[i][j]);
}
printf ("\n");
}
printf ("Массив\n");
for (int i=0; i<n; i++) {
mas[i] = (matr1[i][number-1] * 3);
printf ("%i ",mas[i]);
}
_getch();
}
Объяснение кода листинга программы
- Подключение необходимых библиотек для работы с консолью и вводом-выводом данных.
- Объявление переменных m и n, которые будут использоваться для хранения количества строк и столбцов матрицы соответственно.
- Ввод пользователем количества строк и столбцов матрицы с помощью функции scanf.
- Выделение памяти под матрицу matr с помощью функции malloc.
- В цикле заполнение матрицы matr значениями, введенными пользователем.
- Вывод исходной матрицы на экран с помощью цикла и функции printf.
- Создание транспонированной матрицы matr1 с помощью функции malloc.
- В цикле заполнение транспонированной матрицы matr1 значениями из матрицы matr.
- Вывод транспонированной матрицы на экран с помощью цикла и функции printf.
- Ввод пользователем номера столбца, на который необходимо заменить первый столбец матрицы.
- В цикле замена значений в первом столбце матрицы matr1 на значения из выбранного столбца.
- Вывод измененной матрицы на экран с помощью цикла и функции printf.
- Создание массива mas для хранения результатов умножения значений из выбранного столбца на 3.
- В цикле заполнение массива mas значениями, полученными в результате умножения.
- Вывод массива mas на экран с помощью цикла и функции printf.
- Блокировка программы до нажатия клавиши.