Need help with fraction calculator

blamp -1 Tallied Votes 511 Views Share

I have add the two functions the add and subtract I have to now add the multiply and divsion functions can someone help

Ancient Dragon commented: This is not a code snippet, but a normal c++ question. -5
[code]
#include<iostream>
using namespace std;

class fractions
{
public:
	fractions fractions :: operator+(fractions f);
	fractions addFraction(fractions);
	fractions subFraction(fractions);
	fractions();
	fractions(int, int);
	void printFraction();
private:
	int numerator;
	int denominator;
};

//method to add two fractions
fractions fractions :: addFraction(fractions f)
{
	fractions temp;
	temp.denominator = denominator * f.denominator;
	temp.numerator = numerator * f.denominator + denominator * f.numerator;
	return temp;
}
//method to subtract two fractions
fractions fractions :: subFraction(fractions f)
{
    fractions temp;
    temp.denominator = denominator * f.denominator;
    temp.numerator = numerator * f.denominator - denominator * f.numerator;
    return temp;
}

//method to add two fractions
fractions fractions :: operator+(fractions f)
{
	fractions temp;
	temp.denominator = denominator * f.denominator;
	temp.numerator = numerator * f.denominator + denominator * f.numerator;
	return temp;
}
//method to subtract two fractions
fractions fractions :: operator+(fractions f)
{
	fractions temp;
	temp.denominator = denominator * f.denominator;
	temp.numerator = numerator * f.denominator - denominator * f.numerator;
	return temp;
}

fractions::fractions()
{
	numerator = 0;
	denominator = 1;
}

fractions::fractions(int n, int d)
{
	numerator = n;
	denominator = d;
}

void fractions::printFraction()
{
	cout <<numerator<<'/'<<denominator<<endl;
}

void getFraction(int &numerator, int &denominator)
{
    cout<<"Please enter numerator";
	cin >>numerator;
	cout<<"Please enter denominator";
	cin >>denominator;
}

int main()
{
	int n,d;
	fractions f1(1,2);
	fractions f2(3,4);
	fractions f3;
	fractions f4;
    getfraction(n,d);
	fractions f5(n,d);
	

	f3 = f1.addFraction(f2);
	f4 = f3 + f1;
	f3.printFraction();
	f4.printFraction();
	system("pause");
	

}
[/code]

Dani AI

Generated

A few quick fixes before adding multiply/divide: your thread shows two definitions of operator+ (the second looks like subtraction but is still operator+), main calls getfraction (wrong case), and none of the results are reduced or guarded against zero denominators. Prefer passing const fractions& to operators and mark them const so expressions with temporaries work. Below is a compact, safe implementation you can drop into your .cpp to add multiplication and division; it reduces results and normalizes the sign. Division checks for division-by-zero and returns 0/1 with an error message.

// helper (place before member definitions)
static int gcd(int a, int b) {
    if (a == 0 && b == 0) return 1;
    if (a < 0) a = -a;
    if (b < 0) b = -b;
    while (b != 0) { int t = a % b; a = b; b = t; }
    return a;
}

void fractions::reduce() {
    if (denominator == 0) { cerr << "Invalid denominator; set to 1\n"; denominator = 1; }
    int g = gcd(numerator, denominator);
    numerator /= g; denominator /= g;
    if (denominator < 0) { numerator = -numerator; denominator = -denominator; }
}

fractions fractions::multiplyFraction(const fractions& f) const {
    fractions temp;
    temp.numerator = numerator * f.numerator;
    temp.denominator = denominator * f.denominator;
    temp.reduce();
    return temp;
}

fractions fractions::divideFraction(const fractions& f) const {
    if (f.numerator == 0) { cerr << "Error: division by zero fraction\n"; return fractions(0,1); }
    fractions temp;
    temp.numerator = numerator * f.denominator;
    temp.denominator = denominator * f.numerator;
    temp.reduce();
    return temp;
}

fractions fractions::operator*(const fractions& f) const { return multiplyFraction(f); }
fractions fractions::operator/(const fractions& f) const { return divideFraction(f); }

Integration notes: add prototypes for multiplyFraction, divideFraction, operator*, operator/, and reduce() to your class (use const fractions& and mark as const). Update the constructor to handle d == 0 and call reduce(). Fix the getFraction call in main (case-sensitive), and remove system("pause") for portability. Test edge cases (zero numerator, negative denominators, dividing by 0/1).

— thanks for the links; the snippet above focuses on eliminating the compile/runtime pitfalls in the original post so you can add multiply/divide cleanly.

irum.nageen.3 -6 Newbie Poster
Be a part of the DaniWeb community

We're a friendly, industry-focused community of developers, IT pros, digital marketers, and technology enthusiasts meeting, networking, learning, and sharing knowledge.