Advertisement
simov

NRS | Lab 4

Apr 3rd, 2013
196
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 12.32 KB | None | 0 0
  1. ------- НРС - Лаб. вежби 4 -------
  2. ----------------------------------
  3. 1-ва задача
  4. __________________________________
  5. Да се развие класа Nediviznina за коjа се чуваат следниве информации:
  6.  
  7. адреса (динамички алоцирана низа од знаци)
  8. квадратура (цел боj)
  9. цена за квадрат (цел боj)
  10. За оваа класа да се имплементираат соодветните конструктори и следните методи:
  11.  
  12. cena() коj ќе jа ваќа цената на недвижнината (квадратура * цена-за-квадрат)
  13. pecati() коj ќе ги испечати сите информации за истата
  14. danokNaImot() коj го ваќа данокот што се плаќа за недвижнината, а истиот се пресметува како 5% од цената на недвижнината.
  15. Од оваа класа да се изведе класа Vila за коjа дополнително се чува данок на луксуз (цел боj, пр. 10%). За оваа класа да се преоптоварат методите:
  16.  
  17. pecati()
  18. danokNaImot() со тоа што пресметаниот данок се зголемува процентуално за данокот на луксуз.
  19. И за двете класи треба да се преоптовари operator >>.
  20. __________________________________
  21. #include <iostream>
  22. #include <cstring>
  23. using namespace std;
  24. class Nedviznina {
  25. protected:
  26. char * adresa;
  27. int kvadratura;
  28. int cenak;
  29. public:
  30. Nedviznina(char * c="", int kvad=0, int cen=0){
  31. int s= strlen(c);
  32. adresa=new char[s];
  33. strcpy(adresa,c);
  34. kvadratura=kvad; cenak=cen;
  35.  
  36. }
  37. int cena (){return kvadratura*cenak;}
  38. void pecati(){
  39. cout<<adresa<<", ";
  40. cout<<"Kvadratura: "<<kvadratura<<", ";
  41. cout<<"Cena po Kvadrat: "<<cenak<<endl;
  42. }
  43. char* getAdresa() {return adresa;}
  44. float danokNaImot(){ return cena()*0.05;}
  45. friend istream& operator>>(istream& in, Nedviznina& v){
  46. in>>v.adresa; in>>v.kvadratura; in>>v.cenak;
  47.  
  48. return in;
  49. }
  50. };
  51. class Vila:public Nedviznina {
  52. private:
  53. int danluks;
  54. public:
  55. Vila(char * c="", int kvad=0, int cen=0,int dan=0)
  56. :Nedviznina(c,kvad,cen){
  57. danluks=dan;}
  58. void pecati(){ cout<<adresa<<", ";
  59. cout<<"Kvadratura: "<<kvadratura<<", ";
  60. cout<<"Cena po Kvadrat: "<<cenak<<", "<<"Danok na luksuz: "<<danluks<<endl;
  61. }
  62. friend istream& operator>>(istream& in, Vila& v){
  63. in>>v.adresa; in>>v.kvadratura; in>>v.cenak;
  64. in>>v.danluks;
  65. return in;
  66. }
  67.  
  68. float danokNaImot() {return ((kvadratura*cenak)*0.05)+(kvadratura*cenak)*(danluks)/100;}
  69.  
  70. };
  71. int main(){
  72. Nedviznina n;
  73. Vila v;
  74. cin>>n;
  75. cin>>v;
  76. n.pecati();
  77. cout<<"Danok za: "<<n.getAdresa()<<", e: "<<n.danokNaImot()<<endl;
  78. v.pecati();
  79. cout<<"Danok za: "<<v.getAdresa()<<", e: "<<v.danokNaImot()<<endl;
  80. return 0;
  81. }
  82.  
  83. __________________________________
  84. 2-ра задача
  85. __________________________________
  86. Да се дефинира класа Ekipa за коjа се чуваат следниве информации:
  87.  
  88. името на екипата (низа од наjмногу 15 знаци)
  89. броj на порази
  90. броj на победи
  91. Од оваа класа да се изведат две нови класи, FudbalskaEkipa и KosarkarskaEkipa.
  92.  
  93. За фудбалската екипа дополнително се чуваат информации за:
  94.  
  95. вкупниот броj на црвени картони
  96. вкупниот броj жолти картони
  97. броjот на нерешени натпревари
  98. За кошаркарската екипа се чуваат информации за:
  99.  
  100. вкупниот броj на лични грешки
  101. вкупниот броj на обиди за давање кош
  102. За секоjа од изведените класите да се дефинира метод pecati() коjа ги печати податоците за екипаta во облик:
  103.  
  104. За фудбалска екипа: Име, броj на победи, броj на порази, броj на нерешени натпревари, црвени картони, жолти картони и вкупен броj на поени (за победа фудбалската екипа добива 3 поени, додека за нерешен резултата, 1 поен); 
  105. За кошаркарската екипа: Име, броj на победи, броj на порази, броj на лични грешки, броj на обиди, процент на успешност (броj на победи во однос на одиграни натпревари).
  106. Да се напише функциjа statistika(Ekipa **ekipi, int vkupno) коjа на влез прима низа од покажувачи кон каков било вид и вкупно екипи. Функциjата ги печати соодветните податоци за секоj елемент од низата.
  107. __________________________________
  108. #include<iostream>
  109. #include<string.h>
  110.  
  111. using namespace std;
  112.  
  113. class Ekipa{
  114. protected:
  115. char ime[15];
  116. int por;
  117. int pob;
  118. public:
  119. virtual void pecati()=0;
  120. Ekipa(char * c="",int po=0, int pp=0){
  121. strcpy(ime,c);
  122. por=po; pob=pp;
  123. }
  124.  
  125. };
  126. class FudbalskaEkipa:public Ekipa{
  127. private:
  128. int neres;
  129. int zolti;
  130. int crveni;
  131. public:
  132. void pecati(){
  133. int poeni=0;
  134. poeni=3*por+(neres);
  135. cout<<"Ime: "<<ime<<" Pobedi: "<<por<<" Porazi: "<<pob<<" Crveni: "<<crveni<<" Zolti: "<<zolti<<" Poeni: "<<poeni<<endl;
  136.  
  137. };
  138. FudbalskaEkipa(char * c="",int po=0, int pp=0, int crven=0, int zolt=0, int ner=0)
  139. :Ekipa(c,po,pp){crveni=crven; zolti=zolt; neres=ner;}
  140.  
  141.  
  142. };
  143. class KosarkarskaEkipa:public Ekipa{
  144. private:
  145. int licni;
  146. int obidi;
  147.  
  148. public:
  149. void pecati(){
  150. float poeni=0;
  151. poeni=(float)por/(pob+por) *100;
  152. cout<<"Ime: "<<ime<<" Pobedi: "<<por<<" Porazi: "<<pob<<" Licni: "<<licni<<" Obidi: "<<obidi<<" Uspesnost: "<<poeni<<"%"<<endl;
  153.  
  154. };
  155. KosarkarskaEkipa(char * c="",int po=0, int pp=0, int licn=0, int obid=0)
  156. :Ekipa(c,po,pp){licni=licn; obidi=obid;}
  157.  
  158.  
  159. };
  160. void statistika(Ekipa ** ekipi, int n){
  161. for (int i=0;i<n;i++)
  162. (*ekipi[i]).pecati();
  163.  
  164. }
  165. int main(){
  166. Ekipa **ekipi = new Ekipa*[2];
  167. char ime[15];
  168. int pob,por,ck,zk,ner,lg,o;
  169. cin>>ime>>pob>>por>>ck>>zk>>ner;
  170. ekipi[0] = new FudbalskaEkipa(ime,pob,por,ck,zk,ner);
  171. cin>>ime>>pob>>por>>lg>>o;
  172. ekipi[1] = new KosarkarskaEkipa(ime,pob,por,lg,o);
  173. statistika(ekipi, 2);
  174.  
  175. return 0;
  176. }
  177.  
  178. __________________________________
  179. 3-та задача
  180. __________________________________
  181. Да се креира хиерархиjа на класи за репрезентациjа на жичани инструменти. За потребите на оваа хиерархиjа да се дефинира класа ZicanInstrument од коjа ќе бидат изведени двете класи Mandolina и Violina.
  182.  
  183. Во класата ZicanInstrument се чуваат податоци за:
  184.  
  185. името на инструментот (низа од 20 знаци)
  186. броjот на жици
  187. основната цена на инструментот.
  188. За класата Mandolina дополнително се чува неjзината форма (низа од 20 знаци).
  189.  
  190. За класата Violina дополнително се чува неjзината големина (децимален броj).
  191.  
  192. За секоjа изведените класи треба да се дефинираат соодветните конструктори и следните методи:
  193.  
  194. cena() за пресметување на цената на инструментот
  195. основната цена на мандолината се зголемува за 15% доколку таа има форма во Неаполитански стил (вредноста на променливата форма е “Neapolitan”)
  196. основната цена на виолината се зголемува за 10% ако неjзината големина има вредност 1/4 (0.25), односно за 20% ако неjзината големина има вредност 1 (1.00)
  197. проптоварување на операторот ==, коj ги споредува жичаните инструменти според броjот на жици што го имаат
  198. преоптоварување на операторот << за печатење на сите податоци за жичаните инструменти.
  199. Да се напише функциjа pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **i, int n) коjа на влез прима жичан инструмент, низа од покажувачи кон жичани инструменти и броj на елементи во низата. Функциjата jа печати цената на сите жичани инструменти од низата кои имаат ист броj на жици како и инструментот проследен како прв аргумент на функциjата.
  200. __________________________________
  201. #include <iostream>
  202. #include <cstring>
  203.  
  204. using namespace std;
  205.  
  206. class ZicanInstrument
  207. {
  208. protected:
  209. char ime[20];
  210. int brZici;
  211. double cena;
  212. public:
  213. ZicanInstrument(char *i = "", int brZ = 0, double c = 0)
  214. {
  215. strcpy(ime,i);
  216. brZici = brZ;
  217. cena = c;
  218. }
  219. virtual double vrati_cena(){ return cena;}
  220.  
  221. virtual void print() const
  222. {
  223. cout << "BLABLA" << endl;
  224. }
  225.  
  226.  
  227. bool operator==(const ZicanInstrument &z) const
  228. {
  229. return brZici == z.brZici;
  230. }
  231.  
  232. friend ostream& operator<<(ostream &os, const ZicanInstrument &z)
  233. {
  234. z.print();
  235. return os;
  236. }
  237. };
  238.  
  239. class Mandolina: public ZicanInstrument
  240. {
  241. private:
  242. char forma[100];
  243. public:
  244. Mandolina(char *i = "", int brZ = 0, float c = 0, char *f = "") : ZicanInstrument(i,brZ,c)
  245. {
  246. strcpy(forma,f);
  247. }
  248. double vrati_cena()
  249. {
  250. if(strcmp(forma,"Neapolitan") == 0)
  251. return 1.15 * cena;
  252.  
  253. return cena;
  254. }
  255. void print() const
  256. {
  257. cout << ime << " " << brZici << " " << cena << " " << forma << endl;
  258. }
  259. };
  260.  
  261. class Violina : public ZicanInstrument
  262. {
  263. private:
  264. double golemina;
  265. public:
  266. Violina(char *i = "", int brZ = 0, float c = 0, double gol = 0) : ZicanInstrument(i,brZ,c)
  267. {
  268. golemina = gol;
  269. }
  270.  
  271. double vrati_cena()
  272. {
  273.  
  274. if(golemina == 0.25)
  275. return cena * 1.1;
  276. if(golemina == 1.00)
  277. return cena *1.2;
  278. return cena;
  279. }
  280.  
  281. void print() const
  282. {
  283. cout << ime << " " << brZici << " " << cena << " " << golemina << endl;
  284. }
  285.  
  286.  
  287. };
  288. void pecatiInstrumenti(ZicanInstrument &zi, ZicanInstrument **niza, int n)
  289. {
  290. for(int j = 0; j<n; j++)
  291. if(zi == *niza[j])
  292. cout << niza[j]->vrati_cena() << endl;;
  293.  
  294.  
  295.  
  296. }
  297.  
  298. int main() {
  299. char ime[20];
  300. int brojZici;
  301. float cena;
  302. char forma[20];
  303. cin >> ime >> brojZici >> cena >> forma;
  304. Mandolina m(ime, brojZici, cena, forma);
  305. int n;
  306. cin >> n;
  307. ZicanInstrument **zi = new ZicanInstrument*[2 * n];
  308. for(int i = 0; i < n; ++i) {
  309. cin >> ime >> brojZici >> cena >> forma;
  310. zi[i] = new Mandolina(ime, brojZici, cena, forma);
  311. }
  312. for(int i = 0; i < n; ++i) {
  313. float golemina;
  314. cin >> ime >> brojZici >> cena >> golemina;
  315. zi[n + i] = new Violina(ime, brojZici, cena, golemina);
  316. }
  317. pecatiInstrumenti(m, zi, 2 * n);
  318. for(int i = 0; i < 2 * n; ++i) {
  319. delete zi[i];
  320. }
  321. delete [] zi;
  322. return 0;
  323. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement