//Operazioni su numeri razionali, rappresentati come frazioni #include class razionale {private: int n; int d; public: razionale() //costruttore standard {n = 0; d = 1; } razionale(int i1,int i2=1) //costruttore con parametri {n = i1; if (i2 == 0) {cout << "ATTENZIONE!: denominatore nullo" << endl; d = 1;} else d = i2; } razionale operator+(const razionale& s) const {razionale ris; ris.d = d * s.d; ris.n = n*s.d + s.n * d; return ris; } int operator>(const razionale& s) const { return (n * s.d > d * s.n); } void stampa(ostream& sout) const {sout << n << '/' << d; return; } void leggi(istream& sin) {int num, den; char sep; sin >> num >> sep >> den; if (sep != '/') cout << "ATTENZIONE!: errore sintattico nella frazione" << endl; else {n = num; if (den == 0) {cout << "ATTENZIONE!: denominatore nullo" << endl; d = 1;} else d = den; } return; } }; ostream& operator<<(ostream& sout, const razionale& r) {r.stampa(sout); return sout; } istream& operator>>(istream& sin, razionale& r) {r.leggi(sin); return sin; } int main() {razionale a; const razionale b(1,2); razionale c; cout << "programma per sommare 1/2 a qualsiasi frazione data" << endl; cout << "dai una frazione (n/d)" << endl; cin >> a; c = a + b; cout << "il risultato e' " << c << endl; return 0; }