- 22/1/05
- 211
- 133
#include"iostream.h"
void nhap(int **a,int m,int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
{
cout<<"phan tu ["<<i<<"]["<<j<<"]=";
cin>>a[j];
}
}
void display(int **a,int m,int n)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<n;++j)
cout<<a[j]<<" ";
cout<<"\n";
}
}
void deletematrix(int **a,int m)
{for(int i=0;i<m;i++)
delete [] a[m];
delete [] a;
}
void congmatrix(int **a,int **b,int m,int n)
{
for(int i=0;i<m;i++)
for(int j=0;j<n;j++)
a[j]+=b[j];
}
int main1()
{
int m,n;int **a,**b;
laplai: cout<<"nhap lan luot he so m,n cua matrix"<<endl;
cin>>m;cin>>n;
a=new int*[m];b=new int*[m];
for(int i=0;i<m;i++)
{
a=new int[n];
b=new int[n];
}
cout<<"nhap cac phan tu cua matrix A:"<<endl;
nhap(a,m,n);
cout<<"nhap cac phan tu cua matrix B:"<<endl;
nhap(b,m,n);
cout<<"view matrix A:"<<endl;
display(a,m,n);
cout<<"view matrix B:"<<endl;
display(b,m,n);
congmatrix(a,b,m,n);
cout<<"tong 2 matrix la:"<<endl;
display(a,m,n);
deletematrix(a,m);
deletematrix(b,m);
return 0;
}
int main2()
{
int m,n,p,q;int **a,**b,**c;
cout<<"nhap lan luot he so m,n cua matrix A"<<endl;
cin>>m;cin>>n;
cout<<"nhap lan luot he so p,q cua matrix B"<<endl;
cin>>p;cin>>q;
if(p!=n)
cout<<"matrix A ko the nhan voi matrix B..."<<endl;
else
{
a=new int*[m];b=new int*[p];c=new int*[m];
for(int i=0;i<m;i++)
{
a=new int[n];
c=new int[q];
}
for(int j=0;j<p;j++)
b[j]=new int[q];
cout<<"nhap cac phan tu cua matrix A:"<<endl;
nhap(a,m,n);
cout<<"nhap cac phan tu cua matrix B:"<<endl;
nhap(b,p,q);
cout<<"view matrix A:"<<endl;
display(a,m,n);
cout<<"view matrix B:"<<endl;
display(b,p,q);
for(int i=0;i<m;i++)
for(int j=0;j<q;j++)
{
c[j]=0;
for(int k=0;k<n;k++)
c[j]+=a[k]*b[k][j];
}
cout<<"tich matrix A nhan matrix B la:"<<endl;
display(c,m,q);
deletematrix(a,m);
deletematrix(b,p);
deletematrix(c,m);
}
}
int main()
{
int t;char x;
tiep: cout<<"lua chon"<<endl;
cout<<"1.cong 2 matrix"<<endl;
cout<<"2.nhan 2 matrix"<<endl;
cout<<"su lua chon cua ban:";
cin>>t;
switch(t)
{
case 1:main1();
break;
case 2:main2();
break;
default:cout<<"NHAP LOI!!!"<<endl;
}
cout<<"ban co muon tiep tuc ko? Y/N?"<<endl;
cin>>x;
if(x=='y'||x=='Y')
goto tiep;
return 0;
}
mọi người hãy để ý nếu như mình xây dựng hàm nhân matrix như sau thì lại ko dùng đc thoát khỏi hàm mọi giá trị của matrix C lại trở lại như cũ trong khi tham số truyền vào rõ ràng là địa chỉ
void nhanmatrix(float **a,float **b,float **c,int m,int n,int q)
{
for(int i=0;i<m;i++)
{
for(int j=0;j<q;j++)
{
c[j]=0;
for(int k=0;k<n;k++)
c[j]=a[k]*b[k][q]+c[j];
}
}
}
so sánh hàm nhân matrix này ko khác gì với hàm cộng matrix nhưng tại sao ko sử dụng đc???
tiếp theo mình hỏi nếu như mình sd turbo C++ thì ko cần cấp phát bộ nhớ mà vẫn sd đc con trỏ trỏ tới con trỏ (**a) mà ko cần cấp phát bộ nhớ (tức là ko cấp phát mà vẫn dùng đc a[j]), trong ko nếu mình dùng g++ để complie thì lại phải cấp phát mới dùng đc thế là sao? có phải đó là sự khác biệt giữa turbo C++ với g++ ko??
Và nếu như xài turbo C++ mình xây dựng hàm cấp phát bộ nhớ gắn liền với việc nhập số như hàm dưới đây thì sao ko dùng đc mà phải tách chúng ra làm 2 hàm ,1 hàm cấp phát , 1 hàm nhập thì mới dùng đc (việc này chưa thử với g++)
Code:
như vậy là sao ai giải thích giúp mình vớivoid nhap(int **a,int m,int n)
{
a=new int *[m];
for(int i=0;i<m;i++)
{a=new int [n];
for(int j=0;j<n;j++)
{
cout<<"phan tu ["<<i<<"]["<<j<<"]=";
cin>>a[j];
}
}
}