Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /*Да се креира класа Patnik во која се чуваат податоци за патниците на еден воз и тоа: име (низа од максимум 100 знаци), класа на вагон во која се вози (цел број 1 или 2) и велосипед (булова променлива). (5 поени)
- За оваа класа да се преоптоварат:
- Оператор << - за печатење на информациите за патникот во формат: (5 поени)
- Име на патник
- Бројот на класата (1 или 2)
- Дали има велосипед?
- Потоа да се креира клaса Voz во која се чува: крајна дестинација (низа од максимум 100 знаци), динамички алоцирана низа од објекти од класата Patnik, како и број на елементи во низата (цел број), број на дозволени велосипеди (цел број). (5 поени)
- За класата да се обезбедат:
- Оператор += – за додавање нов патник во воз. Патник со велосипед ќе може да се качи во воз само ако возот го дозволува тоа. (10 поени)
- Оператор << - за печатење на крајната дестинација до која вози и листата на патници (5 поени)
- Функција со потпис: patniciNemaMesto(). Со оваа функција се пресметува вкупниот број на патници (од 1-ва класа и 2-ра класа) за кои нема место да влезат во возот со велосипед. Притоа треба да се внимава дека во пресметувањето на вкупниот број патници со велосипеди кои ќе влезат во возот прво треба да се земат предвид патниците од 1-ва класа, а потоа се дозволува да влегуваат патниците од 2-ра класа се додека не се достигне максималниот број на дозволени велосипеди во возот. На крај се печати бројот на патници со велосипеди кои остануваат (не влегуваат во возот) од 1-ва класа, а потоа од 2-ра класа. (10 поени)
- */
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Patnik {
- private:
- char name[100];
- int klasa;
- bool velosiped;
- public:
- //Constructor
- Patnik(char *name = " ", int klasa = 0, bool velosiped = false) {
- strcpy(this->name, name);
- this->klasa = klasa;
- this->velosiped = velosiped;
- }
- //copy-constructor
- Patnik(const Patnik &tmp) {
- strcpy(name, tmp.name);
- klasa = tmp.klasa;
- velosiped = tmp.velosiped;
- }
- //Overloaded operator = for future use
- Patnik &operator=(const Patnik &tmp) {
- if (this != &tmp) {
- strcpy(name, tmp.name);
- klasa = tmp.klasa;
- velosiped = tmp.velosiped;
- }
- return *this;
- }
- //Overloading operator <<
- friend ostream &operator<<(ostream &o, Patnik &tmp) {
- o << tmp.name << endl << tmp.klasa << endl << tmp.velosiped << endl;
- return o;
- }
- //Destructor
- ~Patnik() {}
- //get and set
- bool getVelosiped() { return this->velosiped; }
- int getKlasa() { return this->klasa; }
- };
- class Voz {
- private:
- char finalDestination[100];
- Patnik *patnici;
- int brPatnici;
- int maxVelosipedi;
- public:
- //Default constructor
- Voz() {}
- //Constructor with multiple args
- Voz(char *finalDestination, Patnik *patnici, int brPatnici, int maxVelosipedi) {
- strcpy(this->finalDestination, finalDestination);
- this->patnici = new Patnik[brPatnici + 1];
- for (int i = 0; i < brPatnici; i++) {
- this->patnici[i] = patnici[i];
- }
- this->brPatnici = brPatnici;
- this->maxVelosipedi = maxVelosipedi;
- }
- //Overloaded constructor
- Voz(char *finalDestination, int maxVelosipedi) {
- strcpy(this->finalDestination, finalDestination);
- this->maxVelosipedi = maxVelosipedi;
- patnici = NULL;
- brPatnici = 0;
- }
- //Overloading operator += for adding passengers
- Voz &operator+=(Patnik &newPatnik) {
- if ((!newPatnik.getVelosiped() && maxVelosipedi == 0) || maxVelosipedi != 0) {
- Patnik *tmp = new Patnik[brPatnici + 1];
- for (int i = 0; i < brPatnici; i++) {
- tmp[i] = patnici[i];
- }
- delete[]patnici;
- patnici = new Patnik[brPatnici + 1];
- for (int i = 0; i < brPatnici; i++) {
- patnici[i] = tmp[i];
- }
- patnici[brPatnici] = newPatnik;
- brPatnici++;
- }
- return *this;
- }
- //Overloading operator <<
- friend ostream &operator<<(ostream &o, Voz &tmp) {
- o << tmp.finalDestination << endl;
- for (int i = 0; i < tmp.brPatnici; i++) {
- o << tmp.patnici[i] << endl;
- }
- return o;
- }
- //Number of passengers that couldn't get on
- void patniciNemaMesto() {
- int prvaKlasa = 0, vtoraKlasa = 0;
- for (int i = 0; i < brPatnici; i++) {
- if (patnici[i].getKlasa() == 1 && patnici[i].getVelosiped() == true) {
- prvaKlasa++;
- }
- else if (patnici[i].getKlasa() == 2 && patnici[i].getVelosiped() == true) {
- vtoraKlasa++;
- }
- }
- if (prvaKlasa >= maxVelosipedi) {
- prvaKlasa -= maxVelosipedi;
- }
- else if (prvaKlasa < maxVelosipedi) {
- maxVelosipedi -= prvaKlasa;
- prvaKlasa = 0;
- if (vtoraKlasa >= maxVelosipedi) {
- vtoraKlasa -= maxVelosipedi;
- }
- else if (vtoraKlasa < maxVelosipedi) {
- vtoraKlasa = 0;
- }
- }
- cout << "Brojot na patnici od 1-va klasa koi ostanale bez mesto e: " << prvaKlasa << endl;
- cout << "Brojot na patnici od 2-ra klasa koi ostanale bez mesto e: " << vtoraKlasa << endl;
- }
- };
- int main()
- {
- Patnik p;
- char ime[100], destinacija[100];
- int n;
- bool velosiped;
- int klasa;
- int maxv;
- cin >> destinacija >> maxv;
- cin >> n;
- Voz v(destinacija, maxv);
- //cout<<v<<endl;
- for (int i = 0; i < n; i++) {
- cin >> ime >> klasa >> velosiped;
- Patnik p(ime, klasa, velosiped);
- //cout<<p<<endl;
- v += p;
- }
- cout << v;
- v.patniciNemaMesto();
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement