Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- /* Zicani instrumenti Problem 1 (1 / 1)
- Да се креира хиерархиjа на класи за репрезентациjа на жичани инструменти. За потребите на оваа хиерархиjа да се дефинира класа ZicanInstrument од коjа ќе бидат изведени двете класи Mandolina и Violina.
- Во класата ZicanInstrument се чуваат податоци за:
- името на инструментот (низа од 20 знаци)
- броjот на жици
- основната цена на инструментот.
- За класата Mandolina дополнително се чува неjзината форма (низа од 20 знаци).
- За класата Violina дополнително се чува неjзината големина (децимален броj).
- За секоjа изведените класи треба да се дефинираат соодветните конструктори и следните методи:
- cena() за пресметување на цената на инструментот
- основната цена на мандолината се зголемува за 15% доколку таа има форма во Неаполитански стил (вредноста на променливата форма е “Neapolitan”)
- основната цена на виолината се зголемува за 10% ако неjзината големина има вредност 1/4 (0.25), односно за 20% ако неjзината големина има вредност 1 (1.00)
- проптоварување на операторот ==, коj ги споредува жичаните инструменти според броjот на жици што го имаат
- преоптоварување на операторот << за печатење на сите податоци за жичаните инструменти.
- Да се напише функциjа pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **i, int n) коjа на влез прима жичан инструмент, низа од покажувачи кон жичани инструменти и броj на елементи во низата. Функциjата jа печати цената на сите жичани инструменти од низата кои имаат ист броj на жици како и инструментот проследен како прв аргумент на функциjата.
- Sample input:
- Mandolina_1 10 5000 Nepoznata
- 2
- Mandolina_2 5 3000 Prava
- Mandolina_3 10 8000 Neapolitan
- Violina_1 10 4000 0.25
- Violina_2 10 6000 0.8
- Sample output:
- 9200
- 4400
- 6000
- */
- #include <iostream>
- #include<cstring>
- using namespace std;
- class ZicanInstrument
- {
- protected:
- char ime[20];
- int br_zici;
- float osnovna_cena;
- public:
- ZicanInstrument(char ime[20]="",int br_zici=0,float osnovna_cena=0.0)
- {
- strcpy(this->ime,ime);
- this->br_zici=br_zici;
- this->osnovna_cena=osnovna_cena;
- }
- virtual float cena()
- {
- return this->osnovna_cena;
- }
- virtual int getBr_zici()
- {
- return this->br_zici;
- }
- bool operator== (ZicanInstrument &z)
- {
- return this->br_zici == z.br_zici;
- }
- friend ostream &operator<< (ostream &output, ZicanInstrument &z)
- {
- output<<z.ime<<" "<<z.br_zici<<" "<<z.osnovna_cena<<endl;
- return output;
- }
- };
- class Mandolina : public ZicanInstrument
- {
- private:
- char forma[20];
- public:
- Mandolina(char ime[20]="",int br_zici=0,float osnovna_cena=0.0,char forma[20]=""):ZicanInstrument(ime,br_zici,osnovna_cena)
- {
- strcpy(this->forma,forma);
- }
- float cena()
- {
- if(strcmp(forma,"Neapolitan")==0)
- {
- return osnovna_cena+(osnovna_cena*0.15);
- }
- cout<<"cena: ";
- return osnovna_cena;
- }
- int getBr_zici()
- {
- return this->br_zici;
- }
- bool operator==(Mandolina &m)
- {
- return (this->br_zici == m.br_zici);
- }
- friend ostream &operator<< (ostream &output, Mandolina &m)
- {
- output<<m.ime<<" "<<m.br_zici<<" "<<m.osnovna_cena<<endl;
- return output;
- }
- };
- class Violina : public ZicanInstrument
- {
- private:
- float golemina;
- public:
- Violina(char ime[20]="",int br_zici=0,float osnovna_cena=0.0,float golemina=0.0):ZicanInstrument(ime,br_zici,osnovna_cena)
- {
- this->golemina=golemina;
- }
- float cena()
- {
- if(golemina==0.25)
- return osnovna_cena+(osnovna_cena*0.1);
- else if(golemina==1)
- return osnovna_cena+(osnovna_cena*0.2);
- return osnovna_cena;
- }
- int getBr_zici()
- {
- return this->br_zici;
- }
- bool operator== (Violina &v)
- {
- return this->br_zici == v.br_zici;
- }
- friend ostream &operator<< (ostream &output, Violina &v)
- {
- output<<v.ime<<" "<<v.br_zici<<" "<<v.osnovna_cena<<endl;
- return output;
- }
- };
- void pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **i, int n)
- {
- for(int k=0;k<n;k++)
- {
- if(i[k]->getBr_zici()==zi.getBr_zici())
- {
- cout<<i[k]->cena()<<endl;
- }
- }
- }
- int main() {
- char ime[20];
- int brojZici;
- float osnovna_cena;
- char forma[20];
- cin >> ime >> brojZici >> osnovna_cena >> forma;
- Mandolina m(ime, brojZici, osnovna_cena, forma);
- int n;
- cin >> n;
- ZicanInstrument **zi = new ZicanInstrument*[2 * n];
- for(int i = 0; i < n; ++i) {
- cin >> ime >> brojZici >> osnovna_cena >> forma;
- zi[i] = new Mandolina(ime, brojZici, osnovna_cena, forma);
- }
- for(int i = 0; i < n; ++i) {
- float golemina;
- cin >> ime >> brojZici >> osnovna_cena >> golemina;
- zi[n + i] = new Violina(ime, brojZici, osnovna_cena, golemina);
- }
- pecatiInstrumenti(m, zi, 2 * n);
- for(int i = 0; i < 2 * n; ++i) {
- delete zi[i];
- }
- delete [] zi;
- return 0;
- }
- /* Возило Problem 1 (0 / 0)
- Да се дефинира класа Vozilo која ќе содржи информација за неговата маса (децимален број), ширина и висина (цели броеви).
- Од оваа класа да се изведе класата Автомобил во која како дополнителна информација се чува информацијата за бројот на врати (цел број).
- Од класата возило да се изведе и класата Автобус во која се чуваат информации и за бројот на патници кои може да ги пренесува.
- Од класата возило да се изведе класата Камион во која се чуваат информации и за максималната маса која може да се товари на него (децимална вредност).
- За сите класи да се креираат погодни контруктори, како и set и get функции.
- Да се дефинира класа ParkingPlac за која се чува динамичко алоцирано поле од покажувачи кон Vozilo, како и бројот на елементи во полето. Во оваа класа да се дефинираат:
- конструктор
- деструктор
- операторот += за додавање на ново возило (аргументот е покажувач кон Vozilo)
- функција float presmetajVkupnaMasa() со која се пресметува вкупната маса на сите возила во паркинг плацот
- функција int brojVozilaPoshirokiOd(int l) со која се пресметува бројот на возила кои се пошироки од дадената вредност
- функција void pecati() со која се печати: Broot na avtomobili e X, brojot na avtobusi e Y i brojot na kamioni e Z.
- функција int pogolemaNosivostOd(Vozilo& v) во која се враќа бројот на сите камиони кои имаат носивост поголема од масата на возилото предадено како аргумент.
- Да се дефинира виртуелна функција int vratiDnevnaCena() во класата Vozilo и истата да се преоптовари во сите изведени класи. За секој автомобил со помалку од 5 врати дневната цена е 100, а инаку е 130 денари. За секој камион цената се пресметува со формулата: (masa+nosivost)*0.02. За секој автобус цената е 5 денати по лице кое може да се пренесува.
- Во класата ParkingPlac да се додаде следната функција: - функција int vratiDnevnaZarabotka() со која се враќа дневната заработка од сите возила на паркингот.
- Sample input
- 5
- 1 1300 3 2 3
- 2 4500 10 4 45
- 3 6000 8 5 2000
- 1 2100 3 3 5
- 2 4200 9 5 52
- Sample output:
- Broot na avtomobili e 2, brojot na avtobusi e 2 i brojot na kamioni e 1.
- Zarabotkata e 875
- Vkupnata masa e 18100
- Brojot poshiroki od 5 e 3
- Brojot na kamioni so nosivost pogolema od avtomobilot e 1
- */
- #include <iostream>
- using namespace std;
- class Vozilo
- {
- protected:
- float masa;
- int shirina;
- int visina;
- public:
- Vozilo(float masa=0.0,int shirina=0,int visina=0)
- {
- this->masa=masa;
- this->shirina=shirina;
- this->visina=visina;
- }
- float getMasa() { return this->masa; }
- int getShirina() { return this->shirina; }
- int getVisina() { return this->visina; }
- void setMasa(float m) { this->masa=m; }
- void setShirina(int s) { this->shirina=s; }
- void setVisina(int v) { this->visina=v ;}
- virtual int vratiDnevnaCena()=0;
- };
- class Avtomobil : public Vozilo
- {
- protected:
- int br_vrati;
- public:
- Avtomobil(float masa=0.0,int shirina=0,int visina=0,int br_vrati=0):Vozilo(masa,shirina,visina)
- {
- this->br_vrati=br_vrati;
- }
- int vratiDnevnaCena()
- {
- if(this->br_vrati<5) return 100;
- return 130;
- }
- };
- class Avtobus : public Vozilo
- {
- protected:
- int br_patnici;
- public:
- Avtobus(float masa=0.0,int shirina=0,int visina=0,int br_patnici=0):Vozilo(masa,shirina,visina)
- {
- this->br_patnici=br_patnici;
- }
- int vratiDnevnaCena()
- {
- return this->br_patnici*5;
- }
- int getBr_patnici()
- {
- return this->br_patnici;
- }
- };
- class Kamion : public Vozilo
- {
- protected:
- float max_masa;
- public:
- Kamion(float masa=0.0,int shirina=0,int visina=0,float max_masa=0.0):Vozilo(masa,shirina,visina)
- {
- this->max_masa=max_masa;
- }
- int vratiDnevnaCena()
- {
- return (masa+max_masa)*0.02;
- }
- float getMax_masa() { return this->max_masa; }
- };
- class ParkingPlac
- {
- private:
- Vozilo **vozila;
- int n;
- public:
- ParkingPlac(Vozilo **vozilaa,int n)
- {
- this->n=n;
- this->vozila=new Vozilo*[n];
- for(int i=0;i<n;i++)
- {
- vozila[i]=vozilaa[i];
- }
- }
- ParkingPlac()
- {
- vozila=new Vozilo*[100];
- n=0;
- }
- ~ParkingPlac()
- {
- for(int i=0;i<n;i++)
- {
- delete vozila[i];
- }
- delete [] vozila;
- }
- ParkingPlac &operator+=(Vozilo *v1)
- {
- vozila[n++]=v1;
- return *this;
- }
- float presmetajVkupnaMasa()
- {
- float suma=0;
- for(int i=0;i<n;i++)
- {
- suma+=vozila[i]->getMasa();
- }
- return suma;
- }
- int brojVozilaPoshirokiOd(int l)
- {
- int brojac=0;
- for(int i=0;i<n;i++)
- {
- if(vozila[i]->getShirina() > l)
- brojac++;
- }
- return brojac;
- }
- int pogolemaNosivostOd(Vozilo& v)
- {
- int brojac=0;
- for(int i=0;i<n;i++)
- {
- Kamion *k=dynamic_cast<Kamion*>(vozila[i]);
- if(k!=0)
- {
- if(v.getMasa()<vozila[i]->getMasa())
- brojac++;
- }
- }
- return brojac;
- }
- void pecati()
- {
- int avtomobili=0,avtobusi=0,kamioni=0;
- for(int i=0;i<n;i++)
- {
- Avtomobil *a=dynamic_cast<Avtomobil*>(vozila[i]);
- if(a!=0) avtomobili++;
- Avtobus *s=dynamic_cast<Avtobus*>(vozila[i]);
- if(s!=0) avtobusi++;
- Kamion *k=dynamic_cast<Kamion*>(vozila[i]);
- if(k!=0) kamioni++;
- }
- cout << "Brojot na avtomobili e "<<avtomobili<<", brojot na avtobusi e "
- <<avtobusi<<" i brojot na kamioni e "<<kamioni<<"."<<endl;
- }
- int vratiDnevnaZarabotka()
- {
- int zarabotka=0;
- for(int i=0;i<n;i++)
- {
- zarabotka+=vozila[i]->vratiDnevnaCena();
- }
- return zarabotka;
- }
- };
- 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;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment