Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- using namespace std;
- class Vozilo { //Да се дефинира класа Vozilo која
- private: //ќе содржи информација за
- double masa; //неговата маса (децимален број),
- int sirina, visina; //ширина и висина (цели броеви).
- public:
- Vozilo() { // defaulten konstruktor
- this-> masa = 0;
- this-> sirina = 0;
- this-> visina = 0;
- }
- Vozilo (double masa, int sirina, int visina) { // konstruktor so argumenti
- this->masa = masa;
- this-> sirina = sirina;
- this-> visina = visina;
- }
- Vozilo (const Vozilo &v) { // copy konstruktor
- this->masa = v.masa;
- this-> sirina = v.sirina;
- this-> visina = v.visina;
- }
- ~Vozilo() {} // destruktor
- double getmasa() {
- return masa;
- }
- int getsirina() {
- return sirina;
- }
- virtual int vratiDnevnaCena() = 0;//Да се дефинира виртуелна функција int vratiDnevnaCena() во класата Vozilo
- };
- class Avtomobil : public Vozilo { //Од оваа класа да се изведе класата Автомобил
- private: //во која како дополнителна информација се чува
- int brojnavrati; //информацијата за бројот на врати (цел број).
- public:
- Avtomobil() { // defaulten konstruktor
- this->brojnavrati = 0;
- }
- Avtomobil(double masa, int sirina, int visina, int brojnavrati) : Vozilo(masa, sirina, visina) {
- this->brojnavrati = brojnavrati;
- } // konstruktor so argumenti
- Avtomobil (const Avtomobil &at) : Vozilo(at) { // copy konstruktor
- this->brojnavrati = at.brojnavrati;
- }
- ~Avtomobil() {} // destruktor
- int vratiDnevnaCena() { // истата да се преоптовари во сите изведени класи.
- if (this->brojnavrati<5) //За секој автомобил со помалку од 5 врати
- return 100; //дневната цена е 100
- else return 130; //а инаку е 130 денари.
- }
- };
- class Avtobus : public Vozilo { //Oд класата возило да се изведе и класата Автобус
- private: //во која се чуваат информации и за
- int brojnapatnici; //бројот на патници кои може да ги пренесува.
- public:
- Avtobus() { // defaulten
- this->brojnapatnici = 0;
- }
- Avtobus(double masa, int sirina, int visina, int brojnapatnici) : Vozilo (masa, sirina, visina) {
- this->brojnapatnici = brojnapatnici;
- } // konstruktor so argumenti
- Avtobus(const Avtobus &ab) : Vozilo (ab) { // copy konstruktor
- this->brojnapatnici = ab. brojnapatnici;
- }
- ~Avtobus() {} // destruktor
- int vratiDnevnaCena() { // За секој
- return this->brojnapatnici * 5; //автобус цената е 5 денари по лице кое може да се пренесува.
- }
- };
- class Kamion : public Vozilo { //Од класата возило да се изведе класата Камион
- private: //во која се чуваат информации и за
- double maxmasa; //максималната маса која може да се товари на него (децимална вредност).
- public:
- Kamion() { // defaulten konstruktor
- this->maxmasa = 0;
- }
- Kamion(double masa, int sirina, int visina, double maxmasa) : Vozilo (masa, sirina, visina) {
- this->maxmasa = maxmasa;
- } // konstruktor so argumenti
- Kamion (const Kamion &k) : Vozilo (k) { // copy konstruktor
- this->maxmasa = k.maxmasa;
- }
- ~Kamion() {} // destruktor
- int vratiDnevnaCena() { //За секој камион цената се пресметува со формулата:
- return (getmasa()+this->maxmasa)*0.02; // (masa+nosivost)*0.02
- }
- }; //За сите класи да се креираат погодни контруктори, како и set и get функции.
- class ParkingPlac { //Да се дефинира класа ParkingPlac за која се чува
- private:
- Vozilo **v; //динамичко алоцирано поле од покажувачи кон Vozilo
- int brelementi; //како и бројот на елементи во полето.
- public: //Во оваа класа да се дефинираат:
- ParkingPlac() { // default konstruktor
- this->v=new Vozilo*[1];
- this->brelementi = 0;
- }
- ParkingPlac(Vozilo **v, int brelementi) { //конструктор
- this->brelementi=brelementi;
- this-> v = new Vozilo * [brelementi];
- for(int i=0; i<brelementi; i++)
- this->v[i] = v[i];
- }
- ~ParkingPlac() { //деструктор
- for(int i=0; i<brelementi; i++)
- delete this->v[i];
- }
- ParkingPlac &operator +=(Vozilo *voz) {//операторот += за додавање на ново возило
- Vozilo ** tmp = new Vozilo * [brelementi+1];
- for(int i=0; i <brelementi; i++) {
- tmp[i] = v[i];
- }
- tmp[brelementi++] = voz;
- // delete [] v;
- v = tmp;
- return *this;
- } // (аргументот е покажувач кон Vozilo
- int vratiDnevnaZarabotka() { //Во класата ParkingPlac да се додаде следната функција:
- int total=0;
- for(int i=0; i <this->brelementi; i++) //функција int vratiDnevnaZarabotka()
- total = total + v[i]->vratiDnevnaCena();
- return total;
- }// со која се враќа дневната заработка од сите возила на паркингот.
- float presmetajVkupnaMasa() { //функција float presmetajVkupnaMasa() со која се пресметува
- float total=0.0;
- for(int i=0; i <brelementi; i++)
- total = total + v[i]->getmasa();
- return total;
- } // вкупната маса на сите возила во паркинг плацот
- int brojVozilaPoshirokiOd (int l) { // функција int brojVozilaPoshirokiOd(int l) со која се пресметува
- int total=0;
- for(int i=0; i <brelementi; i++) {
- if (v[i]->getsirina() > l)
- total++;
- }
- return total; //бројот на возила кои се пошироки од дадената вредност
- }
- void pecati () { //функција void pecati() со која се печати:
- int koli=0, jsp=0, kamionc=0;
- for(int i=0;i<brelementi;i++){
- Avtomobil* a=dynamic_cast<Avtomobil*>(v[i]);
- if (a!=0) koli++;
- Avtobus* b=dynamic_cast<Avtobus*>(v[i]);
- if (b!=0) jsp++;
- Kamion* k=dynamic_cast<Kamion*>(v[i]);
- if (k!=0) kamionc++;
- }
- cout<<"Brojot na avtomobili e "<<koli;
- cout<<", brojot na avtobusi e "<<jsp;
- cout<<" i brojot na kamioni e "<<kamionc<<"."<<endl;
- }
- int pogolemaNosivostOd (Vozilo &vi) { //функција int pogolemaNosivostOd(Vozilo &v)
- Kamion * k;
- int counter=0;
- for(int i=0; i <brelementi; i++) {
- if( (k = dynamic_cast <Kamion *> (v[i])) ) {
- if(k->getmasa() > vi.getmasa())
- counter++;
- }
- } //во која се враќа бројот на сите камиони кои имаат носивост поголема
- return counter; //од масата на возилото предадено како аргумент.
- }
- };
- int main() {
- ParkingPlac p;
- int n;
- cin>>n;
- int shirina,visina, broj;
- float masa,nosivost;
- for (int i=0; i<n; i++) {
- int type;
- cin>>type;
- if(type==1) {
- cin>>masa>>shirina>>visina>>broj;
- Avtomobil *a=new Avtomobil(masa,shirina,visina,broj);
- p+=a;
- }
- if(type==2) {
- cin>>masa>>shirina>>visina>>broj;
- p+=new Avtobus(masa,shirina,visina,broj);
- }
- if(type==3) {
- cin>>masa>>shirina>>visina>>nosivost;
- p+=new Kamion(masa,shirina,visina,nosivost);
- }
- }
- p.pecati();
- cout<<"\nZarabotkata e "<<p.vratiDnevnaZarabotka()<<endl;
- cout<<"Vkupnata masa e "<<p.presmetajVkupnaMasa()<<endl;
- cout<<"Brojot poshiroki od 5 e "<<p.brojVozilaPoshirokiOd(5)<<endl;
- Avtomobil a(1200,4,3,5);
- cout<<"Brojot na kamioni so nosivost pogolema od avtomobilot e "<<p.pogolemaNosivostOd(a)<<endl;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement