Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- #include <cmath>
- //Euklides
- int NWD(int a, int b)
- {
- while(a!=b)
- if(a>b)
- a-=b; //lub a = a - b;
- else
- b-=a; //lub b = b-a
- return a; // lub b - obie zmienne przechowują wynik NWD(a,b)
- }
- using namespace std;
- class Fraction {
- private:
- int _a;
- int _b;
- public:
- Fraction(int a, int b){
- int dzielnik = NWD(abs(a), abs(b));
- this->_a = a/dzielnik;
- this->_b = b/dzielnik;
- }
- int getNumerator(){
- return this->_a;
- }
- int getDenominator(){
- return this->_b;
- }
- double getValue(){
- double wartosc = (double)_a/(double)_b;
- }
- Fraction & operator+ (Fraction &fraction){
- //rozszerzenie ułamka pierwszego
- int nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
- int nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
- //rozszerzenie ułamka drugiego
- int nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
- int nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
- //nowy ulamek
- int nowy_licznik = nowy_licznik_pierwszego + nowy_licznik_drugiego;
- int nowy_mianownik = nowy_mianownik_pierwszego;
- //skracanie ułamka
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- Fraction *nowy_fraction = new Fraction(nowy_licznik, nowy_mianownik);
- return *nowy_fraction;
- }
- Fraction &operator-(Fraction &fraction){
- //rozszerzenie ułamka pierwszego
- int nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
- int nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
- //rozszerzenie ułamka drugiego
- int nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
- int nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
- //nowy ulamek
- int nowy_licznik = nowy_licznik_pierwszego - nowy_licznik_drugiego;
- int nowy_mianownik = nowy_mianownik_pierwszego;
- //skracanie ułamka
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- return *new Fraction(nowy_licznik, nowy_mianownik);
- }
- Fraction &operator*(Fraction &fraction){
- int nowy_licznik = this->getNumerator() * fraction.getNumerator();
- int nowy_mianownik = this->getDenominator() * fraction.getDenominator();
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- return *new Fraction(nowy_licznik, nowy_mianownik);
- }
- Fraction &operator/(Fraction &fraction){
- int nowy_licznik = this->getNumerator() * fraction.getDenominator();
- int nowy_mianownik = this->getDenominator() * fraction.getNumerator();
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- return *new Fraction(nowy_licznik, nowy_mianownik);
- }
- Fraction& operator+=(Fraction &fraction){
- //rozszerzenie ułamka pierwszego
- double nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
- double nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
- //rozszerzenie ułamka drugiego
- double nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
- double nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
- //nowy ulamek
- int nowy_licznik = nowy_licznik_pierwszego + nowy_licznik_drugiego;
- int nowy_mianownik = nowy_mianownik_pierwszego;
- //skracanie ułamka
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- _a = nowy_licznik;
- _b = nowy_mianownik;
- return *this;
- }
- Fraction& operator-=(Fraction &fraction){
- //rozszerzenie ułamka pierwszego
- double nowy_licznik_pierwszego = this->getNumerator() * fraction.getDenominator();
- double nowy_mianownik_pierwszego = this->getDenominator() * fraction.getDenominator();
- //rozszerzenie ułamka drugiego
- double nowy_licznik_drugiego = fraction.getNumerator() * this->getDenominator();
- double nowy_mianownik_durgiego = fraction.getDenominator() * this->getDenominator();
- //nowy ulamek
- int nowy_licznik = nowy_licznik_pierwszego - nowy_licznik_drugiego;
- int nowy_mianownik = nowy_mianownik_pierwszego;
- //skracanie ułamka
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- _a = nowy_licznik;
- _b = nowy_mianownik;
- return *this;
- }
- Fraction&operator^(int potega){
- int nowy_licznik=1;
- int nowy_mianownik=1;
- for(int i=0; i < potega; i++){
- nowy_licznik = nowy_licznik*this->getNumerator();
- nowy_mianownik = nowy_mianownik*this->getDenominator();
- }
- //skracanie ułamka
- int dzielnik = NWD(abs(nowy_licznik), abs(nowy_mianownik));
- nowy_licznik = nowy_licznik/dzielnik;
- nowy_mianownik = nowy_mianownik/dzielnik;
- _a = nowy_licznik;
- _b = nowy_mianownik;
- return *this;
- }
- };
- ostream & operator<< (ostream &out, Fraction &fraction){
- return out << fraction.getNumerator() << "/" << fraction.getDenominator();
- }
- int main() {
- Fraction a(5,4);
- Fraction b(4,5);
- Fraction c = a+b;
- cout<<c.getValue()<<endl; // wypisuje 2.05
- cout<<(a*c)<<endl; // wypisuje 41/16
- cout<<(a^2)<<endl; // wypisuje 25/16
- return 0;
- }
Add Comment
Please, Sign In to add comment