Sie sind auf Seite 1von 5

/*

* Rational.h
*
* Created on: Nov 16, 2016
*
* header file for Rational class
*/

#ifndef RATIONAL_H_
#define RATIONAL_H_

//Rational class definition

class Rational {
public:
Rational();
Rational ( int n = 0, int d = 1); //default case
int adding( const Rational& a); // a) adding two rational numbers
int subtracting(const Rational& s); // b) subtracting two rational numbers
int multiplying(const Rational& m); // c) multiplying two rational numbers
int dividing(const Rational& b); // d) dividing two rational numbers
void printRational(); // e) printing in form of a/b, where a is numerator
and b is denominator
void printFloat(); // f) printing in floating point format

private:
int numerator;
int denominator;
void reduce();
};
#endif /* RATIONAL_H_ */

/*
* Rational.cpp
*
* Created on: Nov 16, 2016
*
*/

#include <iostream>
#include <iomanip>
#include "Rational.h"
using namespace std;

Rational::Rational(int n, int d) {
numerator = d<0 ? -n:n; // to make sure that if a negative number is
entered, it will be in the numerator
denominator = d<0 ? -d:n;
reduce();
}
Rational Rational::adding ( const Rational& a) {
Rational r;

r.numerator = a.numerator * denominator + a.denominator * numerator;


r.numerator = a.denominator * denominator;
r.reduce();
return r;
}

Rational Rational::subtracting (const Rational& s) {


Rational r;

r.numerator = s.numerator * denominator - s.denominator * numerator;


r.numerator = s.denominator * denominator;
r.reduce();

return r;
}

Rational Rational::multiplying (const Rational& m){


Rational r;

r.numerator = m.numerator * numerator;


r.numerator = m.denominator * denominator;
if (denominator != 0)
r.reduce();

return r;
}

Rational Rational::dividing (const Rational& b){


Rational r;

r.numerator = b.denominator * numerator;


r.numerator = b.numerator * denominator;
if (denominator != 0)
r.reduce();

return r;

void Rational::printRational(){
if (denominator = 0)
cout<< "Error" <<endl;
else{
cout << numerator << "/" << denominator << endl;
}
}

void Rational::printFloat(){

if (denominator = 0)
cout << "Error" <<endl;
else
cout << numerator / denominator << "." << numerator%denominator <<endl;
//float(numerator) float(denominator) ????????

void Rational::reduce(){
int n = numerator < 0 ? -numerator : numerator;
int d = denominator;
int largest = n > d ? n : d;

int gcd = 0;

for (int i = largest; i>= 2; i--)


if(numerator % i == 0 && denominator % i == 0){
gcd = i;
break;
}
if (gcd != 0) {
numerator /= gcd;
denominator /= gcd;
}
}

/*
* assign8.cpp
*
* Created on: Nov 16, 2016
*
*
* program to test Rational class
*
* ex. 9.15
*/

#include <iostream>
#include "Rational.h"
#include "Rational.cpp"
using namespace std;

int main(){
Rational x(-3/6), y(-25/40), z, w(9);

//adding
x.printRational();
cout<< " + ";
y.printRational();
z = x.adding(y);
cout<< " = ";
z.printRational();
cout << endl;
z.printRational();
cout<< " = ";
z.printFloat();
cout << endl;

// subtracting
x.printRational();
cout<< " - ";
y.printRational();
z = x.subtracting(y);
cout<< " = ";
z.printRational();
cout << endl;
z.printRational();
cout<< " = ";
z.printFloat();
cout << endl;

// multiplying
x.printRational();
cout<< " * ";
y.printRational();
z = x.multiplying(y);
cout<< " = ";
z.printRational();
cout << endl;
z.printRational();
cout<< " = ";
z.printFloat();
cout << endl;

//dividing
x.printRational();
cout<< " / ";
y.printRational();
z = x.adding(y);
cout<< " = ";
z.printRational();
cout << endl;
z.printRational();
cout<< " = ";
z.printFloat();
cout << endl;
}

class rational
{
private int nr, nu;

public rational() { nr = 0; nu = 1; }
public rational(int a, int b)
{ nr = a; nu = b; simplificare(); }

public void afisare()


{
if (nu == 1) Console.Write(nr);
else Console.Write(nr + "/" + nu);
}

public override string ToString()


{
if (nu == 1) return nr.ToString();
else return nr + "/" + nu;
}

public static rational operator +(rational a, rational b)


{return new rational(a.nr*b.nu+a.nu*b.nr,a.nu*b.nu);}

public static rational operator -(rational a, rational b)


{ return new rational(a.nr * b.nu - a.nu * b.nr, a.nu * b.nu); }

public static rational operator *(rational a, rational b)


{ return new rational(a.nr * b.nr , a.nu * b.nu); }
public static rational operator /(rational a, rational b)
{ return new rational(a.nr * b.nu , a.nu * b.nr); }

public static bool operator <(rational a, rational b)


{ return a.nr * b.nu < a.nu * b.nr; }

public static bool operator >(rational a, rational b)


{ return a.nr * b.nu > a.nu * b.nr; }

public static bool operator <=(rational a, rational b)


{ return !(a > b); }

public static bool operator >=(rational a, rational b)


{ return !(a < b); }

public static bool operator ==(rational a, rational b)


{ return a.nr * b.nu == a.nu * b.nr; }

public static bool operator !=(rational a, rational b)


{ return !(a == b); }

public static int comparare(rational a, rational b)


{
if (a < b) return -1;
else if (a == b) return 0;
else return 1;
}

public override bool Equals(object obj)


{
return base.Equals(obj);
}

public override int GetHashCode()


{
return base.GetHashCode();
}

private int cmmdc(int a, int b)


{
while (b != 0)
{
int r = a % b; a = b; b = r;
}
return a;
}

private void simplificare()


{
int c = cmmdc(Math.Abs(nr), Math.Abs(nu));
nr = nr / c; nu = nu / c;
if (nr * nu < 0)
{
nr = -Math.Abs(nr); nu = Math.Abs(nu);
}
}
}

Das könnte Ihnen auch gefallen