1. Bài tâp đọc và ghi ma trận vào file trong 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 văn bản trong ngôn ngữ lập trình C,cách dùng vòng lặp for trong C để duyệt qua các phần tử trong man trân, cách đọc và ghi file trong C.

Yêu cầu của bài tập đưa ra cho chúng ta là nhập dữ liệu từ bàn phím cho ma trận ghi vào file và lấy dữ liệu từ file in ra màn hình.

2. Lời giải

Để 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 chuỗi cơ bản trong C , cách dùng vòng lặp for trong C để duyệt qua các phần tử trong man trân, cách đọc và ghi file trong C.

Để đọc và ghi file trong C chúng ta cần phải sử dụng các hàm nằm trong thư viện stdlid.h. Bạn có thể tìm hiểu về đọc ghi file nhiều hơn từ chương trình học của chúng tôi Tại Đây

Các bước thực hiện yêu cầu của bài tập nhập dữ liệu từ bàn phím cho ma trận ghi vào file và lấy dữ liệu từ file in ra màn hình bằng ngôn ngữ lập trình C như sau:

Bước 1: Khởi tạo hàm void ghifile() dùng để nhập dữ liệu từ bàn phím cho ma trận rồi ghi vào file.

  • 1.1 Ta khai bao con trỏ kiểu file FILE *fp.
  • 1.2 Khai báo ma trận số nguyên int a[100][100] và số hàng, cột của ma trận int m,n.
  • 1.3 Mở file ở chế độ w (chỉ ghi) fp = fopen(“laptrinhtudau.txt”,”w”).
  • 1.4 Kiểm tra file dùng if với điều kiện nếu fp==NULL thì báo lỗi vào kết thúc.
  • 1.5 Nhập vào số hàng và cột của ma trận và dùng hàm fprintf() để ghi vào file.
  • 1.6 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<m, mỗi lần lặp i tăng lên 1 dùng để kiểm soát các hàng của ma trận; trong vòng lặp for i ta khởi tạo vòng lặp for bắt đầu từ int j=0, kết thúc khi i<n, mỗi lần lặp j tăng lên 1 dùng để kiểm soát các cột của ma trận. Trong vòng for j ta nhập dữ liệu cho từng phần tử của ma trận a[i][j].
  • 1.7 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<m, mỗi lần lặp i tăng lên 1 dùng để kiểm soát các hàng của ma trận; trong vòng lặp for i ta khởi tạo vòng lặp for bắt đầu từ int j=0, kết thúc khi i<n, mỗi lần lặp j tăng lên 1 dùng để kiểm soát các cột của ma trận. Trong vòng for j ta ghi dữ liệu cho từng phần tử của ma trận a[i][j] vào file.
  • 1.8 Dóng file.

Bước 2: Khởi tạo hàm void docfile() dùng để đọc dữ liệu từ file và hiển thị dữ liệu ra màn hình.

  • 2.1 Ta khai bao con trỏ kiểu file FILE *fp.
  • 2.2 Khai báo ma trận số nguyên int a[100][100] và số hàng, cột của ma trận int m,n.
  • 2.3 Mở file ở chế độ r (chỉ đọc) fp = fopen(“laptrinhtudau.txt”,”r”).
  • 2.4 Kiểm tra file dùng if với điều kiện nếu fp==NULL thì báo lỗi vào kết thúc.
  • 2.5 Đọc dữ liệu từ file gán vào số hàng và số cột của ma trận bằng hàm fscanf.
  • 2.6 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<m, mỗi lần lặp i tăng lên 1 dùng để kiểm soát các hàng của ma trận; trong vòng lặp for i ta khởi tạo vòng lặp for bắt đầu từ int j=0, kết thúc khi i<n, mỗi lần lặp j tăng lên 1 dùng để kiểm soát các cột của ma trận. Trong vòng for j ta đọc dữ liệu từ file gán vào từng phần tử a[i][j].
  • 2.7 Dùng vòng lặp for bắt đầu từ int i=0, kết thúc khi i<m, mỗi lần lặp i tăng lên 1 dùng để kiểm soát các hàng của ma trận; trong vòng lặp for i ta khởi tạo vòng lặp for bắt đầu từ int j=0, kết thúc khi i<n, mỗi lần lặp j tăng lên 1 dùng để kiểm soát các cột của ma trận. Trong vòng for j ta hiển thị dữ liệu của từng phần tử a[i][j] ra màn hình.
  • 2.8 Dóng file.

Bước 3: Trong hàm main ta gọi hai hàm docfile() và ghifile() rồi chạy chương trình.

Chương trình giải bài tập nhập dữ liệu từ bàn phím cho ma trận ghi vào file và lấy dữ liệu từ file in ra màn hình bằng ngôn ngữ lập trình C như sau:

#include <stdio.h>
#include <stdlib.h>
void ghifile(){
    FILE *fp;//khai báo con tro co kieu file
    int a[100][100];//ma tran kieu so nguyen
    int m, n;// so hang va cot cua ma tran
    //mo file o che do w
    fp = fopen("laptrinhtudau.txt","w");
    //kiem tra file
    if(fp==NULL){
        printf("Loi file!");
        return;
    }
    //nhap vao so hang cua ma tran
    printf("Nhap so hang:");
    scanf("%d",&m);
    //ghi so hang cua ma tran vao file
    fprintf(fp,"%d",m);
    fprintf(fp,"\n");
    //nhap vao so cot cua ma tran
    printf("Nhap so cot:");
    scanf("%d",&n);
    //ghi so cot cua ma tran vao file
    fprintf(fp,"%d",n);
    fprintf(fp,"\n");
    //nhap cac phan tu cua ma tran
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            printf("Nhap a[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
        }
    }
    //ghi cac phan tu cua ma tran vao file
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            fprintf(fp,"%d\t",a[i][j]);
        }
        fprintf(fp,"\n");
    }
    //dong file
    fclose(fp);
}
void docfile(){
    FILE *fp;//khai báo con tro co kieu file
    int a[100][100];//ma tran kieu so nguyen
    int m,n;// so hang va cot cua ma tran
    //mo file o che do r
    fp = fopen("laptrinhtudau.txt","r");
    //kiem tra file
    if(fp==NULL){
        printf("Loi file!");
        return;
    }
    //doc du lieu tu file gan vao m
    fscanf(fp,"%d",&m);
    printf("So hang cua ma tran la: %d\n",m);
    //doc du lieu tu file gan vao n
    fscanf(fp,"%d",&n);
    printf("So cot cua ma tran la: %d\n",n);
    //doc du lieu tu file gan vao tung phan tu cua ma tran
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            fscanf(fp,"%d",&a[i][j]);
        }
        fscanf(fp,"\n");
    }
    //in ma tran ra man hinh
    for(int i=0; i<m; i++){
        for(int j=0; j<n; j++){
            printf("%d\t",a[i][j]);
        }
        printf("\n");
    }
    //dong file
    fclose(fp);
}
int main(){		
    ghifile();
    docfile();
}

Kết quả:

Nhap so hang:3
Nhap so cot:3
Nhap a[0][0]=1
Nhap a[0][1]=2
Nhap a[0][2]=3
Nhap a[1][0]=4
Nhap a[1][1]=5
Nhap a[1][2]=6
Nhap a[2][0]=7
Nhap a[2][1]=8
Nhap a[2][2]=9
So hang cua ma tran la: 3
So cot cua ma tran la: 3
1       2       3
4       5       6
7       8       9

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 dùng vòng lặp for trong C để duyệt qua các phần tử trong man trân.
  • Cách đọc và ghi file trong C.
  • Đọc và ghi ma trận trong C.