banner

[Rule] Rules  [Home] Main Forum  [Portal] Portal  
[Members] Member Listing  [Statistics] Statistics  [Search] Search  [Reading Room] Reading Room 
[Register] Register  
[Login] Loginhttp  | https  ]
 
Forum Index Thảo luận hệ điều hành Windows Thắc mắc về khai báo trong C++  XML
  [Programming]   Thắc mắc về khai báo trong C++ 02/09/2007 22:32:34 (+0700) | #1 | 82869
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
mình có 1 code sau:
Code:
#include"iostream.h"
int &ham(int &a, int b){
b +=a;
if(b>4) a++;
return a;
}
int main()
{int i=2,j=4;
cout<<"dia chi a"<<&i<<endl;
int k=ham(i,j);
k++;
cout<<i<<" "<<j<<" "<<k<<endl;
int &l=ham(i,j);
l++;
cout<<i<<" "<<j<<" "<<l<<endl;
return 0;
}

mọi người hay giải thích giúp mình với khai báo int &a là gì, và khai báo int &ham là gì, có tài liệu nào liên quan đến ko share cho mình với
thanks...
[Up] [Print Copy]
  [Question]   Thắc mắc về khai báo trong C++ 02/09/2007 23:56:49 (+0700) | #2 | 82882
[Avatar]
K4i
Moderator

Joined: 18/04/2006 09:32:13
Messages: 635
Location: Underground
Offline
[Profile] [PM]

zThienLongz wrote:
mình có 1 code sau:
Code:
#include"iostream.h"
int &ham(int &a, int b){
b +=a;
if(b>4) a++;
return a;
}
int main()
{int i=2,j=4;
cout<<"dia chi a"<<&i<<endl;
int k=ham(i,j);
k++;
cout<<i<<" "<<j<<" "<<k<<endl;
int &l=ham(i,j);
l++;
cout<<i<<" "<<j<<" "<<l<<endl;
return 0;
}

mọi người hay giải thích giúp mình với khai báo int &a là gì, và khai báo int &ham là gì, có tài liệu nào liên quan đến ko share cho mình với
thanks... 

==> một vấn đề quen thuộc: [color="red"]tham chiếu[/color].
Sống là để không chết chứ không phải để trở thành anh hùng
[Up] [Print Copy]
  [Question]   Thắc mắc về khai báo trong C++ 03/09/2007 08:45:44 (+0700) | #3 | 82978
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
Thanks về nhà lục tung chỗ sách lên thấy phần này
[Up] [Print Copy]
  [Question]   Thắc mắc về khai báo trong C++ 03/09/2007 10:01:16 (+0700) | #4 | 82999
[Avatar]
minhquan1712
Member

[Minus]    0    [Plus]
Joined: 07/09/2006 16:17:25
Messages: 240
Offline
[Profile] [PM]
tham chiếu này có liên wuan đến chương trình tự in ra chính nó đó smilie. Có ai nghiên cứu thử chưa smilie
[Up] [Print Copy]
  [Question]   Thắc mắc về khai báo trong C++ 03/09/2007 13:02:43 (+0700) | #5 | 83031
[Avatar]
Hts
Member

[Minus]    0    [Plus]
Joined: 15/12/2006 11:01:28
Messages: 193
Location: OEP
Offline
[Profile] [PM]
tham chiếu này có liên wuan đến chương trình tự in ra chính nó đó smilie. Có ai nghiên cứu thử chưa smilie 

Trong blog của giáo sư Ngô Quang Hưng cũng đã đề cập rất rõ ràng và chi tiết về vấn đề chường trình tự in ra mã nguồn của chính nó ( chứ ko phải in ra chính nó)

Mọi chi tiết khác hỏi google
[Up] [Print Copy]
  [Question]   Thắc mắc về khai báo trong C++ 03/09/2007 22:02:13 (+0700) | #6 | 83060
[Avatar]
minhquan1712
Member

[Minus]    0    [Plus]
Joined: 07/09/2006 16:17:25
Messages: 240
Offline
[Profile] [PM]

Hts wrote:
tham chiếu này có liên wuan đến chương trình tự in ra chính nó đó smilie. Có ai nghiên cứu thử chưa smilie 

Trong blog của giáo sư Ngô Quang Hưng cũng đã đề cập rất rõ ràng và chi tiết về vấn đề chường trình tự in ra mã nguồn của chính nó ( chứ ko phải in ra chính nó)

Mọi chi tiết khác hỏi google 

đó chỉ là hàm main thôi smilie. Liệu còn các function do mình tự define thì sao smilie
[Up] [Print Copy]
  [Question]   Re: Thắc mắc về khai báo trong C++ 11/09/2007 08:32:59 (+0700) | #7 | 84455
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
tiếp tục mình xin hỏi về đoạn mã này:
Code:
#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[i][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[i][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[i][j]+=b[i][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[i]=new int[n];
b[i]=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[i]=new int[n];
c[i]=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[i][j]=0;
for(int k=0;k<n;k++)
c[i][j]+=a[i][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ỉ
Code:
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[i][j]=0;
for(int k=0;k<n;k++)
c[i][j]=a[i][k]*b[k][q]+c[i][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[i][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:
void nhap(int **a,int m,int n)
{
a=new int *[m];
for(int i=0;i<m;i++)
{a[i]=new int [n];
for(int j=0;j<n;j++)
{
cout<<"phan tu ["<<i<<"]["<<j<<"]=";
cin>>a[i][j];
}
}
}

như vậy là sao ai giải thích giúp mình với
[Up] [Print Copy]
  [Question]   Re: Thắc mắc về khai báo trong C++ 11/09/2007 10:29:52 (+0700) | #8 | 84471
[Avatar]
learn2hack
Elite Member

[Minus]    0    [Plus]
Joined: 29/06/2006 16:32:37
Messages: 825
Offline
[Profile] [PM] [WWW]
Vấn đề 2: không phải là trong TC++ ko phải cấp phát bộ nhớ, mà là có thể không cấp phát để chạy. Tuy nhiên các biến con trỏ đó sẽ trỏ đến các vị trí ngẫu nhiên trong bộ nhớ mà không có kiểm soát. Nếu nó trỏ vào vùng trống thì không sao, còn trỏ vào vùng chứa dữ liệu quan trọng (của các chương trình khác đang chạy chẳng hạn), thì sẽ gây ra lỗi. Vì thế nên lúc nào cũng phải cấp phát bộ nhớ cho chúng trước khi sử dụng.

Vấn đề 1 mình thấy ko có gì, bạn có thể viết 1 chương trình nhỏ, chỉ gồm các hàm liên quan đến phép nhân và thử kiểm tra thử xem.
Blog: http://hontap.blogspot.com
Tải phần mềm miễn phí: http://www.taiphanmem.org
[Up] [Print Copy]
  [Question]   Re: Thắc mắc về khai báo trong C++ 11/09/2007 13:00:25 (+0700) | #9 | 84482
[Avatar]
zThienLongz
Member

[Minus]    0    [Plus]
Joined: 29/08/2006 10:09:05
Messages: 104
Location: World
Offline
[Profile] [PM] [WWW]
cám ơn bạn về cái vấn đề 2 cái này mình cũng nghĩ là như vậy . Còn cái vấn đề 1 thì mình làm xây dựng phép nhân matrix trong hàm main() thì đúng rồi còn việc xây dựng 1 hàm con thì ko làm đc như đã nói ở trên
[Up] [Print Copy]
[digg] [delicious] [google] [yahoo] [technorati] [reddit] [stumbleupon]
Go to: 
 Users currently in here 
1 Anonymous

Powered by JForum - Extended by HVAOnline
 hvaonline.net  |  hvaforum.net  |  hvazone.net  |  hvanews.net  |  vnhacker.org
1999 - 2013 © v2012|0504|218|