30/09/2018, 18:13

Không in ra được đúng dạng Ma trận

Mình k biết sai chỗ nào sao mà k in ra được đúng dạng ma trận

void nhapMT(int a[10][10], int m, int n)
{
    int i,j;
    printf ("nhap vao ma tran :
");
    for (i=1;i<=m;i++)
        for (j=1;j<=n;j++)
        {
            printf("
a[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
        }
}

void inMT(int a[10][10], int m, int n)
{
    int i,j;
    for (i=1;i<=m;i++)
    {
        for (j=1;j<=n;j++)
            printf ("%d	",&a[i][j]);
        printf ("
");
        printf ("
");
    }

}
void nhanMT(int a[10][10], int b[10][10], int c[10][10], int m,int n, int p)
{
    int i,j,k;
    for (i=1;i<=m;i++)
        for (j=1;j<=p;j++)
        {
            c[i][j]=0;
            for (k=1;k<=n;k++)
                c[i][j]+= a[i][k]*b[k][j];
        }
}

void main(void)
{
    int a[10][10],b[10][10],c[10][10];
    int m1,n1,m2,n2,m,n,p;
    printf ("nhap vao so hang ma tran A: ");
    scanf ("%d",&m1);
    printf ("nhap vao so cot mat tran A: ");
    scanf ("%d",&n1);
    nhapMT(a,m1,n1);
    printf("A:
");
    inMT(a,m1,n1);

    printf ("nhap vao so hang ma tran B: ");
    scanf ("%d",&m2);
    printf ("nhap vao so cot ma tran B: ");
    scanf ("%d",&n2);
    nhapMT(b,m2,n2);
    printf("B:
");
    inMT(b,m2,n2);

    if (n1!=m2)
        printf ("khong nhan duoc");
    else 
    {
        nhanMT(a,b,c,m,n,p);
        printf ("tich cua 2 ma tran la:
");
        inMT(c,m1,n2);
    }
}
Huỳnh Đức viết 20:27 ngày 30/09/2018

ko in được là đúng rồi
bạn học về con trỏ chưa ?

Thành sky viết 20:17 ngày 30/09/2018

Mình học rồi nhưng còn lơ mơ lắm. Trường dạy k ăn thua
Thế b có biết câu trả lời k ?

Huỳnh Đức viết 20:22 ngày 30/09/2018

bạn đọc về con trỏ đi nhé

Việt Hải viết 20:15 ngày 30/09/2018

vị trí đầu tiên của mảng là 0 rồi mới đến 1 bạn cho vòng lặp chạy từ 1 là sai r
p/s: trong hàm inMT bạn xoá dấu & trong lệnh printf đi nhé , làm như vậy máy sẽ hiểu là hiển thị địa chỉ ô nhớ của mảng chứ không phải giá trị của nó.

Huỳnh Đức viết 20:18 ngày 30/09/2018

ko phải đâu.lúc nhập bạn ấy cũng nhập từ i =1 rồi mà =)))

Thành sky viết 20:28 ngày 30/09/2018

@huynhduc96 b có fix đc k thế ?

Thành sky viết 20:16 ngày 30/09/2018

Nếu hiểu đc thì mình là k post bài bạn nhé =)))
B trả lời hay quá =)))

Huỳnh Đức viết 20:27 ngày 30/09/2018

lỗi của bạn là bạn đưa mảng vào hàm
thực chất hàm chỉ xử lý bản nháp của mảng thôi.nên sau khi ra khỏi hàm thì mảng đó ko còn đúng nữa
giải pháp ở đây là bạn đưa mảng vào hàm thông qua con trỏ là được nhé.
thử xem nào

Thành sky viết 20:22 ngày 30/09/2018

Con trỏ mình chưa thành thạo nên k dùng b à.
Mình Bỏ Dấu & trong hàm InMT rồi ( ở chỗ printf ) thì lại in ra đúng định dạng.
Nhưng bây h nó lại k nhân đc.

Huỳnh Đức viết 20:21 ngày 30/09/2018

đang onl đt nên ko code đc.ko cũng code rồi
bạn đọc lại cách truyền con trỏ mảng vào hàm xem

Huỳnh Đức viết 20:18 ngày 30/09/2018

nếu ko đc thì đợi mình .mình code cho nhé

Thành sky viết 20:25 ngày 30/09/2018

Ok b. Thank b trc <3
=))

Huỳnh Đức viết 20:17 ngày 30/09/2018

tưởng thế nào
hóa ra bạn sai cả lỗi logic -_-
thật chịu bạn luôn
bạn xem lại rồi tự check là hiểu nhé

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

void nhapMT(int a[10][10], int m, int n)
    {
    int i,j;
    printf ("nhap vao ma tran :\n");
    for (i=1; i<=m; i++)
        for (j=1; j<=n; j++)
            {
            printf("\na[%d][%d]=",i,j);
            scanf("%d",&a[i][j]);
            }
    }

void inMT(int a[10][10], int m, int n)
    {
    int i,j;
    for (i=1; i<=m; i++)
        {
        for (j=1; j<=n; j++)
            printf ("%d\t",a[i][j]);
        printf ("\n");
        printf ("\n");
        }

    }
void nhanMT(int a[10][10], int b[10][10], int c[10][10], int m,int n, int p)
    {
    int i,j,k;
    for (i=1; i<=m; i++)
        for (j=1; j<=n; j++)
            {
            c[i][j]=0;
            for (k=1; k<=p; k++)
                c[i][j]+= a[i][k]*b[k][j];
            }
    }

void main(void)
    {
    int a[10][10],b[10][10],c[10][10];
    int m1,n1,m2,n2,m,n,p;
    printf ("nhap vao so hang ma tran A: ");
    scanf ("%d",&m1);
    printf ("nhap vao so cot mat tran A: ");
    scanf ("%d",&n1);
    nhapMT(a,m1,n1);
    printf("A:\n");
    inMT(a,m1,n1);
    printf ("nhap vao so hang ma tran B: ");
    scanf ("%d",&m2);
    printf ("nhap vao so cot ma tran B: ");
    scanf ("%d",&n2);
    nhapMT(b,m2,n2);
    printf("B:\n");
    inMT(b,m2,n2);

    if (n1!=m2)
        printf ("khong nhan duoc");
    else
        {
        nhanMT(*a,*b,*c,m1,n2,n1);
        printf ("tich cua 2 ma tran la:\n");
        inMT(*c,m1,n2);
        }
    }
Thành sky viết 20:29 ngày 30/09/2018

Mình cảm ơn bạn nhé

Bài liên quan
0