#include <iostream>
#include <fstream>
#include <cstdlib>

using namespace std;

bool egesz(int szamlalo, int nevezo);

int lnko(int a, int b); ///2. feladat
int lkkt(int a, int b); ///5. feladat

struct muvelet{

    int szamlalo, nevezo, szamlalo2, nevezo2;
    char muvelet;

}egymuvelet[100];
int db;

int main()
{
    setlocale(LC_ALL,"hun");
    ///1. feladat
    cout << "1. feladat: Adja meg a tört számlálóját és nevezőjét: ";
    int szamlalo, nevezo;
    cin >> szamlalo >> nevezo;

    if(egesz(szamlalo, nevezo)) cout << szamlalo/nevezo << endl;
    else cout << "Nem egész." << endl;

    cout << "3. feladat: " << endl;
    cout << szamlalo << "/"  << nevezo << "=";

    if(egesz(szamlalo, nevezo)) cout << szamlalo/nevezo << endl;
    else cout <<  szamlalo/lnko(szamlalo,nevezo) << "/" << nevezo/lnko(szamlalo,nevezo) << endl;



    cout << "4. feladat: Adja meg a második tört számlálóját és nevezőjét: ";
    int szamlalo2, nevezo2;
    cin >> szamlalo2 >> nevezo2;
    int ujnevezo=lkkt(nevezo,nevezo2);
    int ujszamlalo=szamlalo*(ujnevezo/nevezo)+szamlalo2*(ujnevezo/nevezo2);
    cout  << szamlalo << "/"  << nevezo << " * " << szamlalo2 << "/"  << nevezo2 << " = " << szamlalo*szamlalo2 << "/" << nevezo*nevezo2 << " = ";

    if(egesz(szamlalo*szamlalo2, nevezo*nevezo2)) cout << (szamlalo*szamlalo2)/(nevezo*nevezo2) << endl;
    else cout << szamlalo*szamlalo2/lnko(szamlalo*szamlalo2,nevezo*nevezo2) << "/" << nevezo*nevezo2/lnko(szamlalo*szamlalo2,nevezo*nevezo2) << endl;

    cout << "6. feladat: A két tört összege: " << endl;
    cout << szamlalo << "/"  << nevezo << " + " << szamlalo2 << "/"  << nevezo2 << " = ";
    cout << szamlalo*(ujnevezo/nevezo) << "/" << ujnevezo << " + ";
    cout << szamlalo2*(ujnevezo/nevezo2) << "/" << ujnevezo << " = ";

    cout << ujszamlalo << "/" << ujnevezo << " = ";
    if(egesz(ujszamlalo,ujnevezo)) cout << ujszamlalo/ujnevezo << endl;
    else cout << ujszamlalo/lnko(ujszamlalo,ujnevezo) << "/" << ujnevezo/lnko(ujszamlalo,ujnevezo) << endl;

    cout << "7. feladat: Fájlba írás " << endl;

    ifstream be;
    be.open("adat.txt");
    if(be.fail()) {

        cout << "A fájl nem nyítható meg!";
        cin.get();
        exit(-1);

    }
    int i=0;
    while( be >> egymuvelet[i].szamlalo >> egymuvelet[i].nevezo >> egymuvelet[i].szamlalo2 >> egymuvelet[i].nevezo2 >> egymuvelet[i].muvelet) {

        i++;
    }
    db=i;
    be.close();

    ofstream ki;
    ki.open("eredmeny.txt");
    if(ki.fail()) {

        cout << "A fájl nem nyítható meg!";
        cin.get();
        exit(-1);

    }
    for(int i=0; i<db; i++){
        int szamlalo=egymuvelet[i].szamlalo;
        int nevezo=egymuvelet[i].nevezo;
        int szamlalo2=egymuvelet[i].szamlalo2;
        int nevezo2=egymuvelet[i].nevezo2;
        int ujnevezo=lkkt(nevezo,nevezo2);
        int ujszamlalo=szamlalo*(ujnevezo/nevezo)+szamlalo2*(ujnevezo/nevezo2);
        if(egymuvelet[i].muvelet=='*') {

            ki  << szamlalo << "/"  << nevezo << " * " << szamlalo2 << "/"  << nevezo2 << " = " << szamlalo*szamlalo2 << "/" << nevezo*nevezo2 << " = ";
            if(egesz(szamlalo*szamlalo2, nevezo*nevezo2)) ki << (szamlalo*szamlalo2)/(nevezo*nevezo2) << endl;
            else ki << szamlalo*szamlalo2/lnko(szamlalo*szamlalo2,nevezo*nevezo2) << "/" << nevezo*nevezo2/lnko(szamlalo*szamlalo2,nevezo*nevezo2) << endl;

        }else{
            ki << szamlalo << "/"  << nevezo << " + " << szamlalo2 << "/"  << nevezo2 << " = ";
            ki << szamlalo*(ujnevezo/nevezo) << "/" << ujnevezo << " + ";
            ki << szamlalo2*(ujnevezo/nevezo2) << "/" << ujnevezo << " = ";
            ki << ujszamlalo << "/" << ujnevezo << " = ";
            if(egesz(ujszamlalo,ujnevezo)) ki << ujszamlalo/ujnevezo << endl;
            else ki << ujszamlalo/lnko(ujszamlalo,ujnevezo) << "/" << ujnevezo/lnko(ujszamlalo,ujnevezo) << endl;
        }
    }

    ki.close();
    cin.get();
    return 0;
}

bool egesz(int szamlalo, int nevezo){
    bool egesz=false;
    if(szamlalo%nevezo==0) egesz=true;
return egesz;
}

///2. feladat
int lnko(int a, int b) {

    if(a==b) return a;
    else if(a<b) return lnko(a, b-a);
    else return lnko(a-b,b);
}
///5. feladat
int lkkt(int a, int b){

    return a*b/lnko(a,b);
}