Advertisement
metalni

OOP Labs 8 Igroteka

Jun 2nd, 2020
410
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.31 KB | None | 0 0
  1. /*Игротека Problem 2 (0 / 0)
  2.  
  3. Во една игротека има 2 типа играчки: топки и коцки. Коцките и топките се опишани со параметри како што се:
  4.  
  5.     боја (char *)
  6.     густина (int).
  7.  
  8. Дополнително за топките се знае и радиусот (int), додека за коцките целосните димензии (висина, ширина и длабочина – int).
  9.  
  10. За секоја од класите треба да се дефинираат методи getMasa() и getVolumen(). Масата на играчката се пресметува како производ од волуменот и густината на играчката. За PI користете ја вредноста 3.14.
  11.  
  12. Во функцијата main да се декларира променлива kupche што претставува динамички алоцирана низа кон Igrachka. Во зависност од првиот влезен параметар се внесуваат објекти од класите Topka или Kocka (1 - се внесува топка, 2 - се внесува коцка).
  13.  
  14. Од тастатура да се внесат податоци за коцката на Петра Kocka petra. Во главната функција во да се отпечатат:
  15.  
  16.     Да се отпечати DA ако вкупната маса на сите играчки е поголема од масата на играчката на Петра, а NE во спротивно.
  17.  
  18.     Разликата по апсолутна вредност на волуменот на играчката со максимален волумен во купчето и волуменот на коцката на Петра. Форматот е:
  19.  
  20.     Razlikata e: {razlika}
  21.  
  22. Задачата да се реши со тоа што класите Kocka и Topka ќе наследуваат од класите Forma и Igrachka.
  23.  
  24. Дополнителни барања:
  25.  
  26.     Во класата Igrachka да се додаде уште една чисто виртуелна функција float getPlostina(). Истата да се имплементира во класите Kocka и Topka
  27.     Во главната функција, дополнително да се испечати и: Разликата по апсолутна вредност на плоштината на играчката со минимална плоштина во купчето и плоштината на коцката на Петра во истиот формат како и второто барање погоре.
  28.  
  29. */
  30. #include <iostream>
  31. #include <cstring>
  32. #include <cmath>
  33.  
  34. using namespace std;
  35.  
  36. class Igrachka {
  37. public:
  38.     virtual float getVolumen() = 0;
  39.     virtual float getMasa() = 0;
  40.     virtual float getPlostina() = 0;
  41. };
  42.  
  43. class Forma{
  44. protected:
  45.     char boja[100];
  46.     int gustina;
  47. public:
  48.     Forma(){
  49.         strcpy(this->boja, "None");
  50.         this->gustina = 0;
  51.     }
  52.     Forma(const char * boja, const int gustina){
  53.         strcpy(this->boja, boja);
  54.         this->gustina = gustina;
  55.     }
  56.     ~Forma(){}
  57.     float getVolumen(){
  58.         return 0;
  59.     }
  60.     float getMasa(){
  61.         return 0;
  62.     }
  63.     float getPlostina(){
  64.         return 0;
  65.     }
  66. };
  67.  
  68. class Kocka : public Forma, public Igrachka{
  69.     private:
  70.         int visina;
  71.         int sirina;
  72.         int dlabocina;
  73.     public:
  74.         Kocka(){
  75.             this->visina = 0;
  76.             this->sirina =0;
  77.             this->dlabocina = 0;
  78.         }
  79.         Kocka(const char * boja, const int gustina, const int visina, const int sirina, const int dlabocina) : Forma(boja, gustina){
  80.             this->visina = visina;
  81.             this->sirina = sirina;
  82.             this->dlabocina = dlabocina;
  83.         }
  84.         ~Kocka(){}
  85.         float getVolumen(){
  86.             return this->visina * this->sirina * this->dlabocina;
  87.         }
  88.         float getMasa(){
  89.             return this->getVolumen() * this->gustina;
  90.         }
  91.         float getPlostina(){
  92.             return 2*(this->dlabocina*this->sirina + this->dlabocina*this->visina + this->sirina*this->visina);
  93.         }
  94. };
  95.  
  96. class Topka : public Forma, public Igrachka{
  97.     private:
  98.         int radius;
  99.     public:
  100.         Topka(){
  101.             this->radius = 0;
  102.         }
  103.         Topka(const char * boja, const int gustina, const int radius) : Forma(boja, gustina){
  104.             this->radius = radius;
  105.         }
  106.         ~Topka(){}
  107.         float getVolumen(){
  108.             return 4./3*3.14*radius*radius*radius;
  109.         }
  110.         float getMasa(){
  111.             return this->getVolumen() * this->gustina;
  112.         }
  113.         float getPlostina(){
  114.             return this->getVolumen()*gustina;
  115.         }
  116. };
  117.  
  118.  
  119.  
  120. int main(){
  121.     //vnesi informacii za kupche
  122.     int n, type, gustina, visina, sirina, dlabocina, radius;
  123.     cin >> n;
  124.     Igrachka ** kupche = new Igrachka*[n];
  125.     char boja[50];
  126.  
  127.     for(int i=0; i<n; i++){
  128.         cin >> type;
  129.         if(type == 1){
  130.             cin >> boja >> gustina >> radius;
  131.             kupche[i] = new Topka(boja, gustina, radius);
  132.         }
  133.         else if(type == 2){
  134.             cin >> boja >> gustina >> visina >> sirina >> dlabocina;
  135.             kupche[i] = new Kocka(boja, gustina, visina, sirina, dlabocina);
  136.         }
  137.     }
  138.     //vnesi informacii za igrachkata na Petra
  139.     cin >> boja >> gustina >> visina >> sirina >> dlabocina;
  140.     Kocka petra(boja, gustina, visina, sirina, dlabocina);
  141.     //baranje 1
  142.     float total = 0.0;
  143.     for(int i=0; i<n; i++){
  144.         total += kupche[i]->getMasa();
  145.     }
  146.  
  147.     if(total > petra.getMasa())
  148.         cout << "DA" << endl;
  149.     else
  150.         cout << "NE" << endl;
  151.  
  152.     //baranje 2
  153.     double max = kupche[0]->getVolumen();
  154.     double min = kupche[0]->getPlostina();
  155.     for(int i=1; i<n; i++){
  156.         if(max < kupche[i]->getVolumen())
  157.             max = kupche[i]->getVolumen();
  158.         if(min > kupche[i]->getPlostina())
  159.             min = kupche[i]->getPlostina();
  160.     }
  161.     cout << "Razlikata e: " << fabs(max - petra.getVolumen()) << endl;
  162.     //дополнително барање 2
  163.     cout << "Razlikata e: " << fabs(min - petra.getPlostina()) << endl;
  164.     return 0;
  165. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement