Advertisement
josiftepe

Untitled

Apr 1st, 2021
101
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 4.41 KB | None | 0 0
  1. #include <iostream>
  2. using namespace std;
  3. class Zichara {
  4. private:
  5.     char *mesto; // dinamicki alocirano pole od znaci
  6.     int cena;
  7. public:
  8.     Zichara() {}
  9.     Zichara(char *m, int c) {
  10.         mesto = new char[strlen(m)];
  11.         strcpy(mesto, m);
  12.         cena = c;
  13.     }
  14.     Zichara(const Zichara &tmp) {
  15.         mesto = new char[strlen(tmp.mesto)];
  16.         strcpy(mesto, tmp.mesto);
  17.         cena = tmp.cena;
  18.     }
  19.     Zichara& operator = (const Zichara &tmp) {
  20.         if(this != &tmp) {
  21.            
  22.             strcpy(mesto, tmp.mesto);
  23.             cena = tmp.cena;
  24.         }
  25.         return *this;
  26.     }
  27.     ~Zichara() {}
  28.     int get_cena() {
  29.         return cena;
  30.     }
  31. };
  32. class PlaninarskiDom {
  33. private:
  34.     char ime[16];
  35.     int cena[2];
  36.     char klasa;
  37.     bool ima_zichara;
  38.     Zichara *z;
  39. public:
  40.     PlaninarskiDom() {}
  41.     PlaninarskiDom(char *i, int c[2], char k) {
  42.         strcpy(ime, i);
  43.         cena[0] = c[0];
  44.         cena[1] = c[1];
  45.         klasa = k;
  46.     }
  47.     PlaninarskiDom(const PlaninarskiDom &tmp) {
  48.         strcpy(ime, tmp.ime);
  49.         cena[0] = tmp.cena[0];
  50.         cena[1] = tmp.cena[1];
  51.         klasa = tmp.klasa;
  52.         ima_zichara = tmp.ima_zichara;
  53.         z = tmp.z;
  54.     }
  55.     PlaninarskiDom& operator = (const PlaninarskiDom &tmp) {
  56.         if(this != &tmp) {
  57.             strcpy(ime, tmp.ime);
  58.             cena[0] = tmp.cena[0];
  59.             cena[1] = tmp.cena[1];
  60.             klasa = tmp.klasa;
  61.             ima_zichara = tmp.ima_zichara;
  62.             z = tmp.z;
  63.         }
  64.         return *this;
  65.     }
  66.     ~PlaninarskiDom() {}
  67.     PlaninarskiDom& operator -- () {
  68.         if(klasa != 'F')
  69.             klasa++;
  70.         return *this;
  71.     }
  72.     bool operator <= (char c) {
  73.         if(klasa <= c) {
  74.             return false;
  75.         }
  76.         return true;
  77.    
  78.     }
  79.     void presmetajDnevenPrestoj(int den, int mesec, int &c) {
  80.         c=0;
  81.         if(den < 1 or den > 31 or mesec < 1 or mesec > 12) {
  82.             throw 0;
  83.         }
  84.         else {
  85.             int vkupna_cena = 0;
  86.             if(mesec >= 4 and mesec <= 8) {
  87.                 vkupna_cena = cena[0];
  88.             }
  89.             else {
  90.                 vkupna_cena = cena[1];
  91.             }
  92.             if(ima_zichara == true) {
  93.                 vkupna_cena += z->get_cena();
  94.             }
  95.             c = vkupna_cena;
  96.         }
  97.     }
  98.     void setZichara(Zichara tmp) {
  99.         ima_zichara = true;
  100.         z = &tmp;
  101.     }
  102.     friend ostream& operator << (ostream &stream,PlaninarskiDom tmp);
  103.    
  104. };
  105. ostream& operator << (ostream &stream,PlaninarskiDom tmp) {
  106.     stream << tmp.ime << " " << "klasa:" << tmp.klasa;
  107.     if(tmp.ima_zichara == true) {
  108.         stream << " so Zichara" ;
  109.     }
  110.     stream << endl;
  111.     return stream;
  112. }
  113. int main(){
  114.  
  115.    PlaninarskiDom p; //креирање на нов објект од класата планинарски дом
  116.  
  117.    //во следниот дел се вчитуваат информации за планинарскиот дом
  118.    char imePlaninarskiDom[15],mestoZichara[30],klasa;
  119.    int ceni[12];
  120.    int dnevnakartaZichara;
  121.    bool daliZichara;
  122.    cin>>imePlaninarskiDom;
  123.    for (int i=0;i<2;i++) cin>>ceni[i];
  124.    cin>>klasa;
  125.    cin>>daliZichara;
  126.  
  127.    //во следниот дел се внесуваат информации и за жичарата ако постои
  128.    if (daliZichara) {
  129.       cin>>mestoZichara>>dnevnakartaZichara;
  130.       PlaninarskiDom pom(imePlaninarskiDom,ceni,klasa);
  131.       Zichara r(mestoZichara,dnevnakartaZichara);
  132.       pom.setZichara(r);
  133.       p=pom;
  134.    }
  135.    else{
  136.       PlaninarskiDom *pok=new PlaninarskiDom(imePlaninarskiDom,ceni,klasa);
  137.       p=*pok;
  138.    }
  139.  
  140.    //се намалува класата на планинарскиот дом за 2
  141.    --p;
  142.    --p;
  143.  
  144.    int cena;
  145.    int den,mesec;
  146.    cin>>den>>mesec;
  147.    try{
  148.    p.presmetajDnevenPrestoj(den,mesec,cena); //тука се користи функцијата presmetajDnevenPrestoj
  149.    cout<<"Informacii za PlaninarskiDomot:"<<endl;
  150.    cout<<p;
  151.    if (p<='D')
  152.        cout<<"Planinarskiot dom za koj se vneseni informaciite ima klasa poniska ili ista so D\n";
  153.        
  154.    cout<<"Cenata za "<<den<<"."<<mesec<<" e "<<cena; //се печати цената за дадениот ден и месец
  155.    }
  156.    catch (int){
  157.       cout<<"Mesecot ili denot e greshno vnesen!";
  158.    }
  159. }
  160. /*
  161.  Pelister 21 31 E
  162.  1
  163.  Molika 20
  164.  3 3
  165.  **/
  166.  
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement