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

#define MAX_SIZE 12

// Функция ввода матрицы с фиксированным размером
void inputMatrix(int n, double matrix[MAX_SIZE][MAX_SIZE]) {
    printf("Enter square matrix %dx%d:\n", n, n);
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("matrix[%d][%d] = ", i, j);
            scanf("%lf", &matrix[i][j]);
        }
    }
}

// Функция вывода матрицы
void printMatrix(int n, double matrix[MAX_SIZE][MAX_SIZE]) {
    printf("\nMatrix:\n");
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            printf("%8.2f", matrix[i][j]);
        }
        printf("\n");
    }
}

// Функция поиска индексов максимального элемента
void findMaxElement(int n, double matrix[MAX_SIZE][MAX_SIZE], int *max_i, int *max_j) {
    *max_i = 0;
    *max_j = 0;
    double max_val = matrix[0][0];
    
    for (int i = 0; i < n; i++) {
        for (int j = 0; j < n; j++) {
            if (matrix[i][j] > max_val) {
                max_val = matrix[i][j];
                *max_i = i;
                *max_j = j;
            }
        }
    }
}

// Функция перестановки двух строк
void swapRows(int n, double matrix[MAX_SIZE][MAX_SIZE], int row1, int row2) {
    for (int j = 0; j < n; j++) {
        double temp = matrix[row1][j];
        matrix[row1][j] = matrix[row2][j];
        matrix[row2][j] = temp;
    }
}

// Функция перестановки двух столбцов
void swapColumns(int n, double matrix[MAX_SIZE][MAX_SIZE], int col1, int col2) {
    for (int i = 0; i < n; i++) {
        double temp = matrix[i][col1];
        matrix[i][col1] = matrix[i][col2];
        matrix[i][col2] = temp;
    }
}

// Основная функция преобразования
void transformMatrix(int n, double matrix[MAX_SIZE][MAX_SIZE]) {
    int max_i, max_j;
    
    // Находим максимальный элемент
    findMaxElement(n, matrix, &max_i, &max_j);
    printf("Max element: matrix[%d][%d] = %.2f\n", max_i, max_j, matrix[max_i][max_j]);
    
    // Переставляем строки, чтобы максимальный элемент оказался в первой строке
    while (max_i > 0) {
        swapRows(n, matrix, max_i, max_i - 1);
        max_i--;
        printf("Swapped rows %d and %d\n", max_i + 1, max_i);
    }
    
    // Переставляем столбцы, чтобы максимальный элемент оказался в первом столбце
    while (max_j > 0) {
        swapColumns(n, matrix, max_j, max_j - 1);
        max_j--;
        printf("Swapped columns %d and %d\n", max_j + 1, max_j);
    }
}

int main() {
    int n;
    double matrix[MAX_SIZE][MAX_SIZE];
    
    printf("Enter matrix size n (n < 12): ");
    scanf("%d", &n);
    
    if (n >= MAX_SIZE || n <= 0) {
        printf("Invalid matrix size! Must be between 1 and %d\n", MAX_SIZE - 1);
        return 1;
    }
    
    // Ввод матрицы
    inputMatrix(n, matrix);
    
    // Вывод исходной матрицы
    printf("\nOriginal matrix:");
    printMatrix(n, matrix);
    
    // Преобразование матрицы
    transformMatrix(n, matrix);
    
    // Вывод результата
    printf("\nMatrix after transformation:");
    printMatrix(n, matrix);
    
    return 0;
}
Соседние файлы в папке Лаба5