PDA

View Full Version : Code cộng, trừ, nhân, chia ma trận bằng C++. Chọn cộng ma trận thì bị out?



VanDK90
15-10-2010, 05:33 PM
Hix bài của mình nếu chọn 2 để nhân ma trận thì ra bình thường nhưng chọn 1 để cộng ma trận thì bị out ra là sao ?
Mọi người giúp mình sửa với.

#include <stdio.h>
#include <conio.h>
#include <malloc.h>

struct mt {
int **a;
int dong, cot;
} ;

void capphatbonho(mt &A)
{
int i,j;
A.a = new int* [A.dong];
for ( i=0; i<A.dong; i++)
A.a[i] = new int [A.cot];
}

void nhapmatran(mt &A, char ch)
{
for( int i=0;i<A.dong;i++)
{
for( int j=0;j<A.cot;j++)
{
printf("\n %c[%d][%d] = ",ch,i,j);
scanf("%d", &A.a[i][j]);
}
}
}

void xuatmatran(mt &A)
{
int i,j;
for( i=0;i<A.dong;i++)
{
printf("\n");
for( j=0;j<A.cot;j++)
printf(" %d ",A.a[i][j]);
}
}

void giaiphong(mt &A)
{
for (int j=0; j<A.dong;j++)
delete []A.a[j];
delete []A.a;
}

mt operator + ( const mt &A, const mt &B)
{
mt C;
capphatbonho(C);
C.dong=A.dong;
C.cot=A.cot;
for(int i=0;i<A.dong;i++)
{
for(int j=0;j<A.cot;j++)
C.a[i][j]=A.a[i][j]+B.a[i][j];
}
return C;
}

mt operator * ( const mt &A, const mt &B)
{
mt D;
capphatbonho(D);
D.dong=A.dong;
D.cot=A.cot;
for(int i=0;i<A.dong;i++)
{
for(int j=0;j<A.cot;j++)
{
D.a[i][j]=0;
for(int k=0;k<A.cot;k++)
D.a[i][j]+=A.a[i][k]*B.a[k][j];
}
}
return D;
}


int main()
{
int x;
mt A,B;
printf("\n so dong la : ");
scanf("%d", &A.dong);
printf("\n so cot la : ");
scanf("%d",&A.cot);
B.dong=A.dong;
B.cot=A.cot;
capphatbonho(A);
capphatbonho(B);
nhapmatran(A,'A');
nhapmatran(B,'B');
printf("\n chon 1 la cong ma tran, 2 la nhan ma tran : ");
scanf("%d", &x);
switch(x)
{
case 1 :
{
mt C;
printf("\n Ma tran tong la : ");
C=A+B;
xuatmatran(C);
giaiphong(C);
break;
}
case 2 :
{
mt D;
printf("\n Ma tran tich la : ");
D=A*B;
xuatmatran(D);
giaiphong(D);
break;
}


}
giaiphong(A);
giaiphong(B);
getch();
}

AlexBlack
15-10-2010, 05:50 PM
i và j trong hàm tạo ma trận có giá trị đâu

kitti
15-10-2010, 06:11 PM
chưong trình chạy rất ổn.
chỉ cần thêm
return 0;
sau lệnh
getch();
là ok!

VanDK90
16-10-2010, 02:15 PM
Mình thấy cái return 0 này không quan trọng lắm vì tất cả các bài mình đã làm có return 0 đâu mà vẫn ra đúng mà.
Mà kể cả thêm return 0 thì vẫn không ra bạn à.
Ai giúp mình với.

kitti
17-10-2010, 07:53 PM
mình copy về cho chạy thấy ổn mà. chon 1 vẫn chạy bình thường

VanDK90
18-10-2010, 05:40 PM
Hix sao lại thế nhỉ, mình dùng dev-C++ 4.9.9.2 không chạy được thật mà, mà chắc cái này cũng chả liên quan. Rõ ràng chọn 1 là nó out ra ngay, có hiện ma trận tổng đâu >"<.

kitti
18-10-2010, 05:53 PM
Hix sao lại thế nhỉ, mình dùng dev-C++ 4.9.9.2 không chạy được thật mà, mà chắc cái này cũng chả liên quan. Rõ ràng chọn 1 là nó out ra ngay, có hiện ma trận tổng đâu >"<.
mình copy về chạy bằng borlandc chạy ổn mà nhấn 1 hay 2 đều được cả bạn xem lại đi có khi ro trình biên dịch của bạn đấy.