﻿/*
    Készítsünk "racionális szám" típust (két egészből) és implementáljuk
    a megszokott műveleteket:
        összeadás, kivonás, szorzás, osztás, inverz, egész kitevőjű hatvány,
        egyszerűsítés (irreducibilis alakra)
*/
#include <iostream>
using namespace std;


struct Rac
{
    int szamlalo;
    int nevezo;
};


void kiir(Rac r)
{
    cout << r.szamlalo << " / " << r.nevezo << endl;
}


int lnko(int a, int b)
{
    if (a < 0)
        a = -a;
    if (b < 0)
        b = -b;

    if (a == 0)
        return b;

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

    return a;
}


Rac egyszerusit(Rac r)
{
    int d = lnko(r.szamlalo, r.nevezo);
    r.szamlalo /= d;
    r.nevezo /= d;

    return r;
}


Rac osszead(Rac r1, Rac r2)
{
    /*
          r1.sz / r1.n
        + r2.sz / r2.n
    */
    /*
          r2.n*r1.sz / r2.n*r1.n
        + r1.n*r2.sz / r1.n*r2.n
    */

    Rac eredmeny;
    eredmeny.szamlalo =
        r2.nevezo*r1.szamlalo + r1.nevezo*r2.szamlalo;
    eredmeny.nevezo = r1.nevezo*r2.nevezo;

    return egyszerusit(eredmeny);
}


/*
Rac kivon(Rac r1, Rac r2)
{
    // HF.
    return ...;
}

Rac szoroz(Rac r1, Rac r2)
{
    // HF.
    return ...;
}

Rac oszt(Rac r1, Rac r2)
{
    // HF.
    return ...;
}
*/

int main()
{
    Rac r;
    r.szamlalo = 2;
    r.nevezo = 4;
    //kiir(egyszerusit(r));

    Rac r2;
    r2.szamlalo = 4;
    r2.nevezo = 4;

    Rac r3 = osszead(r, r2);
    kiir(r3);
    return 0;
}

