Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #include<iostream>
- #include<cstring>
- using namespace std;
- class Vozac { //Да се дефинира класа Vozac
- protected://во која се чуваат информации за:
- char ime[100];//име (низа од максимум 100 знаци)
- int vozrast; //возраст (цел број)
- int brojnatrki; //број на трки (цел број)
- bool veteran; //дали е ветеран (да/не).
- public: //Да се преоптоварат:
- Vozac() {
- strcpy(this->ime, "");
- this->vozrast = 0;
- this->brojnatrki = 0;
- this->veteran = false;
- }
- Vozac(char * ime, int vozrast, int brojnatrki, bool veteran) {
- strcpy(this->ime, ime);
- this->vozrast = vozrast;
- this->brojnatrki = brojnatrki;
- this->veteran = veteran;
- }
- Vozac(const Vozac ©) {
- strcpy(this->ime, copy.ime);
- this->vozrast = copy.vozrast;
- this->brojnatrki = copy.brojnatrki;
- this->veteran = copy.veteran;
- }
- Vozac &operator=(const Vozac ©) {
- if(this!=©) {
- strcpy(this->ime, copy.ime);
- this->vozrast = copy.vozrast;
- this->brojnatrki = copy.brojnatrki;
- this->veteran = copy.veteran;
- }
- return *this;
- }
- virtual double zarabotuvacka() = 0;
- virtual int danok() = 0;
- friend ostream &operator<<(ostream &o, Vozac &print){// операторот << за печатење кој ќе ги печати името,
- o<<print.ime<<endl<<print.vozrast<<endl<<print.brojnatrki<<endl;// возраст, бројот на трки и
- if(print.veteran) o<<"VETERAN"<<endl; //е ветеран (се печати VETERAN)
- return o;
- };
- bool operator==(Vozac &compare) { //операторот == за споредување на два возачи според заработувачката по трка.
- return this->zarabotuvacka() == compare.zarabotuvacka();
- }
- };
- class Avtomobilist : public Vozac {// Од оваа класа да се изведат две нови класи Avtomobilist
- private:
- double cena;
- public:
- Avtomobilist() { ////За автомобилистот дополнително се чува:
- this->cena = 0.0;// цена на автомобилот (децимален број).
- }
- Avtomobilist(char * ime, int vozrast, int brojnatrki, bool veteran, double cena) : Vozac(ime, vozrast, brojnatrki, veteran) {
- this->cena = cena;
- }
- Avtomobilist(const Avtomobilist ©) : Vozac(copy) {
- this->cena = copy.cena;
- }
- double zarabotuvacka() {
- return this->cena / 5.0;// за автомобилостот заработувачката по трка е CENAAVTOMOBIL5
- }
- int danok() { //Секој автомобилист плаќа данок на заработка. Да се напишат соодветни методи за пресметување данок:
- if(brojnatrki>10) return zarabotuvacka() * 0.15; // за автомобилисти: ако бројот на трки е поголем од 10 стапката на данок е 15% од заработката,
- else return zarabotuvacka() * 0.1; //инаку 10% од заработката.
- }
- };
- class Motociklist : public Vozac { //и Motociklist.
- private://За мотоциклистот дополнително се чува:
- int mokjnost;//моќност на мотор (цел број).
- public:
- Motociklist() {
- this->mokjnost = 0;
- }
- Motociklist(char * ime, int vozrast, int brojnatrki, bool veteran, int mokjnost) : Vozac(ime, vozrast, brojnatrki, veteran) {
- this->mokjnost = mokjnost;
- }
- Motociklist(const Motociklist ©) : Vozac(copy) {
- this->mokjnost = copy.mokjnost;
- }
- double zarabotuvacka() { //Заработувачката по трка на возачите се пресметува како:
- return this->mokjnost * 20;// за мотоциклистот заработувачката по трка е MOKJNOSTNAMOTOR∗20
- }
- int danok() { //за мотоциклисти: ако е ветеран стапката на данок е 25% од заработката,
- if(veteran) return zarabotuvacka() * 0.25; //инаку 20% од заработката.
- else return zarabotuvacka() * 0.20;
- }
- };
- int soIstaZarabotuvachka(Vozac **niza, int broj, Vozac * cmp) { //Да се напше надворешна функција soIstaZarabotuvachka
- int counter=0;
- for(int i=0;i<broj;i++) //која како аргументи прима низа од покажувачи од класата Vocac, нивниот број,
- if(*niza[i] == *cmp) //како и покажувач кон ојбект од возач и враќа како резултат бројот на возачи
- counter++;// кои имаат иста заработувачка по трка со проследениот возач.
- return counter;
- }
- int main() {
- int n, x;
- cin >> n >> x;
- Vozac **v = new Vozac*[n];
- char ime[100];
- int vozrast;
- int trki;
- bool vet;
- for(int i = 0; i < n; ++i) {
- cin >> ime >> vozrast >> trki >> vet;
- if(i < x) {
- float cena_avto;
- cin >> cena_avto;
- v[i] = new Avtomobilist(ime, vozrast, trki, vet, cena_avto);
- } else {
- int mokjnost;
- cin >> mokjnost;
- v[i] = new Motociklist(ime, vozrast, trki, vet, mokjnost);
- }
- }
- cout << "=== DANOK ===" << endl;
- for(int i = 0; i < n; ++i) {
- cout << *v[i];
- cout << v[i]->danok() << endl;
- }
- cin >> ime >> vozrast >> trki >> vet;
- int mokjnost;
- cin >> mokjnost;
- Vozac *vx = new Motociklist(ime, vozrast, trki, vet, mokjnost);
- cout << "=== VOZAC X ===" << endl;
- cout << *vx;
- cout << "=== SO ISTA ZARABOTUVACKA KAKO VOZAC X ===" << endl;
- cout << soIstaZarabotuvachka(v, n, vx);
- for(int i = 0; i < n; ++i) {
- delete v[i];
- }
- delete [] v;
- delete vx;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement