1. Bài tập nhập kiểm tra ma trận có phải là ma trận đơn vị không bằng ngôn ngữ lập trình C

Bài tập này chúng ta sẽ sử dụng các kiến thức từ ngôn ngữ lập trình C như: cách nhập xuất cơ bản, cách sử dụng mảng hai chiều và cách sử dụng hàm trong ngôn ngữ lập trình C.

Yêu cầu của bài tập đưa ra cho chúng ta là kiểm tra ma trận có phải là ma trận đơn vị không bằng ngôn ngữ C.

2. Lời giải

Đầu tiên chúng ta cần biết ma trận đơn vị là gì?

Ma trận đơn vị In có số chiều n là một ma trận nxn trong đó mọi phần tử trên đường chéo chính bằng 1 và tất cả những phần tử khác đều bằng 0

Ví dụ:

Để thực hiện bài toán này chúng ta cần có kiến thức cơ bản về ngôn ngữ lập trình C, các cách nhập xuất cơ bản trong C, mảng hai nhiều trong C và cách sử dụng hàm trong ngôn ngữ lập trình C.

Các bước thực hiện yêu cầu của bài tập kiểm tra ma trận có phải là ma trận đơn vị không bằng ngôn ngữ C như sau:

Bước 1: Ta khai báo một mảng 2 chều tĩnh số nguyên có tối đa 100 dòng và 100 cột int a[100][100].

Bước 2: Ta khai báo số nguyên int n là số dòng và số cột của ma trận (vì là ma trận vuông nên số dòng sẽ bằng số cột) với điều kiện n>1 hoặc n<100 nếu không thỏa mãn thì yêu cầu nhập lại n.

Bước 3: Ta khỏi tạo hàm void Nhap(int a[][100], int n) dùng để nhập dữ liệu từ bàn phím cho mảng. Trong hàm ta sử dụng vòng for bắt đầu từ int i =0 và kết thúc khi i<n và mỗi lần i tăng lên 1 để duyệt các hàng của ma trận, trong vòng for i ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì nhập vào dữ liệu của a[i][j].

Bước 4: Ta khởi tạo hàm void Xuat(int a[][100], int n) dùng để hiển thị dữ liệu từ mảng ra màn hình. Trong hàm ta sử dụng vòng for bắt đầu từ int i = 0 và kết thúc khi i<n và mỗi lần i tăng lên 1 để duyệt các hàng của ma trận, trong vòng for j ta khởi tạo vòng for bắt đầu từ int j =0, kết thúc khi j<n và mỗi lần lặp j tăng lên 1, trong vòng for j thì ta hiển thị a[i][j] ra màn hình.

Bước 5: Ta khởi tạo hàm bool Donvi(int a[][100], int n) dùng để kiểm tra ma trận có phải là ma trận đơn vị không. Trong hàm ta sử dụng vòng for bắt đầu từ int i = 0 và kết thúc khi i<n và mỗi lần i tăng lên 1 để duyệt các phần tử của ma trận, trong vòng for i ta dùng if với điều kiện nếu a[i][i] != 1 thỏa mãn thì trả về false (nếu các phần tử trên đường chéo chính khác 1 thì trả về false). Ta khởi tạo vòng for i bắt đầu từ int i =0 và kết thúc khi i<n mỗi lần i tăng lên 1, trong for i ta khởi tạo vòng lặp for j bắt đầu từ int j = i+1 và kết thúc khi j< n mỗi lần j tăng lên 1, trong for j ta dùng if với điều kiện nếu (a[i][j] !=0) hoặc (a[j][i] !=0) thì trả về false (nếu các phần tử không phải đường chéo chính khác 0 thì trả về false). Kết thúc lặp ta trả về true (các trường hợp còn lại là ma trận đơn vị).

Bước 6: Trong hàm main ta gọi hàm Nhap(a,n), Xuat(a,n) và dùng if với điều kiện Donvi(a,n) == true thì ma trận là ma trận đơn vị, ngược lại không phải là ma trận đơn vị rồi chạy chương trình.

Chương trình giải bài tập kiểm tra ma trận có phải là ma trận đơn vị không bằng ngôn ngữ lập trình C như sau:

#include<stdio.h>
void Nhap(int a[][100],int n){//Ham nhap ma tran
    for(int i = 0; i<n; i++){//duyet hang cua ma tran
        for(int j = 0 ; j<n; j++){//duyet cot cua ma tran
            printf("Nhap a[%d][%d] = ", i, j);
            scanf("%d", &a[i][j]);//nhap vao cac phan tu cua ma tran
        }
    }
}
void Xuat(int a[][100],int n){
    for(int i =0; i<n; i++){//duyet hang cua ma tran
        for(int j = 0; j<n; j++){//duyet cot cua ma tran
            printf("%5d", a[i][j]);//in ma tran ra man hinh
        }
        printf("\n");
    }
}
bool Donvi(int a[][100],int n)// ham kiem tra ma tran don vi
{
    for(int i =0; i<n; i++){
        if(a[i][i]!=1){//neu duong cheo chinh khac 1 thi khong phai ma tran don vi
            return false;
        }
    }
    for(int i =0; i<n; i++){
        for(int j =i+1; j<n; j++){
            if((a[i][j] !=0) || (a[j][i] !=0)){//neu cac vi tri khong phai duong cheo chinh khac 0 thi khong phai ma tran don vi
                return false;
            }
        }
    }
    //con lai la ma tran don vi
    return true;
}
int main(){
    int a[100][100];// khai bao ma tran
    int n;// khai bao so hang va so cot
    do{
        printf("Nhap so cot va dong cua ma tran vuong:");
        scanf("%d", &n);
        if(n<1 || n>100)
        {
            printf("Nhap lai:");
        }
    }while(n<1 || n>100);//dieu kien neu n<1 hoac n>100 yeu cau nhap lai
    printf("\nNhap ma tran:\n");
    Nhap(a,n);
    printf("\nMa tran sau khi nhap la:\n");
    Xuat(a,n);
    if(Donvi(a,n)==true){
        printf("Ma Tran Tren La Ma Tran Don Vi");
    }else{
        printf("Ma Tran Vua Khong Phai Ma Tran Don Vi");
    }
    
}

Ví dụ tôi nhập ma trận đơn 3×3.

Kết quả:

Nhap so cot va dong cua ma tran vuong:3

Nhap ma tran:
Nhap a[0][0] = 1
Nhap a[0][1] = 0
Nhap a[0][2] = 0
Nhap a[1][0] = 0
Nhap a[1][1] = 1
Nhap a[1][2] = 0
Nhap a[2][0] = 0
Nhap a[2][1] = 0
Nhap a[2][2] = 1

Ma tran sau khi nhap la:
1 0 0
0 1 0
0 0 1
Ma Tran Tren La Ma Tran Don Vi

3. Tổng kết

Sau khi làm bài tập này các bạn cần phải hiểu và nắm được những kiến thức sau:

  • Cách nhập xuất cơ bản trong ngôn ngữ lập trình C.
  • Cách sử dụng hàm trong ngôn ngữ lập trình C.
  • Cách sử dụng mảng hai chiều trong ngôn ngữ lập trình C.
  • Cách sử dụng vòng lặp for để duyệt các dòng và cột trong mảng hai chiều.
  • Khái niệm về ma trận đơn vị.
  • Cách kiểm tra ma trận có phải là ma trận đơn vị hay không C.