Проверьте, является ли матрицы симметричной относительно главной диагонали - C (СИ)
Формулировка задачи:
Проверьте, является ли двумерный массив симметричным относительно главной диагонали. Главная диагональ — та, которая идёт из левого верхнего угла двумерного массива в правый нижний.
Программа получает на вход число n 100, являющееся числом строк и столбцов в массиве. Далее во входном потоке идет n строк по n чисел, являющихся элементами массива.
Программа должна выводить слово yes для симметричного массива и слово no для несимметричного.
Решение задачи: «Проверьте, является ли матрицы симметричной относительно главной диагонали»
textual
Листинг программы
#include <stdlib.h>
#include <stdio.h>
using namespace std;
int main(){
int **matrix, n, counter=0, et=0, i, j;
printf("Enter size of matrix: ");
scanf("%i", &n);
fflush(stdin);
printf("\n");
matrix=(int**)malloc(sizeof(int*)*n);
for(i=0; i<n; i++){
matrix[i]=(int*)malloc(sizeof(int)*n);
for(j=0; j<n; j++){
printf("Enter element [%i][%i]: ", i, j);
scanf("%i", &matrix[i][j]);
}
et+=n-(i+1);
}
printf("Matrix:\n");
for(i=0; i<n; i++){
for(j=0; j<n; j++){
printf("%3i", matrix[i][j]);
}
printf("\n");
for(j=i+1; j<n; j++){
if(matrix[i][j]==matrix[j][i]){
counter++;
}
}
}
counter==et ? printf("\nYes.") : printf("\nNo.");
for(i=0; i<n; i++){
free(matrix[i]);
}
free(matrix);
return 0;
}
Объяснение кода листинга программы
Этот код на языке C занимается несколькими вещами:
- Пользователю предлагается ввести размер матрицы.
- Пользователь вводит элементы матрицы, и они сохраняются в динамически выделенной памяти.
- Код проверяет, является ли матрица симметричной относительно главной диагонали. Для этого он проходит по всем элементам матрицы и сравнивает их с соответствующими элементами на противоположной стороне главной диагонали. Если все элементы совпадают, то матрица считается симметричной.
- В конце кода освобождается выделенная память. Список переменных и их значений:
- n - размер матрицы
- matrix - динамически выделенный массив указателей на матрицу
- counter - количество элементов, совпадающих с элементами на противоположной стороне главной диагонали
- et - количество элементов в матрице минус количество элементов, совпадающих с элементами на противоположной стороне главной диагонали
- i, j - индексы элементов матрицы
- matrix[i][j] - элемент матрицы
- scanf, printf - функции ввода и вывода данных
- free - функция освобождения памяти