#include <cstdlib>
#include <iostream>
using namespace std;
class Fraction {
private:
int num,den; //числитель и знаменатель
public:
void set (int n,int d) {num=n; den=d;
normalize();}
int get_num() {return num;}
int get_den(){return den;}
Fraction add(Fraction other);
Fraction mult(Fraction other);
private:
void normalize();//доб. дроби в стандартн форм
int gcf(int a,int b);//наибольший общий делитель
int lcm(int a,int b);//наименьшее общее кратное
};
int main(){
Fraction fract1,fract2,fract3;
int num;
int den;
int num1;
int den1 ;
fract1.set(num,den);
fract2.set(num1,den1);
fract3=fract1.add(fract2);
cout<<"введем числ.первой дроби";
cin>>num;
cout<<"введем знамен. первой дроби";
cin>>den;
cout<<"введем числитель второй дроби";
cin>>num1;
cout<<"введем знамен.второй дроби";
cin>>den1;
cout<<fract3.get_num()<<"/"<<fract3.get_den();
}
//ФУНКЦИИ КЛАССА FRACTION
//нормализация : преобразовать дробь к стандартному
//виду ,уникальному для каждого математически отличающегося
//значения
void Fraction::normalize(){
//обработать случаи со значением 0
if(den==0 || num==0){
num=0;
den=1;
}
//оставить отрицательный знак только в числителе.
if(den<0){
num*=-1;
den*=-1;
}
//извлечение наибольшего общего делителя из числителя и
//знаменателя.
int n=gcf(num,den);
num=num/n;
den=den/n;
}
//наибольший общий делитель
int Fraction::gcf(int a,int b){
if(a%b==0)
return abs(b);
else
return gcf(b,a%b);
}
//наименьшее общее кратное
int Fraction::lcm(int a,int b){
return (a/gcf(a,b))*b;
}
Fraction Fraction::add(Fraction other){
Fraction fract;
int lcd=lcm(den,other.den);
int quot1=lcd/den;
int quot2 =lcd/other.den;
fract.set(num*quot1+other.num*quot2,lcd);
fract.normalize();
return fract;
}
Fraction Fraction::mult(Fraction other){
Fraction fract;
fract.set(num*other.num,den*other.den);
fract.normalize();
return fract;
}
I2luY2x1ZGUgPGNzdGRsaWI+CiNpbmNsdWRlIDxpb3N0cmVhbT4KdXNpbmcgbmFtZXNwYWNlIHN0ZDsKY2xhc3MgRnJhY3Rpb24gewpwcml2YXRlOgppbnQgbnVtLGRlbjsgLy/Rh9C40YHQu9C40YLQtdC70Ywg0Lgg0LfQvdCw0LzQtdC90LDRgtC10LvRjApwdWJsaWM6CnZvaWQgc2V0IChpbnQgbixpbnQgZCkge251bT1uOyBkZW49ZDsKbm9ybWFsaXplKCk7fQppbnQgZ2V0X251bSgpIHtyZXR1cm4gbnVtO30KaW50IGdldF9kZW4oKXtyZXR1cm4gZGVuO30KRnJhY3Rpb24gYWRkKEZyYWN0aW9uIG90aGVyKTsKRnJhY3Rpb24gbXVsdChGcmFjdGlvbiBvdGhlcik7CnByaXZhdGU6CnZvaWQgbm9ybWFsaXplKCk7Ly/QtNC+0LEuINC00YDQvtCx0Lgg0LIg0YHRgtCw0L3QtNCw0YDRgtC9INGE0L7RgNC8CmludCBnY2YoaW50IGEsaW50IGIpOy8v0L3QsNC40LHQvtC70YzRiNC40Lkg0L7QsdGJ0LjQuSDQtNC10LvQuNGC0LXQu9GMCmludCBsY20oaW50IGEsaW50IGIpOy8v0L3QsNC40LzQtdC90YzRiNC10LUg0L7QsdGJ0LXQtSDQutGA0LDRgtC90L7QtQp9OwppbnQgbWFpbigpewpGcmFjdGlvbiBmcmFjdDEsZnJhY3QyLGZyYWN0MzsKaW50IG51bTsKaW50IGRlbjsKaW50IG51bTE7CmludCBkZW4xIDsKZnJhY3QxLnNldChudW0sZGVuKTsKZnJhY3QyLnNldChudW0xLGRlbjEpOwpmcmFjdDM9ZnJhY3QxLmFkZChmcmFjdDIpOwpjb3V0PDwi0LLQstC10LTQtdC8INGH0LjRgdC7LtC/0LXRgNCy0L7QuSDQtNGA0L7QsdC4IjsKY2luPj5udW07CmNvdXQ8PCLQstCy0LXQtNC10Lwg0LfQvdCw0LzQtdC9LiDQv9C10YDQstC+0Lkg0LTRgNC+0LHQuCI7CmNpbj4+ZGVuOwpjb3V0PDwi0LLQstC10LTQtdC8INGH0LjRgdC70LjRgtC10LvRjCDQstGC0L7RgNC+0Lkg0LTRgNC+0LHQuCI7CmNpbj4+bnVtMTsKY291dDw8ItCy0LLQtdC00LXQvCDQt9C90LDQvNC10L0u0LLRgtC+0YDQvtC5INC00YDQvtCx0LgiOwpjaW4+PmRlbjE7CmNvdXQ8PGZyYWN0My5nZXRfbnVtKCk8PCIvIjw8ZnJhY3QzLmdldF9kZW4oKTsKfQovL9Ck0KPQndCa0KbQmNCYINCa0JvQkNCh0KHQkCBGUkFDVElPTgovL9C90L7RgNC80LDQu9C40LfQsNGG0LjRjyA6INC/0YDQtdC+0LHRgNCw0LfQvtCy0LDRgtGMINC00YDQvtCx0Ywg0Log0YHRgtCw0L3QtNCw0YDRgtC90L7QvNGDCi8v0LLQuNC00YMgLNGD0L3QuNC60LDQu9GM0L3QvtC80YMg0LTQu9GPINC60LDQttC00L7Qs9C+INC80LDRgtC10LzQsNGC0LjRh9C10YHQutC4INC+0YLQu9C40YfQsNGO0YnQtdCz0L7RgdGPCi8v0LfQvdCw0YfQtdC90LjRjwp2b2lkIEZyYWN0aW9uOjpub3JtYWxpemUoKXsKLy/QvtCx0YDQsNCx0L7RgtCw0YLRjCDRgdC70YPRh9Cw0Lgg0YHQviDQt9C90LDRh9C10L3QuNC10LwgMAppZihkZW49PTAgfHwgbnVtPT0wKXsKbnVtPTA7CmRlbj0xOwp9Ci8v0L7RgdGC0LDQstC40YLRjCDQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvQuSDQt9C90LDQuiDRgtC+0LvRjNC60L4g0LIg0YfQuNGB0LvQuNGC0LXQu9C1LgppZihkZW48MCl7Cm51bSo9LTE7CmRlbio9LTE7Cn0KLy/QuNC30LLQu9C10YfQtdC90LjQtSDQvdCw0LjQsdC+0LvRjNGI0LXQs9C+INC+0LHRidC10LPQviDQtNC10LvQuNGC0LXQu9GPINC40Lcg0YfQuNGB0LvQuNGC0LXQu9GPINC4Ci8v0LfQvdCw0LzQtdC90LDRgtC10LvRjy4KaW50IG49Z2NmKG51bSxkZW4pOwpudW09bnVtL247CmRlbj1kZW4vbjsKfQovL9C90LDQuNCx0L7Qu9GM0YjQuNC5INC+0LHRidC40Lkg0LTQtdC70LjRgtC10LvRjAppbnQgRnJhY3Rpb246OmdjZihpbnQgYSxpbnQgYil7CmlmKGElYj09MCkKcmV0dXJuIGFicyhiKTsKZWxzZQpyZXR1cm4gZ2NmKGIsYSViKTsKfQovL9C90LDQuNC80LXQvdGM0YjQtdC1INC+0LHRidC10LUg0LrRgNCw0YLQvdC+0LUKaW50IEZyYWN0aW9uOjpsY20oaW50IGEsaW50IGIpewpyZXR1cm4gKGEvZ2NmKGEsYikpKmI7Cn0KRnJhY3Rpb24gRnJhY3Rpb246OmFkZChGcmFjdGlvbiBvdGhlcil7CkZyYWN0aW9uIGZyYWN0OwppbnQgbGNkPWxjbShkZW4sb3RoZXIuZGVuKTsKaW50IHF1b3QxPWxjZC9kZW47CmludCBxdW90MiA9bGNkL290aGVyLmRlbjsKZnJhY3Quc2V0KG51bSpxdW90MStvdGhlci5udW0qcXVvdDIsbGNkKTsKZnJhY3Qubm9ybWFsaXplKCk7CnJldHVybiBmcmFjdDsKfQpGcmFjdGlvbiBGcmFjdGlvbjo6bXVsdChGcmFjdGlvbiBvdGhlcil7CkZyYWN0aW9uIGZyYWN0OwpmcmFjdC5zZXQobnVtKm90aGVyLm51bSxkZW4qb3RoZXIuZGVuKTsKZnJhY3Qubm9ybWFsaXplKCk7CnJldHVybiBmcmFjdDsKfQo=