Advertisement
196040

OOP labs 8 Igroteka

May 18th, 2020
270
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 5.64 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. #include<cmath>
  4. using namespace std;
  5. class Forma { //Во една игротека има 2 типа играчки: топки и коцки. Коцките и топките
  6. protected:// се опишани со параметри како што се:
  7.     char boja[20]; //боја (char *)
  8.     int gustina; //густина (int).
  9. public:
  10.     Forma() { // defaulten
  11.         strcpy(this->boja, "");
  12.         this->gustina = 0;
  13.     }
  14.     Forma(char * boja, int gustina) { // konstruktor so argumenti
  15.         strcpy(this->boja, boja);
  16.         this->gustina = gustina;
  17.     }
  18.     Forma(const Forma &f) { // copy konstruktor ne deka treba ama ae
  19.         strcpy(this->boja, f.boja);
  20.         this->gustina = f.gustina;
  21.     }
  22. };
  23. class Igrachka {//Во класата Igrachka да се додаде
  24. public:
  25.     virtual float getVolumen() = 0;
  26.     virtual float getMasa() = 0;
  27. //Дополнителни барања:
  28.     virtual float getPlostina() = 0;  //уште една чисто виртуелна функција float getPlostina().
  29. };
  30. class Topka : public Forma, public Igrachka {
  31. private:
  32.     int radius; //Дополнително за топките се знае и радиусот (int)
  33. public:
  34.     Topka() { // defaulten
  35.         this->radius = 0;
  36.     }
  37.     Topka(char * boja, int gustina, int radius) : Forma(boja, gustina) { // so argumenti
  38.         this-> radius = radius;
  39.     }
  40.     Topka(const Topka &t) : Forma(t) { // copy konstruktor ne deka treba
  41.         this->radius = t.radius;
  42.     }
  43.     float getMasa() { //За секоја од класите треба да се дефинираат методи getMasa()
  44.         return gustina * getVolumen();//Масата на играчката се пресметува како производ од волуменот
  45.     } //и густината нa играчката.
  46.     float getVolumen() { //и getVolumen().
  47.         return (4.0/3) * 3.14 * pow(this->radius, 3);
  48.     } //За PI користете ја вредноста 3.14.
  49.     float getPlostina() { //Истата да се имплементира во класите Kocka и Topka
  50.        return getVolumen() * gustina;
  51.     }
  52. };
  53. class Kocka : public Forma, public Igrachka {
  54. private:
  55. int visina, sirina, dlabocina; //додека за коцките целосните димензии (висина, ширина и длабочина – int).
  56. public:
  57. Kocka() {
  58.     this->visina = 0;
  59.     this->sirina = 0;
  60.     this-> dlabocina = 0;
  61. }
  62. Kocka(char * boja, int gustina, int visina, int sirina, int dlabocina) : Forma(boja, gustina) {
  63.     this->visina = visina;
  64.     this->sirina = sirina;
  65.     this->dlabocina = dlabocina;
  66. }
  67. float getMasa() {
  68. return this->getVolumen() * this->gustina;
  69. }
  70. float getVolumen() {
  71.     return this->visina * this-> sirina * this->dlabocina;
  72. }
  73. float getPlostina() {
  74. return 2*(this->dlabocina*this->sirina + this->dlabocina*this->visina + this->sirina*this->visina);
  75. }
  76. };
  77. int main() { //Во функцијата main да се декларира
  78.     int n;
  79.     cin>>n;
  80. Igrachka ** kupche = new Igrachka * [n];  //променлива kupche што претставува
  81.     //динамички алоцирана низа кон Igrachka.
  82. char boja[20];
  83.     int gustina;
  84. int type;
  85. int visina;
  86. int sirina;
  87. int dlabocina;
  88. int radius;
  89.    for(int i=0;i<n;i++) {  //Во зависност од првиот влезен параметар
  90.        cin>>type;//се внесуваат објекти од класите Topka или Kocka
  91. if(type == 1) { //(1 - се внесува топка
  92.     cin>>boja>>gustina>>radius;
  93.     kupche[i] = new Topka(boja, gustina, radius);
  94. }
  95. if(type == 2) {//2 - се внесува коцка).
  96.     cin>>boja>>gustina>>visina>>sirina>>dlabocina;
  97.     kupche[i] = new Kocka(boja, gustina, visina, sirina, dlabocina);
  98. }
  99. }
  100.    char bojap[20];
  101. int gustinap;
  102. int ap;
  103. int bp;
  104. int cp;//Од тастатура да се внесат податоци за коцката на Петра Kocka petra.
  105. cin>>bojap>>gustinap>>ap>>bp>>cp;
  106. Kocka petra(bojap, gustinap, ap, bp, cp);
  107. double total = 0.0;
  108. for(int i=0; i<n; i++) {// Dа се отпечати DA ако
  109. total = total + kupche[i]->getMasa(); //вкупната маса на сите играчки е поголема
  110. }
  111. if(total > petra.getMasa()) //од масата на играчката на Петра,
  112. cout<<"DA"<<endl;
  113. else cout<<"NE"<<endl;//а NE во спротивно.
  114. double maxvolumen = kupche[0]->getVolumen(); // Разликата по апсолутна вредност на      
  115. double minplostina = kupche[0]->getPlostina(); // Разликата по апсолутна вредност на
  116. for(int i=1; i<n; i++) {
  117.     if(kupche[i]->getVolumen() > maxvolumen) //волуменот на играчката со максимален волумен
  118.    maxvolumen = kupche[i]->getVolumen();//во купчето и волуменот на коцката на Петра. Форматот е:
  119.     if(kupche[i]->getPlostina() < minplostina)//плоштината на играчката со минимална плоштина
  120.     minplostina = kupche[i]->getPlostina();// во купчето и плоштината на коцката на Петра
  121. }
  122. double razlikavolumen, razlikaplostina;
  123. razlikavolumen = fabs(maxvolumen - petra.getVolumen());
  124. razlikaplostina = fabs(minplostina - petra.getPlostina());
  125. cout<<"Razlikata e: "<<razlikavolumen<<endl;// Razlikata e: {razlika}
  126. cout<<"Razlikata e: "<<razlikaplostina<<endl;//во истиот формат како и второто барање погоре.
  127.     delete [] kupche;
  128.     return 0;
  129. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement