Введение
В этом лабораторном занятии (lab) вы узнаете, как проверить, является ли матрица симметричной на языке программирования C. В рамках лабораторного занятия рассматриваются следующие шаги: чтение размеров и элементов матрицы, проверка симметричности матрицы путем сравнения элементов в симметричных позициях и вывод информации о том, является ли матрица симметричной или нет. В лабораторном занятии предоставляется пошаговое руководство с примерами кода, которые помогут вам понять процесс проверки симметричности матрицы на языке C.
Лабораторное занятие начинается с демонстрации того, как прочитать размеры и элементы матрицы с использованием языка программирования C. Затем вводится логика проверки симметричности матрицы путем сравнения элементов в симметричных позициях. Наконец, в лабораторном занятии показано, как вывести результат, указывающий, является ли матрица симметричной или нет.
Чтение размеров и элементов
На этом шаге вы узнаете, как прочитать размеры и элементы матрицы на языке программирования C для проверки симметричности матрицы. Мы создадим программу, которая позволит пользователям вводить размер и элементы матрицы.
Сначала создадим новый файл на языке C для нашей программы по проверке симметричности матрицы:
cd ~/project
nano symmetric_matrix.c
Теперь добавим следующий код для чтения размеров и элементов матрицы:
#include <stdio.h>
#define MAX_SIZE 100
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
// Read matrix dimensions
printf("Enter the size of the square matrix: ");
scanf("%d", &n);
// Read matrix elements
printf("Enter matrix elements:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// Print the entered matrix
printf("\nEntered Matrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%d ", matrix[i][j]);
}
printf("\n");
}
return 0;
}
Скомпилируйте и запустите программу:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
Пример вывода:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6
Entered Matrix:
1 2 3
2 4 5
3 5 6
Разберем основные части кода:
#define MAX_SIZE 100устанавливает максимальный размер матрицы, чтобы предотвратить переполнение буфераscanf()используется для чтения размеров матрицы и отдельных элементов- Вложенные циклы используются для ввода и отображения элементов матрицы
- Программа позволяет пользователю ввести квадратную матрицу любого размера до 100x100
Проверка условия A[i][j] = A[j][i]
На этом шаге вы измените предыдущую программу, чтобы проверить, является ли матрица симметричной, сравнивая элементы по строкам и столбцам.
Откройте существующий файл и обновите код:
cd ~/project
nano symmetric_matrix.c
Замените предыдущий код следующей реализацией:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
bool is_symmetric = true;
// Read matrix dimensions
printf("Enter the size of the square matrix: ");
scanf("%d", &n);
// Read matrix elements
printf("Enter matrix elements:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// Check symmetry
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j]!= matrix[j][i]) {
is_symmetric = false;
break;
}
}
if (!is_symmetric) break;
}
// Print symmetry result
if (is_symmetric) {
printf("\nThe matrix is symmetric.\n");
} else {
printf("\nThe matrix is not symmetric.\n");
}
return 0;
}
Скомпилируйте и запустите программу:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
Пример вывода для симметричной матрицы:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6
The matrix is symmetric.
Пример вывода для несимметричной матрицы:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9
The matrix is not symmetric.
Основные моменты в коде:
- Булева переменная
is_symmetricотслеживает симметрию матрицы - Вложенные циклы сравнивают
matrix[i][j]сmatrix[j][i] - Если какие - либо элементы различаются,
is_symmetricустанавливается вfalse - Программа прерывает выполнение циклов заранее, если обнаружена асимметрия
Вывод информации о симметричности матрицы
На этом последнем шаге вы улучшите программу, чтобы получить более детальный вывод о симметричности матрицы, и создадите функцию для повышения модульности кода.
Откройте существующий файл и обновите код:
cd ~/project
nano symmetric_matrix.c
Замените предыдущий код следующей реализацией:
#include <stdio.h>
#include <stdbool.h>
#define MAX_SIZE 100
// Function to check matrix symmetry
bool is_symmetric_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
if (matrix[i][j] != matrix[j][i]) {
return false;
}
}
}
return true;
}
// Function to print matrix
void print_matrix(int matrix[MAX_SIZE][MAX_SIZE], int n) {
printf("\nMatrix:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("%4d ", matrix[i][j]);
}
printf("\n");
}
}
int main() {
int n, matrix[MAX_SIZE][MAX_SIZE];
// Read matrix dimensions
printf("Enter the size of the square matrix: ");
scanf("%d", &n);
// Read matrix elements
printf("Enter matrix elements:\n");
for (int i = 0; i < n; i++) {
for (int j = 0; j < n; j++) {
printf("Enter element [%d][%d]: ", i, j);
scanf("%d", &matrix[i][j]);
}
}
// Print the entered matrix
print_matrix(matrix, n);
// Check and print symmetry status
if (is_symmetric_matrix(matrix, n)) {
printf("\nSymmetry Analysis:\n");
printf("✓ The matrix is symmetric.\n");
printf(" - All elements A[i][j] are equal to A[j][i]\n");
printf(" - Matrix is invariant under transpose\n");
} else {
printf("\nSymmetry Analysis:\n");
printf("✗ The matrix is not symmetric.\n");
printf(" - Some elements A[i][j] are not equal to A[j][i]\n");
}
return 0;
}
Скомпилируйте и запустите программу:
gcc symmetric_matrix.c -o symmetric_matrix
./symmetric_matrix
Пример вывода для симметричной матрицы:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 2
Enter element [1][1]: 4
Enter element [1][2]: 5
Enter element [2][0]: 3
Enter element [2][1]: 5
Enter element [2][2]: 6
Matrix:
1 2 3
2 4 5
3 5 6
Symmetry Analysis:
✓ The matrix is symmetric.
- All elements A[i][j] are equal to A[j][i]
- Matrix is invariant under transpose
Пример вывода для несимметричной матрицы:
Enter the size of the square matrix: 3
Enter matrix elements:
Enter element [0][0]: 1
Enter element [0][1]: 2
Enter element [0][2]: 3
Enter element [1][0]: 4
Enter element [1][1]: 5
Enter element [1][2]: 6
Enter element [2][0]: 7
Enter element [2][1]: 8
Enter element [2][2]: 9
Matrix:
1 2 3
4 5 6
7 8 9
Symmetry Analysis:
✗ The matrix is not symmetric.
- Some elements A[i][j] are not equal to A[j][i]
Основные улучшения:
- Добавлена функция
is_symmetric_matrix()для лучшей организации кода - Создана функция
print_matrix()для отображения содержимого матрицы - Улучшен вывод с детальным анализом симметричности
- Использованы визуальные индикаторы (✓/✗) для выделения статуса симметричности
Резюме
В этом лабораторном занятии (lab) вы узнаете, как прочитать размеры и элементы матрицы на языке программирования C, а затем проверить, является ли матрица симметричной. Сначала вы создадите программу, которая позволит пользователям вводить размер и элементы матрицы. Затем вы измените программу, чтобы проверить симметричность матрицы, убедившись, что каждый элемент A[i][j] равен соответствующему элементу A[j][i]. Наконец, вы выведете информацию о том, является ли матрица симметричной или нет.
Основные моменты, которые вы освоите на завершенных шагах, включают чтение размеров и элементов матрицы с использованием функции scanf(), отображение введенной матрицы и сравнение элементов матрицы для определения ее симметричности. Программа позволяет пользователю ввести квадратную матрицу любого размера до 100x100.



