#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;
fract1.set ( num,den) ;
fract2.set ( num1,den1) ;
fract3= fract1.add ( fract2) ;
int num;
int num1;
int den;
int den1 ;
cout << "введем num" ;
cin >> num;
cout << "num1" ;
cin >> num1;
cout << den;
cin >> den;
cout << "den1" ;
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+0LEuINC00YDQvtCx0Lgg0LIg0YHRgtCw0L3QtNCw0YDRgtC9INGE0L7RgNC8CmludCBnY2YoaW50IGEsaW50IGIpOy8v0L3QsNC40LHQvtC70YzRiNC40Lkg0L7QsdGJ0LjQuSDQtNC10LvQuNGC0LXQu9GMCmludCBsY20oaW50IGEsaW50IGIpOy8v0L3QsNC40LzQtdC90YzRiNC10LUg0L7QsdGJ0LXQtSDQutGA0LDRgtC90L7QtQp9OwppbnQgbWFpbigpewpGcmFjdGlvbiBmcmFjdDEsZnJhY3QyLGZyYWN0MzsKZnJhY3QxLnNldChudW0sZGVuKTsKZnJhY3QyLnNldChudW0xLGRlbjEpOwpmcmFjdDM9ZnJhY3QxLmFkZChmcmFjdDIpOwppbnQgbnVtOwppbnQgbnVtMTsKaW50IGRlbjsKaW50IGRlbjEgOwpjb3V0PDwi0LLQstC10LTQtdC8IG51bSI7CmNpbj4+bnVtOwpjb3V0PDwibnVtMSI7CmNpbj4+bnVtMTsKY291dDw8ZGVuOwpjaW4+PmRlbjsKY291dDw8ImRlbjEiOwpjaW4+PmRlbjE7CmNvdXQ8PGZyYWN0My5nZXRfbnVtKCk8PCIvIjw8ZnJhY3QzLmdldF9kZW4oKTsKfQovL9Ck0KPQndCa0KbQmNCYINCa0JvQkNCh0KHQkCBGUkFDVElPTgovL9C90L7RgNC80LDQu9C40LfQsNGG0LjRjyA6INC/0YDQtdC+0LHRgNCw0LfQvtCy0LDRgtGMINC00YDQvtCx0Ywg0Log0YHRgtCw0L3QtNCw0YDRgtC90L7QvNGDCi8v0LLQuNC00YMgLNGD0L3QuNC60LDQu9GM0L3QvtC80YMg0LTQu9GPINC60LDQttC00L7Qs9C+INC80LDRgtC10LzQsNGC0LjRh9C10YHQutC4INC+0YLQu9C40YfQsNGO0YnQtdCz0L7RgdGPCi8v0LfQvdCw0YfQtdC90LjRjwp2b2lkIEZyYWN0aW9uOjpub3JtYWxpemUoKXsKLy/QvtCx0YDQsNCx0L7RgtCw0YLRjCDRgdC70YPRh9Cw0Lgg0YHQviDQt9C90LDRh9C10L3QuNC10LwgMAppZihkZW49PTAgfHwgbnVtPT0wKXsKbnVtPTA7CmRlbj0xOwp9Ci8v0L7RgdGC0LDQstC40YLRjCDQvtGC0YDQuNGG0LDRgtC10LvRjNC90YvQuSDQt9C90LDQuiDRgtC+0LvRjNC60L4g0LIg0YfQuNGB0LvQuNGC0LXQu9C1LgppZihkZW48MCl7Cm51bSo9LTE7CmRlbio9LTE7Cn0KLy/QuNC30LLQu9C10YfQtdC90LjQtSDQvdCw0LjQsdC+0LvRjNGI0LXQs9C+INC+0LHRidC10LPQviDQtNC10LvQuNGC0LXQu9GPINC40Lcg0YfQuNGB0LvQuNGC0LXQu9GPINC4Ci8v0LfQvdCw0LzQtdC90LDRgtC10LvRjy4KaW50IG49Z2NmKG51bSxkZW4pOwpudW09bnVtL247CmRlbj1kZW4vbjsKfQovL9C90LDQuNCx0L7Qu9GM0YjQuNC5INC+0LHRidC40Lkg0LTQtdC70LjRgtC10LvRjAppbnQgRnJhY3Rpb246OmdjZihpbnQgYSxpbnQgYil7CmlmKGElYj09MCkKcmV0dXJuIGFicyhiKTsKZWxzZQpyZXR1cm4gZ2NmKGIsYSViKTsKfQovL9C90LDQuNC80LXQvdGM0YjQtdC1INC+0LHRidC10LUg0LrRgNCw0YLQvdC+0LUKaW50IEZyYWN0aW9uOjpsY20oaW50IGEsaW50IGIpewpyZXR1cm4gKGEvZ2NmKGEsYikpKmI7Cn0KRnJhY3Rpb24gRnJhY3Rpb246OmFkZChGcmFjdGlvbiBvdGhlcil7CkZyYWN0aW9uIGZyYWN0OwppbnQgbGNkPWxjbShkZW4sb3RoZXIuZGVuKTsKaW50IHF1b3QxPWxjZC9kZW47CmludCBxdW90MiA9bGNkL290aGVyLmRlbjsKZnJhY3Quc2V0KG51bSpxdW90MStvdGhlci5udW0qcXVvdDIsbGNkKTsKZnJhY3Qubm9ybWFsaXplKCk7CnJldHVybiBmcmFjdDsKfQpGcmFjdGlvbiBGcmFjdGlvbjo6bXVsdChGcmFjdGlvbiBvdGhlcil7CkZyYWN0aW9uIGZyYWN0OwpmcmFjdC5zZXQobnVtKm90aGVyLm51bSxkZW4qb3RoZXIuZGVuKTsKZnJhY3Qubm9ybWFsaXplKCk7CnJldHVybiBmcmFjdDsKfQo=
compilation info
prog.cpp: In function ‘int main()’:
prog.cpp:21:12: error: ‘num’ was not declared in this scope
fract1.set(num,den);
^
prog.cpp:21:16: error: ‘den’ was not declared in this scope
fract1.set(num,den);
^
prog.cpp:22:12: error: ‘num1’ was not declared in this scope
fract2.set(num1,den1);
^
prog.cpp:22:17: error: ‘den1’ was not declared in this scope
fract2.set(num1,den1);
^
stdout