Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include <iostream>
- using namespace std;
- class Frazione
- {
- private:
- //STATO INTERNO
- int numeratore = 0, denominatore = 1;
- void riduci()
- {
- int mcd = MCD(numeratore, denominatore);
- numeratore /= mcd;
- denominatore /= mcd;
- //gestione del segno
- // 3/-5 -> -5/3
- // -3/-5 -> 3/5
- if ( (numeratore>0 && denominatore<0) || (numeratore<0 && denominatore<0) )
- {
- numeratore = -numeratore;
- denominatore = -denominatore;
- }
- }
- public:
- //COSTRUTTORI
- Frazione(int _numeratore, int _denominatore)
- {
- if (_denominatore==0)
- throw string("Denominatore ZERO");
- else
- {
- numeratore = _numeratore;
- denominatore = _denominatore;
- riduci();
- }
- }
- Frazione(int _numeratore) : Frazione(_numeratore, 1) {
- }
- // Frazione (string f)
- // {
- // size_t slashPos = f.find('/');
- // if (slashPos == string::npos) {
- // throw invalid_argument("La stringa non contiene un separatore '/' valido.");
- // }
- //
- // // Estrarre numeratore e denominatore usando substr
- // numeratore = stoi(f.substr(0, slashPos)); // Parte prima del '/'
- // denominatore = stoi(f.substr(slashPos + 1)); // Parte dopo il '/'
- //
- // riduci();
- // }
- Frazione (string f) : Frazione(stoi(f.substr(0, f.find('/'))), stoi(f.substr(f.find('/') + 1)) )
- { }
- //GETTER = conoscere il valore attuale dei dati privati
- int getNumeratore() { return numeratore; }
- int getDenominatore() { return denominatore;}
- void setDenominatore(int den)
- {
- if(den==0)
- throw string("Denominatore zero!");
- else
- {
- denominatore = den;
- riduci();
- }
- }
- void stampa()
- {
- cout << numeratore << "/" << denominatore << endl;
- }
- string to_string() {
- if (denominatore<0 && numeratore>0 || denominatore<0 && numeratore<0)
- {
- denominatore = -denominatore;
- numeratore = - numeratore;
- }
- return std::to_string(numeratore) + "/" + std::to_string(denominatore);
- }
- Frazione operator+(Frazione altra) {
- int num_somma=0, den_somma=1;
- den_somma = denominatore*altra.denominatore;
- num_somma = numeratore*altra.denominatore+
- altra.numeratore*denominatore;
- //
- // Frazione somma(num_somma, den_somma);
- // return somma;
- return Frazione(num_somma, den_somma);
- }
- Frazione operator*(Frazione altra)
- {
- return Frazione(numeratore*altra.numeratore,
- denominatore*altra.denominatore);
- }
- // 5 - 3 5 + (-3)
- // Frazione operator-(Frazione altra)
- // {
- // int num_differenza=0, den_differenza=1;
- //
- // den_differenza = denominatore*altra.denominatore;
- // num_differenza = numeratore*altra.denominatore -
- // altra.numeratore*denominatore;
- //
- // return Frazione(num_differenza, den_differenza);
- // }
- Frazione operator-(Frazione altra)
- {
- *this + (altra * -1);
- }
- Frazione operator~() {
- return Frazione(denominatore, numeratore);
- }
- // 3/2 / 4/5 3/2 * 5/4
- Frazione operator/(Frazione altra)
- {
- return *this * ~altra;
- }
- friend std::ostream& operator<<(std::ostream& os, Frazione c)
- {
- os << c.to_string();
- return os;
- }
- int MCD(int x, int y)
- {
- x = abs(x); y = abs(y);
- if( x < y )
- std::swap( x, y );
- while( y > 0 )
- {
- int f = x % y;
- x = y;
- y = f;
- }
- return x;
- }
- };
- int main()
- {
- // Frazione f1 = Frazione(23, 7);
- // cout << f1.to_string() << endl;
- //
- // Frazione f2(3,4);
- //
- // Frazione f3 = f1.somma_con(f2);
- //
- // cout << f3.to_string() << endl;
- Frazione f4(3, 2);
- //Frazione f5 = f4.moltiplica_con(Frazione(2, 9));
- Frazione f5 = f4 * Frazione(2,9); //6/18
- Frazione f6("5/4");
- cout << f4 / f6 << endl;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement