Загрузка данных


#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;
}