Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <vector>
- #include <string>
- using namespace std;
- class Rational {
- private:
- int numerator;
- int denominator;
- public:
- Rational();
- explicit Rational(int);
- Rational(int, int);
- const Rational add(const Rational &) const;
- const Rational subtract(const Rational &) const;
- const Rational multiply(const Rational &) const;
- const Rational divide(const Rational &) const;
- void simplify();
- void display() const;
- private:
- int gcd(int, int) const;
- };
- Rational::Rational(){
- this->denominator = 1;
- this->numerator = 0;
- }
- Rational::Rational(int n, int d){
- this->numerator = n;
- this->denominator = d;
- }
- Rational::Rational(int n){
- this->numerator = n;
- this->denominator = 1;
- }
- const Rational Rational::add(const Rational &temp) const{
- Rational *r = new Rational();
- r->numerator = (this->numerator*temp.denominator + this->denominator*temp.numerator);
- r->denominator = (this->denominator * temp.denominator);
- return *r;
- }
- const Rational Rational::subtract(const Rational &temp) const {
- Rational *r = new Rational();
- r->numerator = (this->numerator*temp.denominator - this->denominator*temp.numerator);
- r->denominator = (this->denominator * temp.denominator);
- return *r;
- }
- const Rational Rational::multiply(const Rational &temp) const{
- Rational *r = new Rational();
- r->numerator = (this->numerator*temp.numerator);
- r->denominator = (this->denominator * temp.denominator);
- return *r;
- }
- const Rational Rational::divide(const Rational &temp) const {
- Rational *r = new Rational();
- r->numerator = (this->numerator*temp.denominator);
- r->denominator = (this->denominator * temp.numerator);
- return *r;
- }
- int Rational::gcd(int n, int d) const{
- int temp;
- while (d!= 0) {
- temp = n;
- n = d;
- d = temp % d;
- }
- return n;
- }
- void Rational::simplify(){
- this->numerator = this->numerator / gcd(numerator,denominator);
- this->denominator = this->denominator / gcd(numerator,denominator);
- return;
- }
- void Rational::display() const{
- cout << this->numerator <<" / "<< this->denominator;
- }
- Rational getRational();
- void displayResult(const string &, const Rational &, const Rational&, const Rational&);
- int main() {
- Rational A, B, result;
- int choice;
- cout << "Enter Rational A:" << endl;
- A = getRational();
- cout << endl;
- cout << "Enter Rational B:" << endl;
- B = getRational();
- cout << endl;
- cout << "Enter Operation (1 - 4):" << endl
- << "1 - Addition (A + B)" << endl
- << "2 - Subtraction (A - B)" << endl
- << "3 - Multiplication (A * B)" << endl
- << "4 - Division (A / B)" << endl
- << "5 - Simplify A" << endl;
- cin >> choice;
- cout << endl;
- if (choice == 1) {
- result = A.add(B);
- displayResult("+", A, B, result);
- } else if (choice == 2) {
- result = A.subtract(B);
- displayResult("-", A, B, result);
- } else if (choice == 3) {
- result = A.multiply(B);
- displayResult("*", A, B, result);
- } else if (choice == 4) {
- result = A.divide(B);
- displayResult("/", A, B, result);
- } else if (choice == 5) {
- A.simplify();
- A.display();
- } else {
- cout << "Unknown Operation";
- }
- cout << endl;
- return 0;
- }
- Rational getRational() {
- int choice;
- int numer, denom;
- cout << "Which Rational constructor? (Enter 1, 2, or 3)" << endl
- << "1 - 2 parameters (numerator & denominator)" << endl
- << "2 - 1 parameter (numerator)" << endl
- << "3 - 0 parameters (default)" << endl;
- cin >> choice;
- cout << endl;
- if (choice == 1) {
- cout << "numerator? ";
- cin >> numer;
- cout << endl;
- cout << "denominator? ";
- cin >> denom;
- cout << endl;
- return Rational(numer, denom);
- } else if (choice == 2) {
- cout << "numerator? ";
- cin >> numer;
- cout << endl;
- return Rational(numer);
- } else {
- return Rational();
- }
- }
- void displayResult(const string &op, const Rational &lhs, const Rational&rhs, const Rational &result) {
- cout << "(";
- lhs.display();
- cout << ") " << op << " (";
- rhs.display();
- cout << ") = (";
- result.display();
- cout << ")";
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement