Click here to Skip to main content
15,892,809 members
Please Sign up or sign in to vote.
1.00/5 (1 vote)
See more:
C++
<pre>#include <iostream>
using namespace std;

class fraction
{
 long num;
 long den;

 public:
 fraction();
 fraction(long,long);
 fraction(const fraction &);
~fraction();

long getNum (void)const;
long getDen (void)const;
void print  (void);
fraction inc ();

friend fraction add (const fraction &f1, const fraction &f2);
friend fraction sub (const fraction &f1, const fraction &f2);
friend fraction mult(const fraction &f1, const fraction &f2);
friend fraction div (const fraction &f1, const fraction &f2);
};
fraction::fraction( )
{
  num = 0L ;
  den = 1L ;
}
fraction::fraction(long l_num,long l_den)
{
  num = l_num ;
  den = l_den ;
}
fraction::fraction(const fraction& f)
{
    num=f.num;
    den=f.den;
}
fraction:: ~fraction ( )
{
  //cout<<"Destructor"<<endl;
}
long fraction::getNum (void) const
{
  return num ;
}
long fraction::getDen (void) const
{
  return den ;
}
void fraction:: print (void)
{
    if(den==0)
       den=1L;
    cout<<num<<"/"<<den <<endl;
}
fraction fraction:: inc ( )
{
// long num ;
// long den ;
 long num = (num) + (den);
 long den = (den);
return fraction(num, den);
}
fraction add ( const fraction &f1,  const fraction &f2)
{
  long num = (f1.getNum ( ) * f2.getDen ( )) + ( f1.getDen ( ) * f2.getNum ( ) );
  long den = (f1.getDen ( ) * f2.getDen ( ));
  return fraction(num, den);
}
fraction sub ( const fraction &f1,  const fraction &f2)
{
  long num = (f1.getNum ( ) * f2.getDen ( )) - ( f1.getDen ( ) * f2.getNum ( ) );
  long den = (f1.getDen ( ) * f2.getDen ( ));
  return fraction(num, den);
}
fraction mult ( const fraction &f1,  const fraction &f2)
{
 long num = (f1.getNum ( ) * f2.getNum ( ));
 long den = (f1.getDen ( ) * f2.getDen ( ));
 return fraction(num, den);
}
fraction div  ( const fraction &f1,  const fraction &f2)
{
long num = (f1.getNum ( ) * f2.getDen ( ));
long den = (f1.getDen ( ) * f2.getNum ( ));
return fraction(num, den);
}

int main()
{
fraction f1,f2(5L,0L);
fraction f3(f2);
f1.print();
f2.print();
f3.print();

f3 = add(f3 , fraction (-7,8) );
f1 = add(f2,f3);
f1.print ();

f1 = sub(f2 , f3);
f1.print();

f1 = mult(f2, f3);
f1.print();

f1.inc().inc().print();
f1=div(f2 , f3 );
f1.print();

return 0;
}
<b

What I have tried:

I am getting wrong output on 7th output.I should get 181/8. but I am getting 7012088/165. I think it is due to uninitialized parameters, but still could not figure out. Please advice. Thank you
Posted
Updated 16-Mar-17 7:35am
Comments
Richard MacCutchan 16-Mar-17 13:22pm    
Which line is 7th output?
Mwater07 16-Mar-17 13:25pm    
it is due to inc function implemantation. It is called on line#110 twice
Richard MacCutchan 16-Mar-17 13:39pm    
And you really think we can guess where line#110 is.
[no name] 16-Mar-17 13:33pm    
And you couldn't find the problem using the debugger?
Mwater07 16-Mar-17 13:38pm    
What kind of debugger would you recommend?

1 solution

I get:
0/1                                                                                                                                                                                                  
5/1                                                                                                                                                                                                  
5/1                                                                                                                                                                                                  
73/8                                                                                                                                                                                                 
7/8                                                                                                                                                                                                  
165/8                                                                                                                                                                                                
8/1                                                                                                                                                                                                  
40/33
So the seventh output would be 8/1

If you look at the inc function, it's pretty obvious:
C++
fraction fraction:: inc ( )
{
// long num ;
// long den ;
 long num = (num) + (den);
 long den = (den);
return fraction(num, den);
}
Your two new local variables mask the class level variables so when you use the values you get local, uninitialized values instead of the class level ones.
Try this:
C++
fraction fraction:: inc ( )
{
 long numX = (num) + (den);
 long denX = (den);
return fraction(numX, denX);
}


And it'll work.
 
Share this answer
 
Comments
Mwater07 16-Mar-17 13:39pm    
Yes, it worked.
Thank you
CPallini 16-Mar-17 17:12pm    
5.

This content, along with any associated source code and files, is licensed under The Code Project Open License (CPOL)



CodeProject, 20 Bay Street, 11th Floor Toronto, Ontario, Canada M5J 2N8 +1 (416) 849-8900