Thứ Tư, 27 Tháng Mười Một 2024
Trang chủLập trìnhLập trình C/C++Kiểm tra ma trận vuông đối xứng trong lập trình C/C++

Kiểm tra ma trận vuông đối xứng trong lập trình C/C++

Đây là một dạng bài tập tương đối cơ bản giúp cho việc luyện tập code lập trình C/C++ mang lại hiệu quả rất tốt.

DANH SÁCH BÀI VIẾT
Sắp xếp mảng 2 chiều trong lập trình C/C++
Kiểm tra mảng 2 chiều đối xứng trong lập trình C/C++
Kiểm tra ma trận vuông đối xứng trong lập trình C/C++
Kiểm tra mảng đối xứng trong lập trình C/C++
Đếm số lượng số chẵn lẻ trong mảng lập trình C/C++

Kiểm tra ma trận vuông đối xứng trong lập trình C/C++

Thế nào là ma trận vuông đối xứng, thì trong môn học Đại số tuyến tính, một ma trận vuông đối xứng là một ma trận vuông A, bằng chính ma trận chuyển vị của nó (ma trận chuyển vị là một ma trận mà ở đó các hàng được thay thế bằng các cột, và ngược lại).

Mỗi phần tử của một ma trận đối xứng thì đối xứng qua đường chéo chính.

Ví dụ về 1 ma trận vuông đối xứng.

Kiểm tra ma trận vuông đối xứng trong C/C++(Mảng 2 chiều đối xứng)

Và đâu là đường chéo chính, đường chéo phụ thì bạn xem hình bên dưới. Đỏ là đường chéo chính, xanh là đường chéo phụ.

Kiểm tra ma trận vuông đối xứng trong C/C++(Mảng 2 chiều đối xứng)

Bạn sẽ thấy là các phần tử mảng sẽ đối xứng nhau qua đường chéo chính(không tính các phần tử nằm trên đường chéo).

Vậy ta sẽ viết chương trình C++ kiểm tra ma trận vuông đối xứng như sau:

#include<iostream>
#include<cmath>
#define maxn 100

using namespace std;


//Hàm nhập vào ma trận vuông
void nhap(int a[][maxn],int &n)
{
 cout<<"nhap n: ";     cin>>n;
    for(int i=0;i<n;i++)
        for(int j=0;j<n;j++)
        {
         cout<<"A["<<i<<"]["<<j<<"] = ";
            cin>>a[i][j];
         }
}
//Hàm xuất ma trận vuông
void xuat(int a[][maxn],int n)
{
    for(int i=0;i<n;i++)
{
        for(int j=0;j<n;j++)
            cout<<a[i][j]<<"   ";
            cout<<endl;}
}

//Hàm kiểm tra ma trận đối xứng
int doixung(int a[][maxn],int n)
{
//Duyệt vong lặp để kiểm tra các phần từ
    for(int i=0;i<n;i++)
    {
    	for(int j=i+1;j<n;j++)
        {
        	if(a[i][j] != a[j][i]) return false; //Nếu gặp 1 cặp phần tử đối xứng mà không bằng nhau kết luận luân là ma trân không đối xứng
		}    
    }
//Nếu duyệt hết vòng lặp kg gặp cặp nào đối xứng qua trục khác nhau thì kl ma trận đối xứng
     return true;
}

int main()
{
    int a[maxn][maxn];
     int n;
     nhap(a,n);
    xuat(a,n);
    if(doixung(a,n)==1)
    cout<<" ma tran co doi xung qua duong cheo chinh";
    else
    cout<<" ma tran khong doi xung qua duong cheo chinh";
}

Chuyển đổi chương trình sang thuần C

#include<stdio.h>
#include<math.h>
#define maxn 100

void nhap(int a[][maxn], int *n)
{
 printf("Nhap n: ");
 scanf("%d",n);
 int i, j;
    for(i=0;i< *n;i++)
        for(j=0;j< *n;j++)
        {
         printf("A[%d][%d] = ",i,j);
            scanf("%d",&a[i][j]);
         }
}


void xuat(int a[][maxn],int n)
{
	int i, j;
    for(i=0;i<n;i++)
	{
		for(j = 0;j<n; j++){
			printf("%d    ",a[i][j]);
		}
		printf("\n");
    }
}

int doixung(int a[][maxn],int n)
{
	int i, j;
    for(i=0;i<n;i++)
    {
    	for(j=i+1;j<n;j++)
        {
        	if(a[i][j] != a[j][i]) return 0; 
		}    
    }

     return 1;
}

int main()
{
	int n;
    int a[maxn][maxn];
    
    nhap(a, &n);
    xuat(a,n);
    
    if(doixung(a, n)==1)
    	{
    		printf("Mang doi xung qua duong cheo chinh");
		}
    else
     {
     	printf("Mang khong doi xung qua duong cheo chinh");
	 }
}

Và dưới đây là kết quả khi chạy chương trình

Đối với trường hợp ma trận đối xứng

Kiểm tra ma trận vuông đối xứng trong lập trình C/C++

Đỗi với trường hợp ma trận không đối xứng

Kiểm tra ma trận vuông đối xứng trong lập trình C/C++

[Xem tất cả bài viết chủ đề C/C++ tại đây]

0 0 Phiếu bình chọn
Xếp hạng bài viết
BÀI VIẾT LIÊN QUAN
Đăng ký nhận thông báo
Thông báo email khi
guest
0 Bình luận
Không thể gửi email
Phản hồi nội tuyến

NÊN ĐỌC THÊM

Bạn muốn tìm kiếm gì?

Dịch vụ code thuê

TUICOCACH.COM NHẬN ĐẶT TEXTLINK, BANNER, GP
0
Giáo sư! có thể ném gạch bên dưới nhé!x