Добавил:
Рад, если кому-то помог Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Скачиваний:
0
Добавлен:
01.11.2025
Размер:
2.46 Кб
Скачать
#include <stdio.h>
#include <stdlib.h>

int main() {
    int **A;
    int rows, cols;
    int i, j;
    int min_val, max_val;
    int min_i, min_j, max_i, max_j;
    int min_count = 0, max_count = 0;
    
    printf("Enter number of rows: ");
    scanf("%d", &rows);
    printf("Enter number of columns: ");
    scanf("%d", &cols);
    
    // Динамическое выделение памяти
    A = (int**)malloc(rows * sizeof(int*));
    for (i = 0; i < rows; i++) {
        A[i] = (int*)malloc(cols * sizeof(int));
    }
    
    printf("Enter matrix %dx%d:\n", rows, cols);
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("A[%d][%d] = ", i, j);
            scanf("%d", &A[i][j]);
        }
    }
    
    // Поиск min и max через указатели
    min_val = max_val = A[0][0];
    min_i = min_j = max_i = max_j = 0;
    
    for (i = 0; i < rows; i++) {
        int *row = A[i];  // указатель на текущую строку
        for (j = 0; j < cols; j++) {
            if (*(row + j) < min_val) {
                min_val = *(row + j);
                min_i = i; min_j = j;
                min_count = 1;
            } else if (*(row + j) == min_val) {
                min_count++;
            }
            
            if (*(row + j) > max_val) {
                max_val = *(row + j);
                max_i = i; max_j = j;
                max_count = 1;
            } else if (*(row + j) == max_val) {
                max_count++;
            }
        }
    }
    
    if (min_count > 1 || max_count > 1) {
        printf("Error: min or max value appears more than once\n");
        
        // Освобождение памяти
        for (i = 0; i < rows; i++) {
            free(A[i]);
        }
        free(A);
        return 1;
    }
    
    // Обмен через указатели
    int *min_ptr = &A[min_i][min_j];
    int *max_ptr = &A[max_i][max_j];
    int temp = *min_ptr;
    *min_ptr = *max_ptr;
    *max_ptr = temp;
    
    printf("\nMatrix after swapping min and max:\n");
    for (i = 0; i < rows; i++) {
        for (j = 0; j < cols; j++) {
            printf("%4d", A[i][j]);
        }
        printf("\n");
    }
    
    // Освобождение памяти
    for (i = 0; i < rows; i++) {
        free(A[i]);
    }
    free(A);
    
    return 0;
}
Соседние файлы в папке Лаба4