#include #include #include using namespace std; class Forma { //Во една игротека има 2 типа играчки: топки и коцки. Коцките и топките protected:// се опишани со параметри како што се: char boja[20]; //боја (char *) int gustina; //густина (int). public: Forma() { // defaulten strcpy(this->boja, ""); this->gustina = 0; } Forma(char * boja, int gustina) { // konstruktor so argumenti strcpy(this->boja, boja); this->gustina = gustina; } Forma(const Forma &f) { // copy konstruktor ne deka treba ama ae strcpy(this->boja, f.boja); this->gustina = f.gustina; } }; class Igrachka {//Во класата Igrachka да се додаде public: virtual float getVolumen() = 0; virtual float getMasa() = 0; //Дополнителни барања: virtual float getPlostina() = 0; //уште една чисто виртуелна функција float getPlostina(). }; class Topka : public Forma, public Igrachka { private: int radius; //Дополнително за топките се знае и радиусот (int) public: Topka() { // defaulten this->radius = 0; } Topka(char * boja, int gustina, int radius) : Forma(boja, gustina) { // so argumenti this-> radius = radius; } Topka(const Topka &t) : Forma(t) { // copy konstruktor ne deka treba this->radius = t.radius; } float getMasa() { //За секоја од класите треба да се дефинираат методи getMasa() return gustina * getVolumen();//Масата на играчката се пресметува како производ од волуменот } //и густината нa играчката. float getVolumen() { //и getVolumen(). return (4.0/3) * 3.14 * pow(this->radius, 3); } //За PI користете ја вредноста 3.14. float getPlostina() { //Истата да се имплементира во класите Kocka и Topka return getVolumen() * gustina; } }; class Kocka : public Forma, public Igrachka { private: int visina, sirina, dlabocina; //додека за коцките целосните димензии (висина, ширина и длабочина – int). public: Kocka() { this->visina = 0; this->sirina = 0; this-> dlabocina = 0; } Kocka(char * boja, int gustina, int visina, int sirina, int dlabocina) : Forma(boja, gustina) { this->visina = visina; this->sirina = sirina; this->dlabocina = dlabocina; } float getMasa() { return this->getVolumen() * this->gustina; } float getVolumen() { return this->visina * this-> sirina * this->dlabocina; } float getPlostina() { return 2*(this->dlabocina*this->sirina + this->dlabocina*this->visina + this->sirina*this->visina); } }; int main() { //Во функцијата main да се декларира int n; cin>>n; Igrachka ** kupche = new Igrachka * [n]; //променлива kupche што претставува //динамички алоцирана низа кон Igrachka. char boja[20]; int gustina; int type; int visina; int sirina; int dlabocina; int radius; for(int i=0;i>type;//се внесуваат објекти од класите Topka или Kocka if(type == 1) { //(1 - се внесува топка cin>>boja>>gustina>>radius; kupche[i] = new Topka(boja, gustina, radius); } if(type == 2) {//2 - се внесува коцка). cin>>boja>>gustina>>visina>>sirina>>dlabocina; kupche[i] = new Kocka(boja, gustina, visina, sirina, dlabocina); } } char bojap[20]; int gustinap; int ap; int bp; int cp;//Од тастатура да се внесат податоци за коцката на Петра Kocka petra. cin>>bojap>>gustinap>>ap>>bp>>cp; Kocka petra(bojap, gustinap, ap, bp, cp); double total = 0.0; for(int i=0; igetMasa(); //вкупната маса на сите играчки е поголема } if(total > petra.getMasa()) //од масата на играчката на Петра, cout<<"DA"<getVolumen(); // Разликата по апсолутна вредност на double minplostina = kupche[0]->getPlostina(); // Разликата по апсолутна вредност на for(int i=1; igetVolumen() > maxvolumen) //волуменот на играчката со максимален волумен maxvolumen = kupche[i]->getVolumen();//во купчето и волуменот на коцката на Петра. Форматот е: if(kupche[i]->getPlostina() < minplostina)//плоштината на играчката со минимална плоштина minplostina = kupche[i]->getPlostina();// во купчето и плоштината на коцката на Петра } double razlikavolumen, razlikaplostina; razlikavolumen = fabs(maxvolumen - petra.getVolumen()); razlikaplostina = fabs(minplostina - petra.getPlostina()); cout<<"Razlikata e: "<