Advertisement
fcamuso

Corso recupero c++ 42

Jan 4th, 2025
123
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.34 KB | None | 0 0
  1. /*
  2.  Descrivere la figura geometrica circonferenza seguendo queste indicazioni
  3.  - si dovrá poter creare una circonferenza in questi modi :
  4.    * fornendo le coordinate del centro e la misura del raggio
  5.    * fornendo solo la misura del raggio: sará creata una circonferenza
  6.      centrata nell'origine
  7.    * senza fornire alcun parametro: sará creata la circonferenza
  8.      centrata nell'origine e raggio pari ad 1 (circonferenza goniometrica)
  9.  
  10. Nota: una volta creata una circonferenza é immutabile
  11.  
  12.   - in ogni momento sará possibile
  13.    * estrarre un qualunque dato della circonferenza
  14.    * calcolare l'area
  15.    * calcolare il perimetro
  16.    * confrontare due circonferenze con il seguente criterio: una
  17.      circonferenza é maggiore di un altra se il suo raggio é maggiore
  18.      (implementare un metodo classico e poi con un overload di un
  19.      operatore
  20.  
  21. Sfruttando la classe precedente descrivere con una classe una corona
  22. circolare (la parte che risulta dalla sovrapposizione di due circonferenze
  23. concentriche ed esterna alla piú piccola e che ha una forma ad anello)  :
  24. - si dovrá poter creare una circonferenza in questi modi:
  25.   * passando al costruttore i due cerchi che definiscono la corona
  26.   * passando le coordinate del centro e delle misure due raggi
  27. metodi:
  28.   * area
  29.   * spessore
  30.   * perimetro interno corona
  31.   * perimetro esterno
  32.   * confrontare due corone con il seguente criterio: una
  33.      corona é maggiore di un altra se e   "piu' spessa"
  34. */
  35.  
  36. #include <iostream>
  37. #include <cmath>
  38. #include <cstdlib>
  39.  
  40. using namespace std;
  41.  
  42.  
  43. class Circonferenza
  44. {
  45.   private:
  46.    int xCentro = 0, yCentro = 0;
  47.    int raggio = 0;
  48.  
  49.  
  50.   public:
  51.  
  52.    Circonferenza(int _xCentro, int _yCentro, int _raggio)
  53.    {
  54.       if (_raggio <=0) throw string("raggio <=0");
  55.  
  56.       xCentro = xCentro;
  57.       yCentro = _yCentro;
  58.       raggio  = _raggio;
  59.    }
  60.  
  61.    Circonferenza() : Circonferenza(0,0,1) {}
  62.  
  63.    //costruttore per circonferenze
  64.    //centrate nell'origine
  65.    Circonferenza(int raggio) : Circonferenza(0,0,raggio) {}
  66.  
  67.    //GETTERS
  68.    int getXCentro() {return xCentro;}
  69.    int getYCentro() {return yCentro;}
  70.    int getRaggio() {return raggio;}
  71.  
  72.  
  73.    double Perimetro() { return 2*raggio*3.14; }
  74.  
  75.    double Area() { return 3.14 * raggio * raggio; }
  76.  
  77.  
  78.    bool maggioreDi(Circonferenza altraCrf)
  79.    {
  80.        return (raggio > altraCrf.raggio);
  81.    }
  82.  
  83.    bool operator >(Circonferenza altraCrf) //overload
  84.    {
  85.        return (raggio > altraCrf.raggio);
  86.    }
  87.  
  88. };
  89.  
  90.  
  91. class CoronaCircolare
  92. {
  93.    private:
  94.     Circonferenza crf_interna, crf_esterna;
  95.  
  96.    public:
  97.  
  98.  
  99.    CoronaCircolare(Circonferenza _crf_interna, Circonferenza _crf_esterna)
  100.    {
  101.         if (crf_interna>crf_esterna) throw string("Non e' una corona circolare");
  102.  
  103.         crf_interna = _crf_interna;
  104.         crf_esterna = _crf_esterna;
  105.  
  106.   }
  107.  
  108.     CoronaCircolare(int x, int y, int r_int, int r_est) :
  109.         CoronaCircolare(Circonferenza(x,y,r_int), Circonferenza(x,y,r_est))
  110.     { }
  111.  
  112.     CoronaCircolare() : CoronaCircolare(0,0,1,2) {}
  113.  
  114.  
  115.     double Area()
  116.     {
  117.         return crf_esterna.Area() - crf_interna.Area();
  118.     }
  119.  
  120.     double Spessore() {return crf_esterna.getRaggio() - crf_interna.getRaggio();}
  121.  
  122.     double Perimetro_interno() { return crf_interna.Perimetro();}
  123.  
  124.     double Perimetro_esterno() { return crf_esterna.Perimetro();}
  125.  
  126.    bool maggioreDi(CoronaCircolare altra)
  127.    {
  128.      return Spessore() > altra.Spessore();
  129.    }
  130.  
  131.     bool operator> (CoronaCircolare altra)
  132.    {
  133.      return Spessore() > altra.Spessore();
  134.    }
  135.  
  136.  
  137. };
  138.  
  139. int main()
  140. {
  141.    Circonferenza crf1(3,67,4);
  142.  
  143.    cout << "Perimetro: " << crf1.Perimetro() << endl;
  144.    cout << "Area: " << crf1.Area() << endl;
  145.  
  146.  
  147.    Circonferenza crf2(1,1,12);
  148.  
  149.    if (crf2.maggioreDi(crf1))  cout << "Maggiore\n";
  150.  
  151.    if (crf2 > crf1)  cout << "Maggiore\n";
  152.  
  153.  
  154.    CoronaCircolare c1; //costrutore 'vuoto', default
  155.    cout << c1.Area() << endl;
  156.  
  157.    CoronaCircolare c2(3,6,10,15);
  158.    cout << c2.Area() << endl;
  159.  
  160.    Circonferenza crf3(2,9,12);
  161.    Circonferenza crf4(2,9,34);
  162.  
  163.    CoronaCircolare c3(crf3, crf4);
  164.    cout << c3.Area() << endl;
  165.  
  166.    cout << c3.Spessore() << endl;
  167.    cout << c3.Perimetro_interno() << endl;
  168.    cout << c3.Perimetro_esterno() << endl;
  169.  
  170.   if (c3 > c2)
  171.      cout << "c3 maggiore di c2\n";
  172.   else
  173.     cout << "c2 maggiore di c3\n";
  174.  
  175.  
  176.  
  177.  
  178.    return 0;
  179. }
  180.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement