ivana_andreevska

Ispitna/Kolokviumska zadaca 1

May 7th, 2021
209
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 3.21 KB | None | 0 0
  1. #include <iostream>
  2. #include <cstring>
  3. #include <cmath>
  4. using namespace std;
  5.  
  6. class Bogatstvo
  7. {
  8. protected:
  9.     char *adresa;
  10.     char ime[100];
  11.     int pocetna_vrednost;
  12. public:
  13.     Bogatstvo(char* adresa, char* ime, int pocetna_vrednost)
  14.     {
  15.         this->adresa = new char[strlen(adresa) + 1];
  16.         strcpy(this->adresa, adresa);
  17.         strcpy(this->ime, ime);
  18.         this->pocetna_vrednost = pocetna_vrednost;
  19.     }
  20.     Bogatstvo(Bogatstvo& b)
  21.     {
  22.         this->adresa = new char[strlen(b.adresa) + 1];
  23.         strcpy(this->adresa, b.adresa);
  24.         strcpy(this->ime, b.ime);
  25.         this->pocetna_vrednost = b.pocetna_vrednost;
  26.     }
  27.     virtual ~Bogatstvo(){
  28.         delete[]adresa;
  29.     }
  30.  
  31.     virtual double proceneta_cena() = 0;
  32.     //=0 znaci deka teloto ni e prazno vo ovaa funkcija
  33.  
  34.     friend ostream& operator << (ostream& o, Bogatstvo& b)
  35.     {
  36.         o << b.adresa << "-" << b.ime<<"-" << b.pocetna_vrednost << endl;
  37.         return o;
  38.     }
  39.  
  40.     Bogatstvo& operator=(Bogatstvo& b)
  41.     {
  42.         if (this != &b)
  43.         {
  44.             delete[]adresa;
  45.             this->adresa = new char[strlen(b.adresa) + 1];
  46.             strcpy(this->adresa, b.adresa);
  47.             strcpy(this->ime, b.ime);
  48.             this->pocetna_vrednost = b.pocetna_vrednost;
  49.         }
  50.         return *this;
  51.     }
  52. };
  53.  
  54.  
  55. class Zlatnik : public Bogatstvo
  56. {
  57. private:
  58.     char forma[50];
  59. public:
  60.     Zlatnik(char* adresa, char* ime, int pocetna_vrednost, char* forma) :Bogatstvo(adresa, ime, pocetna_vrednost)
  61.     {
  62.         strcpy(this->forma, forma);
  63.     }
  64.  
  65.     double proceneta_cena()
  66.     {
  67.         if (strcmp(forma, "krug") == 0)
  68.             return 2 * pocetna_vrednost;
  69.         if (strcmp(forma, "pravoagolnik") == 0)
  70.             return pocetna_vrednost + 200;
  71.         else
  72.             return pocetna_vrednost + 100;
  73.     }
  74. };
  75.  
  76. class Dijamant :public Bogatstvo {
  77. private:
  78.     float prodzirno;
  79. public:
  80.     Dijamant(char* adresa, char* ime, int pocetna_vrednost, float prodzirno) :Bogatstvo(adresa, ime, pocetna_vrednost)
  81.     {
  82.         this->prodzirno = prodzirno;
  83.     }
  84.  
  85.     double proceneta_cena()
  86.     {
  87.         if (prodzirno < 0,5)
  88.             return prodzirno*(pocetna_vrednost+150);
  89.         else
  90.             return prodzirno*pocetna_vrednost-150;
  91.  
  92.     }
  93. };
  94.  
  95. class Kolekcija {
  96. private:
  97.     Bogatstvo** bog;
  98.     int umetnicki_dela;
  99. public:
  100.     Kolekcija(int umetnicki_dela = 0)
  101.     {
  102.         bog = new Bogatstvo * [umetnicki_dela];
  103.         this->umetnicki_dela = umetnicki_dela;
  104.     }
  105.     ~Kolekcija()
  106.     {}
  107.     void dodadi_bogatstvo(Bogatstvo& b)
  108.     {
  109.         bog[umetnicki_dela] = b;
  110.         umetnicki_dela++;
  111.     }
  112.  
  113.     Bogatstvo& vratiNajbliskoSporednaCenaBogatstvo(int pocetna)
  114.     {
  115.         float razlika = fabs(bog[0]->proceneta_cena() - pocetna);
  116.         int indeks;
  117.         for (int i = 0; i < umetnicki_dela; i++)
  118.         {
  119.             if (fabs(umetnicki_dela[i]->proceneta_cena() - pocetna) < razlika)
  120.                 indeks = i;
  121.         }
  122.         return *bog[indeks];
  123.     }
  124. };
  125.  
  126. int main()
  127. {
  128.     Kolekcija a;
  129.     char ime[100];
  130.     char adresa[100];
  131.     char forma[100];
  132.  
  133.     int poc_vrednost;
  134.     double prodzirnost;
  135.  
  136.     int n;
  137.     cin >> n;
  138.  
  139.     for (int i = 0; i < n; i++) {
  140.         int tip;
  141.         cin >> tip;
  142.         if (tip == 0) {
  143.             cin >> adresa >> ime >> poc_vrednost >> forma;
  144.             a.dodadi_bogatstvo(new Zlatnik(adresa, ime, poc_vrednost, forma));
  145.         }
  146.         else {
  147.             cin >> adresa >> ime >> poc_vrednost >> prodzirnost;
  148.             a.dodadi_bogatstvo(new Dijamant(adresa, ime, poc_vrednost, prodzirnost));
  149.         }
  150.     }
  151.     int pocetna;
  152.     cin >> pocetna;
  153.     cout << a.vratiNajbliskoSporednaCenaBogatstvo(pocetna);
  154.     return 0;
  155. }
  156.  
Advertisement
Add Comment
Please, Sign In to add comment