Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- ------- НРС - Лаб. вежби 4 -------
- ----------------------------------
- 1-ва задача
- __________________________________
- Да се развие класа Nediviznina за коjа се чуваат следниве информации:
- адреса (динамички алоцирана низа од знаци)
- квадратура (цел боj)
- цена за квадрат (цел боj)
- За оваа класа да се имплементираат соодветните конструктори и следните методи:
- cena() коj ќе jа ваќа цената на недвижнината (квадратура * цена-за-квадрат)
- pecati() коj ќе ги испечати сите информации за истата
- danokNaImot() коj го ваќа данокот што се плаќа за недвижнината, а истиот се пресметува како 5% од цената на недвижнината.
- Од оваа класа да се изведе класа Vila за коjа дополнително се чува данок на луксуз (цел боj, пр. 10%). За оваа класа да се преоптоварат методите:
- pecati()
- danokNaImot() со тоа што пресметаниот данок се зголемува процентуално за данокот на луксуз.
- И за двете класи треба да се преоптовари operator >>.
- __________________________________
- #include <iostream>
- #include <cstring>
- using namespace std;
- class Nedviznina {
- protected:
- char * adresa;
- int kvadratura;
- int cenak;
- public:
- Nedviznina(char * c="", int kvad=0, int cen=0){
- int s= strlen(c);
- adresa=new char[s];
- strcpy(adresa,c);
- kvadratura=kvad; cenak=cen;
- }
- int cena (){return kvadratura*cenak;}
- void pecati(){
- cout<<adresa<<", ";
- cout<<"Kvadratura: "<<kvadratura<<", ";
- cout<<"Cena po Kvadrat: "<<cenak<<endl;
- }
- char* getAdresa() {return adresa;}
- float danokNaImot(){ return cena()*0.05;}
- friend istream& operator>>(istream& in, Nedviznina& v){
- in>>v.adresa; in>>v.kvadratura; in>>v.cenak;
- return in;
- }
- };
- class Vila:public Nedviznina {
- private:
- int danluks;
- public:
- Vila(char * c="", int kvad=0, int cen=0,int dan=0)
- :Nedviznina(c,kvad,cen){
- danluks=dan;}
- void pecati(){ cout<<adresa<<", ";
- cout<<"Kvadratura: "<<kvadratura<<", ";
- cout<<"Cena po Kvadrat: "<<cenak<<", "<<"Danok na luksuz: "<<danluks<<endl;
- }
- friend istream& operator>>(istream& in, Vila& v){
- in>>v.adresa; in>>v.kvadratura; in>>v.cenak;
- in>>v.danluks;
- return in;
- }
- float danokNaImot() {return ((kvadratura*cenak)*0.05)+(kvadratura*cenak)*(danluks)/100;}
- };
- int main(){
- Nedviznina n;
- Vila v;
- cin>>n;
- cin>>v;
- n.pecati();
- cout<<"Danok za: "<<n.getAdresa()<<", e: "<<n.danokNaImot()<<endl;
- v.pecati();
- cout<<"Danok za: "<<v.getAdresa()<<", e: "<<v.danokNaImot()<<endl;
- return 0;
- }
- __________________________________
- 2-ра задача
- __________________________________
- Да се дефинира класа Ekipa за коjа се чуваат следниве информации:
- името на екипата (низа од наjмногу 15 знаци)
- броj на порази
- броj на победи
- Од оваа класа да се изведат две нови класи, FudbalskaEkipa и KosarkarskaEkipa.
- За фудбалската екипа дополнително се чуваат информации за:
- вкупниот броj на црвени картони
- вкупниот броj жолти картони
- броjот на нерешени натпревари
- За кошаркарската екипа се чуваат информации за:
- вкупниот броj на лични грешки
- вкупниот броj на обиди за давање кош
- За секоjа од изведените класите да се дефинира метод pecati() коjа ги печати податоците за екипаta во облик:
- За фудбалска екипа: Име, броj на победи, броj на порази, броj на нерешени натпревари, црвени картони, жолти картони и вкупен броj на поени (за победа фудбалската екипа добива 3 поени, додека за нерешен резултата, 1 поен);
- За кошаркарската екипа: Име, броj на победи, броj на порази, броj на лични грешки, броj на обиди, процент на успешност (броj на победи во однос на одиграни натпревари).
- Да се напише функциjа statistika(Ekipa **ekipi, int vkupno) коjа на влез прима низа од покажувачи кон каков било вид и вкупно екипи. Функциjата ги печати соодветните податоци за секоj елемент од низата.
- __________________________________
- #include<iostream>
- #include<string.h>
- using namespace std;
- class Ekipa{
- protected:
- char ime[15];
- int por;
- int pob;
- public:
- virtual void pecati()=0;
- Ekipa(char * c="",int po=0, int pp=0){
- strcpy(ime,c);
- por=po; pob=pp;
- }
- };
- class FudbalskaEkipa:public Ekipa{
- private:
- int neres;
- int zolti;
- int crveni;
- public:
- void pecati(){
- int poeni=0;
- poeni=3*por+(neres);
- cout<<"Ime: "<<ime<<" Pobedi: "<<por<<" Porazi: "<<pob<<" Crveni: "<<crveni<<" Zolti: "<<zolti<<" Poeni: "<<poeni<<endl;
- };
- FudbalskaEkipa(char * c="",int po=0, int pp=0, int crven=0, int zolt=0, int ner=0)
- :Ekipa(c,po,pp){crveni=crven; zolti=zolt; neres=ner;}
- };
- class KosarkarskaEkipa:public Ekipa{
- private:
- int licni;
- int obidi;
- public:
- void pecati(){
- float poeni=0;
- poeni=(float)por/(pob+por) *100;
- cout<<"Ime: "<<ime<<" Pobedi: "<<por<<" Porazi: "<<pob<<" Licni: "<<licni<<" Obidi: "<<obidi<<" Uspesnost: "<<poeni<<"%"<<endl;
- };
- KosarkarskaEkipa(char * c="",int po=0, int pp=0, int licn=0, int obid=0)
- :Ekipa(c,po,pp){licni=licn; obidi=obid;}
- };
- void statistika(Ekipa ** ekipi, int n){
- for (int i=0;i<n;i++)
- (*ekipi[i]).pecati();
- }
- int main(){
- Ekipa **ekipi = new Ekipa*[2];
- char ime[15];
- int pob,por,ck,zk,ner,lg,o;
- cin>>ime>>pob>>por>>ck>>zk>>ner;
- ekipi[0] = new FudbalskaEkipa(ime,pob,por,ck,zk,ner);
- cin>>ime>>pob>>por>>lg>>o;
- ekipi[1] = new KosarkarskaEkipa(ime,pob,por,lg,o);
- statistika(ekipi, 2);
- return 0;
- }
- __________________________________
- 3-та задача
- __________________________________
- Да се креира хиерархи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ата.
- __________________________________
- #include <iostream>
- #include <cstring>
- using namespace std;
- class ZicanInstrument
- {
- protected:
- char ime[20];
- int brZici;
- double cena;
- public:
- ZicanInstrument(char *i = "", int brZ = 0, double c = 0)
- {
- strcpy(ime,i);
- brZici = brZ;
- cena = c;
- }
- virtual double vrati_cena(){ return cena;}
- virtual void print() const
- {
- cout << "BLABLA" << endl;
- }
- bool operator==(const ZicanInstrument &z) const
- {
- return brZici == z.brZici;
- }
- friend ostream& operator<<(ostream &os, const ZicanInstrument &z)
- {
- z.print();
- return os;
- }
- };
- class Mandolina: public ZicanInstrument
- {
- private:
- char forma[100];
- public:
- Mandolina(char *i = "", int brZ = 0, float c = 0, char *f = "") : ZicanInstrument(i,brZ,c)
- {
- strcpy(forma,f);
- }
- double vrati_cena()
- {
- if(strcmp(forma,"Neapolitan") == 0)
- return 1.15 * cena;
- return cena;
- }
- void print() const
- {
- cout << ime << " " << brZici << " " << cena << " " << forma << endl;
- }
- };
- class Violina : public ZicanInstrument
- {
- private:
- double golemina;
- public:
- Violina(char *i = "", int brZ = 0, float c = 0, double gol = 0) : ZicanInstrument(i,brZ,c)
- {
- golemina = gol;
- }
- double vrati_cena()
- {
- if(golemina == 0.25)
- return cena * 1.1;
- if(golemina == 1.00)
- return cena *1.2;
- return cena;
- }
- void print() const
- {
- cout << ime << " " << brZici << " " << cena << " " << golemina << endl;
- }
- };
- void pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **niza, int n)
- {
- for(int j = 0; j<n; j++)
- if(zi == *niza[j])
- cout << niza[j]->vrati_cena() << endl;;
- }
- int main() {
- char ime[20];
- int brojZici;
- float cena;
- char forma[20];
- cin >> ime >> brojZici >> cena >> forma;
- Mandolina m(ime, brojZici, cena, forma);
- int n;
- cin >> n;
- ZicanInstrument **zi = new ZicanInstrument*[2 * n];
- for(int i = 0; i < n; ++i) {
- cin >> ime >> brojZici >> cena >> forma;
- zi[i] = new Mandolina(ime, brojZici, cena, forma);
- }
- for(int i = 0; i < n; ++i) {
- float golemina;
- cin >> ime >> brojZici >> cena >> golemina;
- zi[n + i] = new Violina(ime, brojZici, cena, golemina);
- }
- pecatiInstrumenti(m, zi, 2 * n);
- for(int i = 0; i < 2 * n; ++i) {
- delete zi[i];
- }
- delete [] zi;
- return 0;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement