//Carlos gutierrez
//Andres Collazos
#include <iostream>
#include <math.h>
typedef long long int64;
using namespace std;
class Fraccion {
int64 num;
int64 den;
public:
//CONSTRUCTORES
Fraccion()
{
num = 0;
den = 1;
}
Fraccion(int a, int b)
{
num = a;
den = b;
}
int64 gcd(int64 a, int64 b)
{
if(b == 0)
return a;
return gcd(b, a % b);
}
Fraccion simp()
{
int64 d = gcd(this->num, this->den);
this->num /= d;
this->den /= d;
return *this;
}
void show()
{
cout << num << "/" << den << endl;
}
//SOBRECARGA DE OPERADORES
Fraccion operator+(Fraccion fr)
{
Fraccion tmp;
tmp.num = (this->num * fr.den) + (this->den * fr.num);
tmp.den = (this->den * fr.den);
return tmp.simp();
}
Fraccion operator-(Fraccion fr)
{
Fraccion tmp;
tmp.num = (this->num * fr.den) - (this->den * fr.num);
tmp.den = (this->den * fr.den);
return tmp.simp();
}
Fraccion operator/(Fraccion fr)
{
Fraccion tmp;
tmp.num = (this->num * fr.den);
tmp.den = (this->den * fr.num);
return tmp.simp();
}
Fraccion operator*(Fraccion fr)
{
Fraccion tmp;
tmp.num = (this->num * fr.num);
tmp.den = (this->den * fr.den);
return tmp.simp();
}
};
int main()
{
Fraccion fr1(2,8),fr2(93,15),fr3;
cout << "Fraccion 1: " << endl;
fr1.show();
cout << "Fraccion 1 simplificada: " << endl;
fr1.simp().show();
cout << endl;
cout << "Fraccion 2: " << endl;
fr2.show();
cout << "Fraccion 2 simplificada: " << endl;
fr2.simp().show();
cout << endl;
fr3 = fr1 + fr2;
fr3.show();
fr3 = fr1 - fr2;
fr3.show();
fr3 = fr1 / fr2;
fr3.show();
fr3 = fr1 * fr2;
fr3.show();
return 0;
}
Ly9DYXJsb3MgZ3V0aWVycmV6Ci8vQW5kcmVzIENvbGxhem9zCgojaW5jbHVkZSA8aW9zdHJlYW0+CiNpbmNsdWRlIDxtYXRoLmg+Cgp0eXBlZGVmIGxvbmcgbG9uZyBpbnQ2NDsKCnVzaW5nIG5hbWVzcGFjZSBzdGQ7CgpjbGFzcyBGcmFjY2lvbiB7CiAgICBpbnQ2NCBudW07CiAgICBpbnQ2NCBkZW47CgogICAgcHVibGljOgoKICAgIC8vQ09OU1RSVUNUT1JFUwogICAgRnJhY2Npb24oKQogICAgewogICAgICAgIG51bSA9IDA7CiAgICAgICAgZGVuID0gMTsKICAgIH0KCiAgICBGcmFjY2lvbihpbnQgYSwgaW50IGIpCiAgICB7CiAgICAgICAgbnVtID0gYTsKICAgICAgICBkZW4gPSBiOwogICAgfQoKICAgIGludDY0IGdjZChpbnQ2NCBhLCBpbnQ2NCBiKQogICAgewogICAgICAgIGlmKGIgPT0gMCkKICAgICAgICAgICAgcmV0dXJuIGE7CiAgICAgICAgcmV0dXJuIGdjZChiLCBhICUgYik7CiAgICB9CgogICAgRnJhY2Npb24gc2ltcCgpCiAgICB7CiAgICAgICAgaW50NjQgZCA9IGdjZCh0aGlzLT5udW0sIHRoaXMtPmRlbik7CgogICAgICAgIHRoaXMtPm51bSAvPSBkOwogICAgICAgIHRoaXMtPmRlbiAvPSBkOwoKICAgICAgICByZXR1cm4gKnRoaXM7CiAgICB9CgogICAgdm9pZCBzaG93KCkKICAgIHsKICAgICAgICBjb3V0IDw8IG51bSA8PCAiLyIgPDwgZGVuIDw8IGVuZGw7CiAgICB9CgogICAgLy9TT0JSRUNBUkdBIERFIE9QRVJBRE9SRVMKICAgIEZyYWNjaW9uIG9wZXJhdG9yKyhGcmFjY2lvbiBmcikKICAgIHsKICAgICAgICBGcmFjY2lvbiB0bXA7CiAgICAgICAgdG1wLm51bSA9ICh0aGlzLT5udW0gKiBmci5kZW4pICsgKHRoaXMtPmRlbiAqIGZyLm51bSk7CiAgICAgICAgdG1wLmRlbiA9ICh0aGlzLT5kZW4gKiBmci5kZW4pOwogICAgICAgIHJldHVybiB0bXAuc2ltcCgpOwogICAgfQoKICAgIEZyYWNjaW9uIG9wZXJhdG9yLShGcmFjY2lvbiBmcikKICAgIHsKICAgICAgICBGcmFjY2lvbiB0bXA7CiAgICAgICAgdG1wLm51bSA9ICh0aGlzLT5udW0gKiBmci5kZW4pIC0gKHRoaXMtPmRlbiAqIGZyLm51bSk7CiAgICAgICAgdG1wLmRlbiA9ICh0aGlzLT5kZW4gKiBmci5kZW4pOwogICAgICAgIHJldHVybiB0bXAuc2ltcCgpOwogICAgfQoKICAgIEZyYWNjaW9uIG9wZXJhdG9yLyhGcmFjY2lvbiBmcikKICAgIHsKICAgICAgICBGcmFjY2lvbiB0bXA7CiAgICAgICAgdG1wLm51bSA9ICh0aGlzLT5udW0gKiBmci5kZW4pOwogICAgICAgIHRtcC5kZW4gPSAodGhpcy0+ZGVuICogZnIubnVtKTsKICAgICAgICByZXR1cm4gdG1wLnNpbXAoKTsKICAgIH0KCiAgICBGcmFjY2lvbiBvcGVyYXRvciooRnJhY2Npb24gZnIpCiAgICB7CiAgICAgICAgRnJhY2Npb24gdG1wOwogICAgICAgIHRtcC5udW0gPSAodGhpcy0+bnVtICogZnIubnVtKTsKICAgICAgICB0bXAuZGVuID0gKHRoaXMtPmRlbiAqIGZyLmRlbik7CiAgICAgICAgcmV0dXJuIHRtcC5zaW1wKCk7CiAgICB9Cn07CgppbnQgbWFpbigpCnsKICAgIEZyYWNjaW9uIGZyMSgyLDgpLGZyMig5MywxNSksZnIzOwoKICAgIGNvdXQgPDwgIkZyYWNjaW9uIDE6ICIgPDwgZW5kbDsKICAgIGZyMS5zaG93KCk7CiAgICBjb3V0IDw8ICJGcmFjY2lvbiAxIHNpbXBsaWZpY2FkYTogIiA8PCBlbmRsOwogICAgZnIxLnNpbXAoKS5zaG93KCk7CgogICAgY291dCA8PCBlbmRsOwoKICAgIGNvdXQgPDwgIkZyYWNjaW9uIDI6ICIgPDwgZW5kbDsKICAgIGZyMi5zaG93KCk7CiAgICBjb3V0IDw8ICJGcmFjY2lvbiAyIHNpbXBsaWZpY2FkYTogIiA8PCBlbmRsOwogICAgZnIyLnNpbXAoKS5zaG93KCk7CgogICAgY291dCA8PCBlbmRsOwoKICAgIGZyMyA9IGZyMSArIGZyMjsKICAgIGZyMy5zaG93KCk7CiAgICBmcjMgPSBmcjEgLSBmcjI7CiAgICBmcjMuc2hvdygpOwogICAgZnIzID0gZnIxIC8gZnIyOwogICAgZnIzLnNob3coKTsKICAgIGZyMyA9IGZyMSAqIGZyMjsKICAgIGZyMy5zaG93KCk7CgogICAgcmV0dXJuIDA7Cn0K