Bài tập xử lí file trong C

Em không biết sai chỗ nào mong các bác chỉ bảo ạ, em cảm ơn trước ạ.

Xây dựng chương trình thứ 1: nhập 2 ma trận A kích thươc mxn, ma trận B kích thước nxk. Ghi thông tin 2 ma trận vao file mt.dat

Chương trình 2: đọc file mt.dat để được thông tin 2 ma trận A và B sau đó tính tích 2 ma trận và ghi bổ sung ma trận C = A x B vào cuối file

đồng thời in 3 ma trận ra màn hình.
Code:

#include<stdio.h>
#include<conio.h>
void rfile(int A[10][10],int n,int B[10][10],int m,int tb[]){
    FILE *fp;
    fp = fopen("ma tran.dat","rt");
    int i,j;
    if(fp==NULL){
        printf("\nTep khong ton tai.");
        getch();
        exit(1);
    }
    fgets(tb,50,fp);
    fscanf(fp,"%d%d",&n,&m);
    fgets(tb,50,fp);
    for(i=0; i<n;i++)
    {
        for(j=0; j<m;j++)
        {
            fscanf(fp,"%d", &A[i][j]);
        }
        fgets(tb,50,fp);
    }
    fgets(tb,50,fp);
    for(i=0; i<n;i++)
    {
        for(j=0; j<m;j++)
        {
            fscanf(fp,"%d", &B[i][j]);
        }
        fgets(tb,50,fp);
    }
    fclose(fp);
}
void tichmatrix(int A[10][10],int n,int B[10][10],int m){
    FILE *fp;
    fp = fopen("ma tran.dat","at");
    int C[20][20];
    if(fp==NULL){
        printf("\nTep khong ton tai.");
        getch();
        exit(1);
    }
    fprintf(fp,"Ma tran C = A*B\n");
    int i, j;
    for(i=0; i<n;i++)
    {
        for(j=0; j<m;j++)
        {
            C[i][j]+=A[i][j]*B[i][j];
            fprintf(fp,"%3d ", C[i][j]);
        }
        fprintf(fp,"\n");
    }
    fclose(fp);
}
void main()
{
    FILE *fp;
    int n, m, i, j, A[10][10],B[10][10];
    char tb[50];
    fp = fopen("ma tran.dat", "wt");
    fprintf(fp,"Ma tran A\n");
    printf("\nNhap so hang, cot cua ma tran:");
    scanf("%d %d", &n, &m);
    fprintf(fp, "Kich thuoc %dx%d\n", n, m);


    for(i=0; i<n;i++)
    {
        for(j=0; j<m;j++)
        {
            printf("\nNhap phan tu = ");
            scanf("%d", &A[i][j]);
            fprintf(fp,"%3d ", A[i][j]);
        }
        fprintf(fp,"\n");
    }
    fprintf(fp,"Ma tran B \n");
    printf("\nNhap ma tran B");
    for(i=0; i<n;i++)
    {
        for(j=0; j<m;j++)
        {
            printf("\nNhap phan tu = ");
            scanf("%d", &A[i][j]);
            fprintf(fp,"%3d ", A[i][j]);
        }
        fprintf(fp,"\n");
    }


    fclose(fp);
    printf("\nDa lap tep xong.");
    rfile(A,n,B,m,tb);
    tichmatrix(A,n,B,m);
    getch();
}

Đề bài của bạn có 2 chương trình. bạn nên chia làm 2 bài code cho dễ đọc. Mình chưa nhìn kĩ nhưng bạn có sửa dụng hàm exit() trong C mình nhớ có dùng thư viện #include <stdlib.h>. Ý kiến riêng nha bạn.

2 Likes

vâng ạ nhưng em chạy kết quả nó bị sai ạ

tất nhiên là nó có thể có thêm một số lỗi như lỗi C2664: ‘fgets’: không thể chuyển đổi tham số 1 từ ‘int []’ thành ‘char *’. mình chưa nói là khi thêm thư viện chương trình sẽ chạy bạn à.

2 Likes

ý em là chương trình chạy bình thường ạ nhưng việc nhân 2 ma trận nó làm sai ạ ^^

Đây ạ :
image

mình nghĩ bạn sai ở hàm tích 2 ma trận á. Mình nghĩ như này bạn thử xem nha

2 Likes
83% thành viên diễn đàn không hỏi bài tập, còn bạn thì sao?