PDA

View Full Version : سوال: مقدار دهی تابع پویا با استفاده از کلاس ( رفع اشکل + کمک )



MohammadReza.OmidAllah
پنج شنبه 12 خرداد 1390, 02:41 صبح
سلام من این یه خطا رو هر کاری میکنم درست نمیشه فردا 8 صبح هم باید تحویل بدم اینو http://forum.majidonline.com/majidonline/smiley_new/majidonline_cry.gif میشه اگه کسی هست اینجا کمک کنه ؟

سوال: آرايه ي يک بعدي پويا با استفاده از کلاس تعريف نموده به گونه اي که شامل سازنده معمولي ، سازنده ي کپي ، == ، = ، =+ ، * باشد


#include<iostream.h>

class matrix{

friend matrix operator *(matrix &r,matrix &r2);
friend int operator ==(matrix &r,matrix &r2);
public :
matrix (int a=5) {
size=a;
arr=new int[size];
}
void setsize(int s){size=s;}
int getsize(){return size;}
void st() {
cout<<"plz enter numbers: \n";
for(int i=0;i<size;i++)
{ cout<<i+1<<": \t";cin>>arr[i];}
}
matrix operator ++(){
for(int i=0;i<size;i++)
arr[i]++;
return *this;
}
matrix operator ++(int){
matrix temp(size);
temp=*this;
for(int i=0;i<size;i++)
arr[i]++;
return temp;
}
matrix operator =(const matrix &r){
size=r.size;
for(int i=0;i<size;i++)
arr[i]=r.arr[i];
return *this;
}
matrix & operator +=(const matrix & r){
for(int i=0;i<size;i++)
arr[i]=arr[i]+r.arr[i];
return *this;
}
void show_arr(){
cout<<" view inserted numbers in matrix: \n";
for(int i=0;i<size;i++)
{cout<<arr[i]<<" ";}
}
private :
int size;
int * arr;
};

matrix mat1,mat2,mat3;
bool cr_obj(){
int obj_n,n;
cout<<"Select Object you want to create ( 1 || 2 || 3 ): \n";
cin>>obj_n;
if(obj_n<1 || obj_n>3)return false;
cout<<"select size for matrix: \n";
cin>>n;
switch (obj_n){
case 1:mat1.setsize(n);
break;
case 2:mat2.setsize(n);
break;
case 3:mat3.setsize(n);
break;
}
}
void lod_menu(){
cout<<"\n\t Matrix Class \n ";
cout<<"\n";
cout<<"0.\t"<<"* set size of a matrix"<<endl;
cout<<"1.\t"<<"* set values for a matrix"<<endl;
cout<<"2.\t"<<"* show values of a matrix"<<endl;
cout<<"3.\t"<<"* compare two matrixes "<<endl;
cout<<"4.\t"<<"* beat two matrixes "<<endl;
cout<<"5.\t"<<"* sum two matrixes "<<endl;
cout<<"6.\t"<<"* ++ matrixes "<<endl;
cout<<"7.\t"<<"* End "<<endl;
cout<<"\n";
}
void compair(){
int n;
cout<<"select matrix to compare(1,2 || 2,3 || 1,3)";
cin>>n;
if(n==1)
if((mat1==mat2)==1)cout<<" matris 1 == matrix 2 \n";
else cout<<" matris 1 != matrix 2 \n";
else if(n==2)
if((mat2==mat3)==1)cout<<" matris 2 ==matrix 3 \n";
else cout<<" matris 2 != matrix 3 \n";
else
if((mat1==mat3)==1)cout<<" matris 1 ==matrix 3 \n";
else cout<<" matris 1 != matrix 3 \n";
}
void ad(){
int n;
cout<<"select matrix to add(1 || 2)";
cin>>n;
if(n==1)
mat3+=mat1;
else
mat3+=mat2;
}
bool show(){
int mat;
cout<<"select 1 || 2 || 3 ? \n";
cin>>mat;
if(mat<1 || mat>3)return false;
switch (mat ){
case 1:mat1.show_arr();
break;
case 2:mat2.show_arr();
break;
case 3:mat3.show_arr();
break;
default:cout<<"wrong number!\n";
break;
}
}
void star(){
cout<<" mat3=mat1*mat2 \n";
mat3=mat1*mat2;
}
bool st_values(){
int mat;
cout<<"select 1 || 2 || 3 ? \n";
cin>>mat;
if(mat<1 || mat>3)return false;
switch (mat ){
case 1:mat1.st();
break;
case 2:mat2.st();
break;
case 3:mat3.st();
break;
default:cout<<"wrong number!\n";
break;
}
}
void plus(){
int n;
cout<<"select matrix to compare( 1 || 2 || 3 )";
cin>>n;
if(n==1)
mat1++;
else if(n==2)
mat2++;
else
mat3++;
}

/////////////////////////////////////

int main(){
int selectuser=0;
int x;
while(1){
lod_menu();
cin>>selectuser;
if(selectuser<0 || selectuser>6)exit(0);
switch (selectuser){
case 0:cr_obj();
break;
case 1:st_values();
break;
case 3:compair();
break;
case 2:show();
break;
case 4:star();
break;
case 5:ad();
break;
case 6:plus();
break;
default: exit(0);
}
}
return 0;
}

//////////////////////////////////////////////


matrix operator *( matrix &r,matrix &r2){
int min=r.size;
if(r2.size<r.size)min=r2.size;
matrix z(min);
for(int i=0;i<min;i++)
z.arr[i]=r.arr[i]*r2.arr[i];
return z;
}
int operator ==(matrix r1,matrix r2){
if(r1.size != r2.size)return 0;
for(int i=0;i<r1.size;i++)
if(r1.arr[i]!=r2.arr[i])return 0;
return 1;
}