Advertisement
fcamuso

Corso recupero c++ 39

Dec 29th, 2024
152
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.01 KB | None | 0 0
  1. #include <iostream>
  2.  
  3. using namespace std;
  4.  
  5. class Frazione
  6. {
  7. private:
  8.   //STATO INTERNO
  9.     int numeratore = 0, denominatore = 1;
  10.  
  11.      void riduci()
  12.      {
  13.  
  14.        int mcd = MCD(numeratore, denominatore);
  15.  
  16.        numeratore /= mcd;
  17.        denominatore /= mcd;
  18.  
  19.        //gestione del segno
  20.        // 3/-5 -> -5/3
  21.        // -3/-5 -> 3/5
  22.        if ( (numeratore>0 && denominatore<0) || (numeratore<0 && denominatore<0) )
  23.        {
  24.          numeratore = -numeratore;
  25.          denominatore = -denominatore;
  26.        }
  27.  
  28.      }
  29.  
  30.  
  31. public:
  32.  
  33.   //COSTRUTTORI
  34.   Frazione(int _numeratore, int _denominatore)
  35.   {
  36.     if (_denominatore==0)
  37.       throw string("Denominatore ZERO");
  38.     else
  39.     {
  40.       numeratore   = _numeratore;
  41.       denominatore = _denominatore;
  42.  
  43.       riduci();
  44.     }
  45.   }
  46.  
  47.  
  48.   Frazione(int _numeratore) : Frazione(_numeratore, 1) {
  49.  
  50.   }
  51.  
  52.  
  53.  
  54. //  Frazione (string f)
  55. //  {
  56. //    size_t slashPos = f.find('/');
  57. //    if (slashPos == string::npos) {
  58. //        throw invalid_argument("La stringa non contiene un separatore '/' valido.");
  59. //    }
  60. //
  61. //    // Estrarre numeratore e denominatore usando substr
  62. //    numeratore = stoi(f.substr(0, slashPos));     // Parte prima del '/'
  63. //    denominatore = stoi(f.substr(slashPos + 1));   // Parte dopo il '/'
  64. //
  65. //    riduci();
  66. //  }
  67.  
  68.   Frazione (string f) : Frazione(stoi(f.substr(0, f.find('/'))),  stoi(f.substr(f.find('/') + 1)) )
  69.   { }
  70.  
  71.  
  72.  
  73.  
  74.  
  75.   //GETTER = conoscere il valore attuale dei dati privati
  76.   int getNumeratore() { return numeratore; }
  77.   int getDenominatore() { return denominatore;}
  78.  
  79.  
  80.    void setDenominatore(int den)
  81.    {
  82.       if(den==0)
  83.         throw string("Denominatore zero!");
  84.       else
  85.       {
  86.         denominatore = den;
  87.         riduci();
  88.       }
  89.     }
  90.  
  91.  
  92.   void stampa()
  93.   {
  94.      cout << numeratore << "/" << denominatore << endl;
  95.   }
  96.  
  97.  
  98.   string to_string() {
  99.  
  100.     if (denominatore<0 && numeratore>0 ||  denominatore<0 && numeratore<0)
  101.     {
  102.       denominatore = -denominatore;
  103.       numeratore = - numeratore;
  104.     }
  105.  
  106.     return std::to_string(numeratore) + "/" + std::to_string(denominatore);
  107.   }
  108.  
  109.    Frazione operator+(Frazione altra) {
  110.      int num_somma=0, den_somma=1;
  111.  
  112.      den_somma = denominatore*altra.denominatore;
  113.      num_somma = numeratore*altra.denominatore+
  114.                  altra.numeratore*denominatore;
  115.   //
  116.   //   Frazione somma(num_somma, den_somma);
  117.   //   return somma;
  118.  
  119.    return Frazione(num_somma, den_somma);
  120.  
  121.   }
  122.  
  123.   Frazione operator*(Frazione altra)
  124.   {
  125.     return Frazione(numeratore*altra.numeratore,
  126.                     denominatore*altra.denominatore);
  127.   }
  128.  
  129.   //  5 - 3   5 + (-3)
  130. //  Frazione operator-(Frazione altra)
  131. //  {
  132. //     int num_differenza=0, den_differenza=1;
  133. //
  134. //     den_differenza = denominatore*altra.denominatore;
  135. //     num_differenza = numeratore*altra.denominatore -
  136. //                      altra.numeratore*denominatore;
  137. //
  138. //     return Frazione(num_differenza, den_differenza);
  139. //  }
  140.  
  141.   Frazione operator-(Frazione altra)
  142.   {
  143.      *this + (altra * -1);
  144.   }
  145.  
  146.   Frazione operator~() {
  147.     return Frazione(denominatore, numeratore);
  148.   }
  149.  
  150.  
  151.   //  3/2  /    4/5   3/2 * 5/4
  152.   Frazione operator/(Frazione altra)
  153.   {
  154.     return *this * ~altra;
  155.   }
  156.  
  157.  
  158.   friend std::ostream&  operator<<(std::ostream& os, Frazione c)
  159.   {
  160.     os << c.to_string();
  161.     return os;
  162.   }
  163.  
  164.  
  165.    int MCD(int x, int y)
  166.    {
  167.       x = abs(x); y = abs(y);
  168.  
  169.       if( x < y )
  170.         std::swap( x, y );
  171.  
  172.        while( y > 0 )
  173.        {
  174.           int f = x % y;
  175.           x = y;
  176.           y = f;
  177.        }
  178.  
  179.        return x;
  180.     }
  181.  
  182.  
  183. };
  184.  
  185. int main()
  186. {
  187.  
  188. //   Frazione f1 = Frazione(23, 7);
  189. //   cout << f1.to_string() << endl;
  190. //
  191. //   Frazione f2(3,4);
  192. //
  193. //   Frazione f3 = f1.somma_con(f2);
  194. //
  195. //   cout << f3.to_string() << endl;
  196.  
  197.   Frazione f4(3, 2);
  198.  
  199.   //Frazione f5 = f4.moltiplica_con(Frazione(2, 9));
  200.   Frazione f5 = f4 * Frazione(2,9);  //6/18
  201.  
  202.   Frazione f6("5/4");
  203.  
  204.   cout << f4 / f6 << endl;
  205.  
  206.  
  207.     return 0;
  208. }
  209.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement