Загрузка данных
#include <stdio.h>
#include <stdlib.h>
#define MAX_SIZE 100
void print_matrix(int rows, int cols, int **matrix) {
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
printf("%d", matrix[i][j]);
if (j < cols - 1) printf(" ");
}
if (i < rows - 1) printf("\n");
}
}
int main() {
int method, rows, cols;
if (scanf("%d", &method) != 1 || method < 1 || method > 4) {
printf("n/a");
return 0;
}
if (scanf("%d %d", &rows, &cols) != 2 || rows <= 0 || cols <= 0) {
printf("n/a");
return 0;
}
int **matrix = NULL;
int *data = NULL;
int static_matrix[MAX_SIZE][MAX_SIZE];
int *flat_matrix = NULL;
if (method == 1) {
// Статическое выделение
if (rows > MAX_SIZE || cols > MAX_SIZE) {
printf("n/a");
return 0;
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
scanf("%d", &static_matrix[i][j]);
}
}
// Создаем указатели для единообразной работы
matrix = (int**)malloc(rows * sizeof(int*));
if (matrix == NULL) {
printf("n/a");
return 0;
}
for (int i = 0; i < rows; i++) {
matrix[i] = static_matrix[i];
}
} else if (method == 2) {
matrix = (int**)malloc(rows * sizeof(int*));
if (matrix == NULL) {
printf("n/a");
return 0;
}
for (int i = 0; i < rows; i++) {
matrix[i] = (int*)malloc(cols * sizeof(int));
if (matrix[i] == NULL) {
for (int j = 0; j < i; j++) free(matrix[j]);
free(matrix);
printf("n/a");
return 0;
}
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
scanf("%d", &matrix[i][j]);
}
}
} else if (method == 3) {
flat_matrix = (int*)malloc(rows * cols * sizeof(int));
if (flat_matrix == NULL) {
printf("n/a");
return 0;
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
scanf("%d", &flat_matrix[i * cols + j]);
}
}
matrix = (int**)malloc(rows * sizeof(int*));
if (matrix == NULL) {
free(flat_matrix);
printf("n/a");
return 0;
}
for (int i = 0; i < rows; i++) {
matrix[i] = flat_matrix + i * cols;
}
} else if (method == 4) {
matrix = (int**)malloc(rows * sizeof(int*));
if (matrix == NULL) {
printf("n/a");
return 0;
}
data = (int*)malloc(rows * cols * sizeof(int));
if (data == NULL) {
free(matrix);
printf("n/a");
return 0;
}
for (int i = 0; i < rows; i++) {
matrix[i] = data + i * cols;
}
for (int i = 0; i < rows; i++) {
for (int j = 0; j < cols; j++) {
scanf("%d", &matrix[i][j]);
}
}
}
// Вывод матрицы
print_matrix(rows, cols, matrix);
printf("\n");
// Максимальные элементы в каждой строке
for (int i = 0; i < rows; i++) {
int max = matrix[i][0];
for (int j = 1; j < cols; j++) {
if (matrix[i][j] > max) max = matrix[i][j];
}
printf("%d", max);
if (i < rows - 1) printf(" ");
}
printf("\n");
// Минимальные элементы в каждом столбце
for (int j = 0; j < cols; j++) {
int min = matrix[0][j];
for (int i = 1; i < rows; i++) {
if (matrix[i][j] < min) min = matrix[i][j];
}
printf("%d", min);
if (j < cols - 1) printf(" ");
}
// Освобождение памяти
if (method == 1) {
free(matrix);
} else if (method == 2) {
for (int i = 0; i < rows; i++) free(matrix[i]);
free(matrix);
} else if (method == 3) {
free(matrix);
free(flat_matrix);
} else if (method == 4) {
free(data);
free(matrix);
}
return 0;
}