Advertisement
Chaushki

Voz

Mar 31st, 2022
774
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.97 KB | None | 0 0
  1. /*Да се креира класа Patnik во која се чуваат податоци за патниците на еден воз и тоа: име (низа од максимум 100 знаци), класа на вагон во која се вози (цел број 1 или 2) и велосипед (булова променлива). (5 поени)
  2.  
  3. За оваа класа да се преоптоварат:
  4.  
  5. Оператор << - за печатење на информациите за патникот во формат: (5 поени)
  6. Име на патник
  7.  
  8. Бројот на класата (1 или 2)
  9.  
  10. Дали има велосипед?
  11.  
  12. Потоа да се креира клaса Voz во која се чува: крајна дестинација (низа од максимум 100 знаци), динамички алоцирана низа од објекти од класата Patnik, како и број на елементи во низата (цел број), број на дозволени велосипеди (цел број). (5 поени)
  13.  
  14. За класата да се обезбедат:
  15.  
  16. Оператор += – за додавање нов патник во воз. Патник со велосипед ќе може да се качи во воз само ако возот го дозволува тоа. (10 поени)
  17. Оператор << - за печатење на крајната дестинација до која вози и листата на патници (5 поени)
  18. Функција со потпис: patniciNemaMesto(). Со оваа функција се пресметува вкупниот број на патници (од 1-ва класа и 2-ра класа) за кои нема место да влезат во возот со велосипед. Притоа треба да се внимава дека во пресметувањето на вкупниот број патници со велосипеди кои ќе влезат во возот прво треба да се земат предвид патниците од 1-ва класа, а потоа се дозволува да влегуваат патниците од 2-ра класа се додека не се достигне максималниот број на дозволени велосипеди во возот. На крај се печати бројот на патници со велосипеди кои остануваат (не влегуваат во возот) од 1-ва класа, а потоа од 2-ра класа. (10 поени)
  19. */
  20. #include<iostream>
  21. #include<cstring>
  22. using namespace std;
  23.  
  24. class Patnik {
  25.  
  26. private:
  27.     char name[100];
  28.     int klasa;
  29.     bool velosiped;
  30. public:
  31.     //Constructor
  32.     Patnik(char *name = " ", int klasa = 0, bool velosiped = false) {
  33.         strcpy(this->name, name);
  34.         this->klasa = klasa;
  35.         this->velosiped = velosiped;
  36.     }
  37.  
  38.     //copy-constructor
  39.     Patnik(const Patnik &tmp) {
  40.         strcpy(name, tmp.name);
  41.         klasa = tmp.klasa;
  42.         velosiped = tmp.velosiped;
  43.     }
  44.  
  45.     //Overloaded operator = for future use
  46.     Patnik &operator=(const Patnik &tmp) {
  47.         if (this != &tmp) {
  48.             strcpy(name, tmp.name);
  49.             klasa = tmp.klasa;
  50.             velosiped = tmp.velosiped;
  51.         }
  52.         return *this;
  53.     }
  54.  
  55.     //Overloading operator <<
  56.     friend ostream &operator<<(ostream &o, Patnik &tmp) {
  57.         o << tmp.name << endl << tmp.klasa << endl << tmp.velosiped << endl;
  58.         return o;
  59.     }
  60.  
  61.     //Destructor
  62.     ~Patnik() {}
  63.  
  64.     //get and set
  65.     bool getVelosiped() { return this->velosiped; }
  66.     int getKlasa() { return this->klasa; }
  67. };
  68.  
  69. class Voz {
  70.  
  71. private:
  72.     char finalDestination[100];
  73.     Patnik *patnici;
  74.     int brPatnici;
  75.     int maxVelosipedi;
  76. public:
  77.     //Default constructor
  78.     Voz() {}
  79.  
  80.     //Constructor with multiple args
  81.     Voz(char *finalDestination, Patnik *patnici, int brPatnici, int maxVelosipedi) {
  82.         strcpy(this->finalDestination, finalDestination);
  83.         this->patnici = new Patnik[brPatnici + 1];
  84.         for (int i = 0; i < brPatnici; i++) {
  85.             this->patnici[i] = patnici[i];
  86.         }
  87.         this->brPatnici = brPatnici;
  88.         this->maxVelosipedi = maxVelosipedi;
  89.     }
  90.  
  91.     //Overloaded constructor
  92.     Voz(char *finalDestination, int maxVelosipedi) {
  93.         strcpy(this->finalDestination, finalDestination);
  94.         this->maxVelosipedi = maxVelosipedi;
  95.         patnici = NULL;
  96.         brPatnici = 0;
  97.     }
  98.  
  99.     //Overloading operator += for adding passengers
  100.     Voz &operator+=(Patnik &newPatnik) {
  101.         if ((!newPatnik.getVelosiped() && maxVelosipedi == 0) || maxVelosipedi != 0) {
  102.             Patnik *tmp = new Patnik[brPatnici + 1];
  103.             for (int i = 0; i < brPatnici; i++) {
  104.                 tmp[i] = patnici[i];
  105.             }
  106.             delete[]patnici;
  107.             patnici = new Patnik[brPatnici + 1];
  108.             for (int i = 0; i < brPatnici; i++) {
  109.                 patnici[i] = tmp[i];
  110.             }
  111.             patnici[brPatnici] = newPatnik;
  112.             brPatnici++;
  113.         }
  114.         return *this;
  115.     }
  116.  
  117.     //Overloading operator <<
  118.     friend ostream &operator<<(ostream &o, Voz &tmp) {
  119.         o << tmp.finalDestination << endl;
  120.         for (int i = 0; i < tmp.brPatnici; i++) {
  121.             o << tmp.patnici[i] << endl;
  122.         }
  123.         return o;
  124.     }
  125.  
  126.     //Number of passengers that couldn't get on
  127.     void patniciNemaMesto() {
  128.         int prvaKlasa = 0, vtoraKlasa = 0;
  129.         for (int i = 0; i < brPatnici; i++) {
  130.             if (patnici[i].getKlasa() == 1 && patnici[i].getVelosiped() == true) {
  131.                 prvaKlasa++;
  132.             }
  133.             else if (patnici[i].getKlasa() == 2 && patnici[i].getVelosiped() == true) {
  134.                 vtoraKlasa++;
  135.             }
  136.         }
  137.  
  138.         if (prvaKlasa >= maxVelosipedi) {
  139.             prvaKlasa -= maxVelosipedi;
  140.         }
  141.         else if (prvaKlasa < maxVelosipedi) {
  142.             maxVelosipedi -= prvaKlasa;
  143.             prvaKlasa = 0;
  144.  
  145.             if (vtoraKlasa >= maxVelosipedi) {
  146.                 vtoraKlasa -= maxVelosipedi;
  147.             }
  148.             else if (vtoraKlasa < maxVelosipedi) {
  149.                 vtoraKlasa = 0;
  150.             }
  151.         }
  152.         cout << "Brojot na patnici od 1-va klasa koi ostanale bez mesto e: " << prvaKlasa << endl;
  153.         cout << "Brojot na patnici od 2-ra klasa koi ostanale bez mesto e: " << vtoraKlasa << endl;
  154.     }
  155. };
  156.  
  157.  
  158. int main()
  159. {
  160.     Patnik p;
  161.     char ime[100], destinacija[100];
  162.     int n;
  163.     bool velosiped;
  164.     int klasa;
  165.     int maxv;
  166.     cin >> destinacija >> maxv;
  167.     cin >> n;
  168.     Voz v(destinacija, maxv);
  169.     //cout<<v<<endl;
  170.     for (int i = 0; i < n; i++) {
  171.         cin >> ime >> klasa >> velosiped;
  172.         Patnik p(ime, klasa, velosiped);
  173.         //cout<<p<<endl;
  174.         v += p;
  175.     }
  176.     cout << v;
  177.     v.patniciNemaMesto();
  178.  
  179.     return 0;
  180. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement