#include <iostream>
using namespace std;
//Hàm cộng hoạt động bình thường nhưng hàm nhân hoạt động sai.
class matran{
private:
int hang, cot ;
int ** a;
public:
matran()
{
hang=0;cot=0;
this->a=NULL;
}
matran(const matran &d){
this->hang = d.hang;
this->cot = d.cot;
a = new int *[d.hang];
for ( int i =0; i < cot ; i++){
this->a[i] = new int[d.hang];
this->a[i]= d.a[i];
}
for (int i = 0; i < cot; i ++)
for (int j = 0; j < cot; j ++)
a[i][j] = d.a[i][j];
*this = d;
}
~matran()
{
for(int i = 0; i < cot; i++)
{
delete[] a[i];
}
delete[] a;
}
void nhapmatran();
friend void in( const matran &x);
friend matran cong(const matran &x, const matran &y);
friend matran nhan(const matran &x,const matran &y);
};
void matran::nhapmatran()
{
cout << "\nNhap hang cot :"; a = new int*[hang];
for(int i = 0; i < cot; i++)
a[i] = new int[hang];
for(int i = 0; i < cot; i++)
{
for(int j = 0; j < hang; j++)
{
}
}
}
void in( const matran &x) {
for(int i = 0; i < x.cot; i++)
{
for(int j = 0; j < x.hang; j++)
{
}
}
}
/*
matran cong(const matran &x, const matran &y) {
matran kq(x);
int hang= x.hang;
int cot = x.cot;
kq.cot = cot;
kq.hang = hang;
for (int i = 1; i <= cot; i++)
{
for (int j = 1; j <= hang; j++)
{
kq.a[i][j] +=x.a[i][j] + y.a[i][j];
}
}
return kq;
}
matran nhan( const matran &x , const matran &y) {
matran kq(x);
int cot = x.cot;
int hang = x.hang;
kq.cot = cot;
kq.hang = hang;
for ( int i =0 ; i < kq.cot ; i ++)
{
for ( int j = 0 ; j < kq.hang; j ++)
{
kq.a[i][j]=0;
for ( int k =0; k < kq.cot; k++)
{
kq.a[i][j] += x.a[i][k]*y.a[k][j];
}
}
}
return kq;
}
*/
matran cong(const matran &x, const matran &y) {
cout << "\nToi dang cong ..\n"; //output matran kq(x);
int hang= x.hang;
int cot = x.cot;
kq.cot = cot;
kq.hang = hang;
int tam;
for ( int i =0 ; i < cot ; i++){
for ( int j =0 ; j < hang ; j++)
{
kq.a[i][j] = x.a[i][j] + y.a[i][j];
}
}
return kq;
}
matran nhan( const matran &x , const matran &y) {
cout << "\nToi dang nhan ..\n"; //output
matran kq(x);
int cot = x.cot;
int hang = x.hang;
kq.cot = cot;
kq.hang = hang;
int tam,tam1,tam2;
int i,j,k;
for(i=0;i<hang;i++)
{
for(j=0;j<cot;j++)
{
tam=kq.a[i][j];
for(k=0;k<cot;k++)
{
tam1=x.a[i][k];
tam2=y.a[k][j];
kq.a[i][j] =tam + tam1 * tam2;
tam =0;
}
}
/*for(int i= 0; i<dongA; i++)
for(int j = 0; j<cotB; j++)
for(int k = 0; k<cotA; j++)
{
c[i][j] += a[i][k]*b[k][j];
}*/
}
return kq;
}
int main()
{
matran x,y,c,d;
int hang,cot;
cout <<" nhap ma tran x : \n"; x.nhapmatran();
cout <<"\n nhap ma tran y : \n"; y.nhapmatran();
cout <<" \nma tran x vua nhap la : \n"; in(x);
cout <<" \nma tran y vua nhap la : \n"; in(y);
c = cong(x,y);
cout <<" \ntong cua 2 ma tran la : \n"; in(c);
cout <<" \ntich cua 2 ma tran la : \n"; d = nhan(x,y);
in(d);
return 1;
}