Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С (для ИВТ) / Готовые лабы С / Лаба5 / Laba 5 (2)
.c#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
