
Nguyên bản được gửi bởi
Aptechite
Yêu cầu là viết 1 chương trình cộng 2 ma trận dùng con trỏ, chương trình của em viết ra chạy đúng khi số nhập vào nhỏ còn khi số nhập vào lớn hay kích thước ma trận lớn là nó chạy ba lăng nhăng. Các bác làm ơn chỉ cho em chỗ sai.
Code:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
void main()
{
int (*a)[10],(*b)[10], i, j, row, col,(*c)[10];
clrscr ();
printf("\n Enter the dimension of the matrix : ");
scanf ("%d %d", &row, &col);
//Enter matrix a
a=(int*)malloc(row*col*sizeof(int));
for(i=0; i<row; i++)
for(j=0;j<col; j++)
{
printf("\n Enter the value of matrix a:\na[%d][%d]", i,j);
scanf("%d",&a[i][j]);
}
//Enter matrix b
b= (int*)malloc(row*col*sizeof(int));
for(i=0; i<row; i++)
for (j=0; j<col; j++)
{
printf("\n Enter the value of matrix b:\na[%d][%d]", i, j);
scanf("%d",&b[i][j]);
}
for(i=0; i<row; i++)
for(j=0;j<col; j++)
c[i][j] = a[i][j]+ b[i][j];
for(i=0; i<row; i++)
for(j=0; j<col; j++)
printf ("\n%d c[%d][%d]",c[i][j],i,j );
getch();
}
Chương trình này của bạn mình không thể chạy được (và ko hiểu sao bạn lại chạy được
) vì 2 cái mình bôi đỏ,tại sao sai thì tí bạn tham khảo CT của mình sẽ thấy sự khác nhau và bạn dễ dàng nhận ra là mình sai ở đâu.
Còn CT thứ 2 của bạn thì cũng sai nốt.
Code:
#include <stdio.h>
#include <conio.h>
#include <malloc.h>
void main()
{
int r, c, i, j,**p1, **p2,**sum;//con tro den con tro (:-)??
clrscr();
printf ("\nEnter the dimession of the matrix: ");
scanf ("%d %d", &r, &c);
p1=(int**)malloc(r*c*sizeof(int));
p2=(int**)malloc(r*c*sizeof(int));
//Enter the matrix1
printf ("\nEnter the value of the matrix 1 : ");
for(i=0; i<r; i++)
for(j=0; j<c; j++)
{
printf ("\na[%d][%d]",i+1, j+1);
scanf("%d", &p1[i][j]);//sai o cho lay dia chi nay
}
//Enter the matrix2
printf ("\nEnter the value of the matrix 2 : ");
for (i=0; i<c; i++)
for (j=0; j<c; j++)
{
printf ("\nb[%d][%d]", i+1,j+1);
scanf ("%d",&p2[i][j]);
}
//Add 2 matrixes
for(i=0;i<r; i++)
for(j=0; j<c;j++)
{
sum[i][j]= p1[i][j]+p2[i][j];
printf ("\nsum[%d][%d] = %d", i+1, j+1, sum[i][j]);
}
getch();
}
Nói chung bài bạn edit tùm lum à cấp phát bộ nhớ mà ko free()
chăng hiểu bạn compile = gì ? mà vẫn chạy được mới là.
đấy là code của mình về cộng 2 matrix cùng kích thước bạn tham khảo xem :
Code:
#include <stdio.h>
#include <conio.h>
#include <stdlib.h>
void main()
{
int (*a)[5],(*b)[5],(*t)[5];
int i,j,r,c;
int *pa,*pb,*pt;
//3 con tro tro ve 3 ma tran
pa = *a;
pb = *b;
pt = *t;
printf("\nNhap vao so hang cua 2 matrix :");
scanf("%d",&r);
printf("\nNhap vao so cot cua 2 matrix :");
scanf("%d",&c);
//cap phat bo nho
pa = (int *)calloc(r*c,sizeof(int));
pb = (int *)calloc(r*c,sizeof(int));
pt = (int *)calloc(r*c,sizeof(int));
//Nhap so lieu vao ma tran a
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
printf("\nNhap vao gia a[%d][%d]= ",i,j);
scanf("%d",(pa+c*i+j));
}
//Nhap so lieu vao ma tran b
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
printf("\nNhap vao gia b[%d][%d]= ",i,j);
scanf("%d",(pb+c*i+j));
}
// tinh tong 2 ma tran
for(i=0;i<r;i++)
for(j=0;j<c;j++)
{
*(pt+c*i+j) = *(pa+c*i+j) + *(pb+c*i+j);
}
//in ma tran a
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
printf("%3d",*(pa+c*i+j));
printf("\n\n");
}
//in ma tran b
printf("\n+\n");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
printf("%3d",*(pb+c*i+j));
printf("\n\n");
}
//in ma tran tong
printf("\n====================\n");
for(i=0;i<r;i++)
{
for(j=0;j<c;j++)
printf("%3d",*(pt+c*i+j));
printf("\n\n");
}
//giai phong bo nho
free(pa);
free(pb);
free(pt);
getch();
}
Vài lời nhận xét có gi ko phải mong bỏ quá 