/************************************************************/
//日期:2010-10-22
//功能:求m×n阶矩阵A与n×k阶矩阵B的乘积矩阵C=AB。
/************************************************************/
#include<iostream>
#include<fstream>
using namespace std;
class trmul
{
private:
int m;//矩阵A和矩阵C的行数
int n;//矩阵A的列数和矩阵B的行数
int k;//矩阵B和矩阵C的列数
double **a;//存放矩阵A的元素
double **b;//存放矩阵B的元素
double **c;//存放矩阵C的元素
//double **a,**b,**c;
public:
trmul(int mm,int nn,int kk)
{
int i;
m=mm;
n=nn;
k=kk;
a=new double*[m];//动态分配内存空间
for(i=0;i<m;i++)
{
a[i]=new double[n];
}
b=new double*[n];
for(i=0;i<n;i++)
{
b[i]=new double[k];
}
c=new double*[m];
for(i=0;i<m;i++)
{
c[i]=new double[k];
}
}
~trmul()
{
int i;
for(i=0;i<m;i++)
{
delete[] a[i];
}
delete[] a;
for(i=0;i<n;i++)
{
delete[] b[i];
}
delete[] b;
for(i=0;i<m;i++)
{
delete[] c[i];
}
delete[] c;
}
void input();//从文件读入矩阵A和矩阵B
void mul();//执行C=AB
void output();//矩阵C写入文件并显示
};
void trmul::input()
{
char fname[100]="E://程序设计空间//TEST//t27//fin.txt";
int i,j;
cout<<"/ninput file name:"<<fname<<endl;
// cin>>fname;
ifstream fin(fname);
if(!fin)
{
cout<<"can't open this file:"<<fname<<endl;
exit(1);
}
else
{
cout<<"matrix 1 is:"<<endl;
for(i=0;i<m;i++)
{
for(j=0;j<n;j++)
{
fin>>a[i][j];
cout<<a[i][j]<<" ";
}
cout<<endl;
}
cout<<"matrix 2 is:"<<endl;
for(i=0;i<n;i++)
{
for(j=0;j<k;j++)
{
fin>>b[i][j];
cout<<b[i][j]<<" ";
}
cout<<endl;
}
}
fin.close();
}
void trmul::mul()
{
int i,j,t;
for(i=0;i<m;i++){
for(j=0;j<k;j++){
c[i][j]=0.0;
for(t=0;t<n;t++){
c[i][j]+=a[i][t]+b[t][j];
}
}
}
}
void trmul::output()
{
int i,j;
char fname[100]="E://程序设计空间//TEST//t27//fout.txt";
cout<<" output file name:"<<fname<<endl;
ofstream fout(fname);
if(!fout)
{
cout<<"can't open this file:"<<fname<<endl;
}
else
{
for(i=0;i<m;i++){
for(j=0;j<k;j++){
fout<<" "<<c[i][j];
cout<<" "<<c[i][j];
}
fout<<endl;
cout<<endl;
}
}
fout.close();
}
int main()
{
trmul test(4,5,3);
test.input();
test.mul();
test.output();
getchar();
return 0;
}