Đây là một bài tạo ma trân bằng con trỏ kép. Nhưng khi e nhập đến ma trận 2 thì nó hiện lỗi "has stopped working’ mà em không biết tại sao. Mong mọi người giúp e với ạ.
typedef struct complex_num{
double Re;
double Im;
}num;
int getInt(int *a);
int getDouble(double *a);
void output_matrix(num **p, int n, int m);
void input_matrix_complex(num **p,int n,int m);
void inputMatrixReal (num **p,int n, int m);
void plus_matrix(num **p, num **p1,num **p2, int n, int m);
void multiplication_matrix(num **p, num **p1, num **p2, int n, int m, int q);
int i,j;
int getInt(int *a){
int n;
n=(int*)calloc(n,sizeof(int));
do{
n=scanf("%d",a,sizeof(int));
if (n<0)
return 0;
if(n==0||(*a<=0)){
printf("%s\n","Error");
scanf("%*c",0);
}
}while(n==0);
return 1;
}
int getDouble(double *a){
int n;
do{
n=scanf("%lf", a, sizeof(double));
if(n<0)
return 0;
if(n==0){
printf("%s\n","Error");
scanf("%*c", 0);
}
}while (n==0);
return 1;
}
void output_matrix(num **p, int n, int m){
for(i=0;i<n;i++){
for(j=0;j<m;j++)
if(p[i][j].Im==0.0) printf("\t%10.1lf",p[i][j].Re);
else if (p[i][j].Re==0.0) printf("\t%0.1lf\t",p[i][j].Im);
else printf("\t%-0.1f+%0.1fi",p[i][j].Re,p[i][j].Im);
printf("\n");
}
}
void input_matrix_complex(num **p,int n,int m){
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("Enter[%d][%d]:\t",i,j);
printf("Re= ");
getDouble(&p[i][j].Re);
printf("\t\tIm= ");
getDouble(&p[i][j].Im);
}
}
}
void inputMatrixReal (num **p,int n, int m){
for(i=0;i<n;i++){
for(j=0;j<m;j++){
printf("Enter [%d][%d]: ",i,j);
getDouble(&p[i][j].Re);
p[i][j].Im=0.0;
}
}
}
void plus_matrix(num **p, num **p1,num **p2, int n, int m){
for(i=0;i<n;i++){
for(j=0;j<m;j++){
p[i][j].Re = p1[i][j].Re + p2[i][j].Re;
p[i][j].Im = p1[i][j].Im + p2[i][j].Im;
}
}
}
void multiplication_matrix(num **p, num **p1, num **p2, int n, int m, int q){
int k;
for (i=0; i<n; i++)
for (j=0;j<m;j++){
p[i][j].Re = 0.0;
p[i][j].Im = 0.0;
for(k=0;k<q;k++){
p[i][j].Re+=p1[i][k].Re*p2[k][j].Re-p1[i][k].Im*p2[k][j].Im;
p[i][j].Im+=p1[i][k].Re*p2[k][j].Im+p1[i][k].Im*p2[k][j].Re;
}
}
}
void main(){
int a;
int n1,m1,n2,m2;
num **p,**p1,**p2;
printf("Elements are complex or real number?\n");
printf("1.Complex number\n");
printf("2.Real number\n");
do{
getInt(&a);
switch(a){
case 1:system("cls"); printf("\n-----------------------------Complex num----------------------------------\n");break;
case 2:system("cls"); printf("\n-----------------------------Real num-------------------------------------\n");break;
default:printf("Error"); a=0;
}
}while(a==0);
printf("How many lines of matrix 1? N1= ");
getInt(&n1);
printf("How mant columns of matrix 1? M1= ");
getInt(&m1);
p1=(double**)malloc(sizeof(double)*n1*m1);
printf("\nMatrix 1:\n");
if (a==1) input_matrix_complex(p1,n1,m1);
if (a==2) inputMatrixReal(p1,n1,m1);
output_matrix(p1,n1,m1);
printf("How many lines of matrix 2? N2= ");
getInt(&n2);
printf("How mant columns of matrix 2? M2= ");
getInt(&m2);
p2=(double**)calloc(p2,sizeof(double)*n2*m2);
printf("\nMatrix 2:\n");
if (a==1) input_matrix_complex(p2,n2,m2);
if (a==2) inputMatrixReal(p2,n2,m2);
output_matrix(p2,n2,m2);
printf("\n------------------------------------------------\n");
if(n1!=n2||m1!=m2) printf("Can't plus matrix 1 and matrix 2");
else{
printf("\nSum matrix 1 + matrix 2:\n");
p=(double**)malloc(n1*sizeof(double));
for(i=0;i<n1;i++){
p[i]=(double*)malloc(m1*sizeof(double));
}
plus_matrix(p,p1,p2,n1,m1);
output_matrix(p,n1,m1);
free(p);
}
printf("\n---------------------------------------\n");
if(m1==m2){
printf("\nMutiplication matrix 1 X matrix 2:\n");
p=(double**)malloc(n1*sizeof(double));
for(i=0;i<n1;i++){
p[i]=(double*)malloc(m2*sizeof(double));
}
multiplication_matrix(p,p1,p2,n1,m2,m1);
output_matrix(p,n1,m2);
}
else printf("\nMatrix 1 can't multiply by matrix 2");
free(p1);
free(p2);
getch();
}



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