#include <stdio.h>
#include <stdlib.h>
int main() {
int operation;
int rows1, cols1, rows2, cols2;
int **matrix1, **matrix2, **result;
int i, j, k;
if (scanf("%d", &operation
) != 1) { return 0;
}
if (operation < 1 || operation > 3) {
return 0;
}
// Ввод размеров первой матрицы
if (scanf("%d %d", &rows1
, &cols1
) != 2) { return 0;
}
if (rows1 <= 0 || cols1 <= 0) {
return 0;
}
// Выделение памяти для первой матрицы
matrix1
= (int **)malloc(rows1
* sizeof(int *)); if (matrix1 == NULL) {
return 0;
}
for (i = 0; i < rows1; i++) {
matrix1
[i
] = (int *)malloc(cols1
* sizeof(int)); if (matrix1[i] == NULL) {
// Освобождение памяти, если выделение не удалось
for (j = 0; j < i; j++) {
}
return 0;
}
}
// Ввод первой матрицы
for (i = 0; i < rows1; i++) {
for (j = 0; j < cols1; j++) {
if (scanf("%d", &matrix1
[i
][j
]) != 1) { // Освобождение памяти
for (int row = 0; row < rows1; row++) {
}
return 0;
}
}
}
if (operation == 1 || operation == 2) { // Сложение и умножение требуют второй матрицы
// Ввод размеров второй матрицы
if (scanf("%d %d", &rows2
, &cols2
) != 2) { // Освобождение памяти
for (i = 0; i < rows1; i++) {
}
return 0;
}
if (rows2 <= 0 || cols2 <= 0) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
return 0;
}
// Выделение памяти для второй матрицы
matrix2
= (int **)malloc(rows2
* sizeof(int *)); if (matrix2 == NULL) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
return 0;
}
for (i = 0; i < rows2; i++) {
matrix2
[i
] = (int *)malloc(cols2
* sizeof(int)); if (matrix2[i] == NULL) {
// Освобождение памяти
for (int row = 0; row < rows1; row++) {
}
for (j = 0; j < i; j++) {
}
return 0;
}
}
// Ввод второй матрицы
for (i = 0; i < rows2; i++) {
for (j = 0; j < cols2; j++) {
if (scanf("%d", &matrix2
[i
][j
]) != 1) { // Освобождение памяти
for (int row = 0; row < rows1; row++) {
}
for (int row = 0; row < rows2; row++) {
}
return 0;
}
}
}
}
// Выполнение операции
if (operation == 1) { // Сложение
if (rows1 != rows2 || cols1 != cols2) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < rows2; i++) {
}
return 0;
}
// Выделение памяти для результата
result
= (int **)malloc(rows1
* sizeof(int *)); if (result == NULL) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < rows2; i++) {
}
return 0;
}
for (i = 0; i < rows1; i++) {
result
[i
] = (int *)malloc(cols1
* sizeof(int)); if (result[i] == NULL) {
// Освобождение памяти
for (int row = 0; row < rows1; row++) {
}
for (int row = 0; row < rows2; row++) {
}
for (j = 0; j < i; j++) {
}
return 0;
}
}
// Выполнение сложения
for (i = 0; i < rows1; i++) {
for (j = 0; j < cols1; j++) {
result[i][j] = matrix1[i][j] + matrix2[i][j];
}
}
// Вывод результата
for (i = 0; i < rows1; i++) {
for (j = 0; j < cols1; j++) {
if (j < cols1 - 1) {
}
}
}
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < rows2; i++) {
}
for (i = 0; i < rows1; i++) {
}
} else if (operation == 2) { // Умножение
if (cols1 != rows2) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < rows2; i++) {
}
return 0;
}
// Выделение памяти для результата
result
= (int **)malloc(rows1
* sizeof(int *)); if (result == NULL) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < rows2; i++) {
}
return 0;
}
for (i = 0; i < rows1; i++) {
result
[i
] = (int *)malloc(cols2
* sizeof(int)); if (result[i] == NULL) {
// Освобождение памяти
for (int row = 0; row < rows1; row++) {
}
for (int row = 0; row < rows2; row++) {
}
for (j = 0; j < i; j++) {
}
return 0;
}
}
// Выполнение умножения
for (i = 0; i < rows1; i++) {
for (j = 0; j < cols2; j++) {
result[i][j] = 0;
for (k = 0; k < cols1; k++) {
result[i][j] += matrix1[i][k] * matrix2[k][j];
}
}
}
// Вывод результата
for (i = 0; i < rows1; i++) {
for (j = 0; j < cols2; j++) {
if (j < cols2 - 1) {
}
}
}
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < rows2; i++) {
}
for (i = 0; i < rows1; i++) {
}
} else { // Транспонирование
// Выделение памяти для результата
result
= (int **)malloc(cols1
* sizeof(int *)); if (result == NULL) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
return 0;
}
for (i = 0; i < cols1; i++) {
result
[i
] = (int *)malloc(rows1
* sizeof(int)); if (result[i] == NULL) {
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (j = 0; j < i; j++) {
}
return 0;
}
}
// Выполнение транспонирования
for (i = 0; i < rows1; i++) {
for (j = 0; j < cols1; j++) {
result[j][i] = matrix1[i][j];
}
}
// Вывод результата
for (i = 0; i < cols1; i++) {
for (j = 0; j < rows1; j++) {
if (j < rows1 - 1) {
}
}
}
// Освобождение памяти
for (i = 0; i < rows1; i++) {
}
for (i = 0; i < cols1; i++) {
}
}
return 0;
}