Fraction program

Collapse
X
 
  • Time
  • Show
Clear All
new posts
  • d0ugg
    New Member
    • Jan 2007
    • 41

    Fraction program

    Hi,

    I'm doing a FRACTION program for one of my Programming classes and I'm getting some errors that I can't figure it out.

    Here is the Assignment:

    1. Convert the fraction structure into a class named fraction declared in a file named
    fraction.h, with two private data members: an int numerator and an int denominator.
    2. Convert the four arithmetic functions named add, sub, mult, and div into public
    member functions, each accepting a single fraction object passed by value. Keep the
    functions in fraction.cpp
    3. Create a public constructor
    a. taking two integer parameters, the numerator first, followed by the denominator
    b. use a default argument to set the denominator to 1 if a denominator is not
    specified (remember that it is possible to convert an integer n to the fraction n/1).
    c. use the initializer list notation
    d. make the constructor inline, defined within the class body.
    e. move the “reduce to lowest terms” operation to the end of the constructor
    4. Make the print function inline but define the body outside and below the class
    declaration using the inline keyword (this syntax will be demonstrated in class).
    5. Convert your calc.cpp program to use the fraction class.

    --------------------------------------------

    Here is my CODE

    Code:
    //fraction.h
    class fraction
    {
    private:
    	int numerator;
    	int denominator;
    public:
    	fraction fraction::mult(fraction f1, fraction f2);
    	fraction fraction::add(fraction f1, fraction f2);
    	fraction fraction::sub(fraction f1, fraction f2);
    	fraction fraction::div(fraction f1, fraction f2);
    	void fraction::read(fraction* f);
    	void fraction::print(fraction f10);
    	int gcd (int u, int v);
    	
    	fraction() : fraction f1(0), fraction f2(1)
    	{
    	int gcd (int u, int v)
    	{
    		u = (u < 0) ? -u : u;
    		v = (v < 0) ? -v : v;
    
    	while (u > 0)
    	{
    		if (u < v)
    	{
    		int t = u;
    		u = v;
    		v = t;
    	}
    		u -= v;
    	}
    }
    return v;
    };
    
    ////////////////
    //fraction.cpp
    
    
    #include <iostream>
    #include <string>
    #include "fraction.h"
    
    
    fraction fraction::mult(fraction f1, fraction f2)
    {
    	fraction f10;
    	int common;
    
    	f10.numerator = (f1.numerator * f2.numerator);
    	f10.denominator = (f1.denominator * f2.denominator);
    
    	common = gcd(f10.numerator, f10.denominator);
    	f10.numerator /= common;
    	f10.denominator /= common;
    
    	return f10;
    }
    
    fraction fraction::add(fraction f1, fraction f2)
    {
    	fraction f10;
    	int common;
    
    	
    	f10.numerator = (f1.numerator * f2.denominator + f1.denominator * f2.numerator);
    	f10.denominator = (f1.denominator * f2.denominator);
    
    	common = gcd(f10.numerator, f10.denominator);
    	f10.numerator /= common;
    	f10.denominator /= common;
    	
    	return f10;
    }
    
    fraction fraction::sub(fraction f1, fraction f2)
    {
    	fraction f10;
    	int common;
    
    
    	f10.numerator = (f1.numerator * f2.denominator - f1.denominator * f2.numerator);
    	f10.denominator = (f1.denominator * f2.denominator);
    
    	common = gcd(f10.numerator, f10.denominator);
    	f10.numerator /= common;
    	f10.denominator /= common;
    
    	return f10;
    }
    
    fraction fraction::div(fraction f1, fraction f2)
    {
    	fraction f10;
    	
    	int common;
    	
    	f10.numerator = (f1.numerator * f2.denominator);
    	f10.denominator = (f1.denominator * f2.numerator);
    
    	common = gcd(f10.numerator, f10.denominator);
    	f10.numerator /= common;
    	f10.denominator /= common;
    
    	return f10;
    }
    
    void read(fraction* f)
    {
    
    	cout << "Enter your numerator: ";
    	cin >> f->numerator;
    	cout << "Enter your denominator: ";
    	cin >> f->denominator;
    
    }
    
    void print(fraction f10)
    {	
    	cout << f10.numerator << "/" << f10.denominator << endl;
    }
    
    /////////////////
    
    //calc.cpp
    
    #include <iostream>
    #include <string>
    #include "fraction.h" 
    
    
    int main() 
    { 
    	fraction f1;
    	fraction f2;
    	fraction answer;
    	fraction f10;
    
    	char symbol = ' ';
    	string nome;
    
       while (true)
       { 
    	cout << "A\tADD\n";
    	cout << "S\tSUBTRACT\n";
    	cout << "M\tMULTIPLY\n";
    	cout << "D\tDIVIDE\n";
    	cout << "E\tEXIT\n";
    	cout << "What operation do you want to use?: ";
    		cin >> symbol;
    		if (symbol == 'e' || symbol == 'E')
    			exit(0);
    
         switch (symbol) 
         { 
          case 'A': 
    		read(&f1);
    		read(&f2);
    		answer = add(f1, f2);
    		print(answer);
            nome = "sum"; 
            break; 
         case 'S': 
    		read(&f1);
    		read(&f2);
    		answer = sub(f1, f2);
    		print(answer);
            nome= "difference"; 
            break; 
         case 'M': 
    		read(&f1);
    		read(&f2);
    		answer = mult(f1, f2);
    		print(answer);
    		nome = "product";
            break; 
    	case 'D': 
    		read(&f1);
    		read(&f2);
    		answer = div(f1, f2);
    		print(answer);
            nome = "quotient";
            break; 
    
          } 
    
    	void print(fraction f10);
     
       }
    
       return 0;
    }
    //////////
    Here are the Compile ERRORS:

    c:\documentos\p rogramas\class fraction\class fraction\class fraction\calc.c pp(70) : fatal error C1075: end of file found before the left brace '{' at 'c:\documentos\ programas\
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.h(7) : see declaration of 'fraction::mult '
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.cpp(24) : error C2535: 'fraction fraction::add(f raction,fractio n)' : member function already defined or declared
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.h(8) : see declaration of 'fraction::add'
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.cpp(40) : error C2535: 'fraction fraction::sub(f raction,fractio n)' : member function already defined or declared
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.h(9) : see declaration of 'fraction::sub'
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.cpp(56) : error C2535: 'fraction fraction::div(f raction,fractio n)' : member function already defined or declared
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.h(10) : see declaration of 'fraction::div'
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.cpp(72) : error C2535: 'void fraction::read( fraction *)' : member function already defined or declared
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.h(11) : see declaration of 'fraction::read '
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.cpp(82) : error C2535: 'void fraction::print (fraction)' : member function already defined or declared
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.h(12) : see declaration of 'fraction::prin t'
    c:\documentos\p rogramas\class fraction\class fraction\class fraction\fracti on.cpp(85) : fatal error C1075: end of file found before the left brace '{' at 'c:\documentos\ programas\class fraction\class fraction\class fraction\fracti on.h(2)' was matched



    Thank you very much

    Doug
  • Ganon11
    Recognized Expert Specialist
    • Oct 2006
    • 3651

    #2
    At least one problem is being caused by a mismatching of braces in your class declaration. Look over that area - I think you have left the constructor open, and you are missing a brace to end the gcd function.

    Comment

    • r035198x
      MVP
      • Sep 2006
      • 13225

      #3
      Read the error messages. They are usually very good hints.

      Thread renamed.

      Comment

      Working...