Code nhân 2 ma trận ra kết quả không đúng

Đề bài: Ma trận nhân ma trận
Em làm hoài không ra đáp án đúng, nhờ mọi người chỉ giúp ạ.


Bạn đăng code lên dưới dạng chữ, không chụp hình theo hướng dẫn:

Khi chuyển mảng 2 chiều (giả sử mảng 2 chiều này có m dòng, n cột) về mảng 1 chiều, chỉ số sẽ chuyển thành

matrix2d[i][j] ---> matrix1d[i * n + j]  // KHÔNG PHẢI i*j
3 Likes

Dạ còn sai ở đâu nữa ạ, tại em vẫn chưa ra đúng kết quả

Bạn đăng code dưới dạng text lên đây đi :pouting_cat:

1 Like

Sao anh có vẻ quạu :frowning:

#include <stdio.h>
#include <time.h>
#include <stdlib.h>

void getMatrixElements(int* matrix, int r, int c) {

   printf("\nEnter elements: \n");

   for (int i = 0; i < r; ++i) {
      for (int j = 0; j < c; ++j) {
         printf("Enter a%d%d: ", i + 1, j + 1);
         scanf("%d", &matrix[i*j]);
      }
   }
}

void multiplication(int* matrix1, int c1, int r1, int r2
                    ,int* matrix2, int c2, int*result){
    for(int i=0; i<r1; i++){
        for(int j=0; j<c2; j++) {
            result[i*j] = 0;
            for(int k=0; k<c1; k++) {
                result[i*j] += matrix1[i*k] * matrix2[k*j];
            }
        }
    }

}
void display(int* result, int r, int c) {

   printf("\nOutput Matrix:\n");
   for (int i = 0; i < r; ++i) {
      for (int j = 0; j < c; ++j) {
         printf("%d  ", result[i*r+j]);
      }
   }
}

int main() {

    int c1 = 2;
    int r1  = 2;
    int* matrix1 = (int*) malloc(c1*r1*sizeof(int));
    getMatrixElements(matrix1, r1, c1);

    int c2 = 2;
    int r2  = 2;
    int* matrix2 = (int*) malloc(c2*r2*sizeof(int));
    getMatrixElements(matrix2, r2, c2);

    int* result = (int*) malloc(c1*r2*sizeof(int));
    multiplication(matrix1, c1, r1, r2, matrix2, c2, result);

    display(result, r1, c2);


    free(matrix1);
    free(matrix2);
    free(result);
}

Ủa mình chỉ cho bạn lỗi sai ở trên rồi mà bạn không chịu sửa là sao? :pouting_cat:

1 Like

Em xin lỗi anh nha. Em ra được rồi cảm ơn anh

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