Advertisement
IlijaTrnkovski

Kamion

Sep 18th, 2018
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 5.54 KB | None | 0 0
  1. #include<iostream>
  2. #include<cstring>
  3. #include<typeinfo>
  4. using namespace std;
  5.  
  6. class ImaMasa
  7. {
  8. public:
  9. virtual double vratiMasa()=0;
  10. virtual void pecati()=0;
  11. };
  12.  
  13. class PaketPijalok
  14. {
  15. private:
  16. double volumenEden;
  17. int kolicina;
  18. public:
  19. static const double gustina=0.8;
  20. static const double ambalaza=0.2;
  21. double getVolumen()
  22. {
  23. return volumenEden;
  24. }
  25.  
  26. double getGustina()
  27. {
  28. return gustina;
  29. }
  30. PaketPijalok()
  31. {
  32. }
  33. PaketPijalok(double volumenEden, int kolicina)
  34. {
  35. this->volumenEden=volumenEden;
  36. this->kolicina=kolicina;
  37. }
  38. PaketPijalok(const PaketPijalok &p)
  39. {
  40. this->volumenEden=p.volumenEden;
  41. this->kolicina=p.kolicina;
  42. }
  43. int getKolicina()
  44. {
  45. return kolicina;
  46. }
  47. double vratiMasa()
  48. {
  49. return (volumenEden * gustina + ambalaza)* getKolicina();
  50. }
  51. int sporediMasa(ImaMasa *im)
  52. {
  53. return 0;
  54. }
  55. void pecati()
  56. {
  57. cout<<"Kolicina: "<<getKolicina();
  58. }
  59. ~PaketPijalok()
  60. {
  61. }
  62. };
  63.  
  64. class PaketSok: public PaketPijalok, public ImaMasa
  65. {
  66. private:
  67. bool daliGaziran;
  68. public:
  69. PaketSok()
  70. {
  71. }
  72. ~PaketSok()
  73. {
  74. }
  75. PaketSok(double volumenEden, int kolicina, bool daliGaziran):PaketPijalok(volumenEden,kolicina)
  76. {
  77. this->daliGaziran=daliGaziran;
  78. }
  79. void setDaliGazirn(bool daliGaziran)
  80. {
  81. this->daliGaziran=daliGaziran;
  82. }
  83. bool getDaliGaziran()
  84. {
  85. return daliGaziran;
  86. }
  87. void pecati()
  88. {
  89. cout<<"Paket sok "<<endl;
  90. PaketPijalok::pecati();
  91. cout<<", so po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
  92. }
  93.  
  94. double vratiMasa()
  95. {
  96. if(daliGaziran)
  97. {
  98. return PaketPijalok::vratiMasa();
  99. }
  100. else return PaketPijalok::vratiMasa()+ 0.1*PaketPijalok::getKolicina();
  101. }
  102.  
  103. };
  104. class PaketVino: public PaketPijalok, public ImaMasa
  105. {
  106. private:
  107. double procentAlkohol;
  108. public:
  109. PaketVino()
  110. {
  111. }
  112. ~PaketVino()
  113. {
  114. }
  115. PaketVino(double volumenEden, int kolicina, double procentAlkohol):PaketPijalok(volumenEden,kolicina)
  116. {
  117. try{
  118. if(!(procentAlkohol>0 && procentAlkohol<1)) throw 1;
  119. this->procentAlkohol=procentAlkohol;
  120. }
  121. catch (int){
  122. cout<<"Pogresno vnesena registracija!"<<endl;
  123. procentAlkohol=0;
  124. }
  125. }
  126. double getProcentAlkohol()
  127. {
  128. return procentAlkohol;
  129. }
  130. void pecati()
  131. {
  132. cout<<"Paket vino "<<endl;
  133. PaketPijalok::pecati();
  134. cout<<","<<this->procentAlkohol*100<<"% alkohol od po "<<getVolumen()*getGustina()<<" l(dm3)"<<endl;
  135. }
  136. double vratiMasa()
  137. {
  138. return PaketPijalok::vratiMasa()*(0.9+procentAlkohol);
  139. }
  140. };
  141. class Kamion
  142. {
  143. private:
  144. char reg[9];
  145. char vozac[20];
  146. ImaMasa **niza;
  147. int br;
  148. public:
  149. Kamion(const char* regi="", const char* voz="")
  150. {
  151. if(!(isalpha(regi[0])&&isalpha(regi[1]) && isalpha(regi[6]) && isalpha(regi[7]))) throw 1;
  152. strcpy(reg, regi);
  153. strcpy(vozac, voz);
  154. br=0;
  155. niza = new ImaMasa*[0];
  156. }
  157. void setRegistracija(char* r){
  158. strcpy(reg, r);
  159. }
  160. void setVozac(char* v){
  161. strcpy(vozac, v);
  162. }
  163. void setBr(int b){
  164. br = b;
  165. }
  166. void dodadiElement(ImaMasa *nov)
  167. {
  168. ImaMasa **tmpNiza = new ImaMasa*[br+1];
  169. for(int i=0; i<br; i++){
  170. tmpNiza[i]=this->niza[i];
  171. }
  172. tmpNiza[br]=nov;
  173. br++;
  174. niza=tmpNiza;
  175. }
  176. float vratiVkupnaMasa()
  177. {
  178. float vkupno = 0;
  179. for(int i = 0; i < br; i++)
  180. {
  181. vkupno += niza[i]->vratiMasa();
  182.  
  183. }
  184. return vkupno;
  185. }
  186. void pecati()
  187. {
  188. cout<<"Kamion so registracija "<<reg<<" i vozac "<<vozac<<" prenesuva: "<<endl;
  189. for(int i = 0; i < br; i++)
  190. {
  191. niza[i]->pecati();
  192. }
  193. }
  194. Kamion pretovar(char* r, char* v)
  195. {
  196. Kamion k = (*this);
  197. k.setRegistracija(r);
  198. k.setVozac(v);
  199. double max=niza[0]->vratiMasa();
  200. int ind=0;
  201. for(int i=1; i<br; i++){
  202. if(niza[i]->vratiMasa() > max){
  203. max = niza[i]->vratiMasa();
  204. ind = i;
  205. }
  206. }
  207. for(int i=ind; i<br-1; i++){
  208. niza[i]=niza[i+1];
  209. }
  210. k.setBr(br-1);
  211. return k;
  212. }
  213. };
  214.  
  215. int main()
  216. {
  217. char ime[20], reg[9];
  218. double vol;
  219. int kol;
  220. bool g;
  221. double proc;
  222. try
  223. {
  224. cin>>reg;
  225. cin>>ime;
  226. Kamion A(reg, ime);
  227. ImaMasa **d = new ImaMasa*[5];
  228. cin>>vol>>kol;
  229. cin>>g;
  230. d[0] = new PaketSok(vol, kol, g);
  231. cin>>vol>>kol;
  232. cin>>proc;
  233. d[1] = new PaketVino(vol, kol, proc);
  234. cin>>vol>>kol;
  235. cin>>proc;
  236. d[2] = new PaketVino(vol, kol, proc);
  237. cin>>vol>>kol;
  238. cin>>g;
  239. d[3] = new PaketSok(vol, kol, g);
  240. cin>>vol>>kol;
  241. cin>>proc;
  242. d[4] = new PaketVino(vol, kol, proc);
  243. A.dodadiElement(d[0]);
  244. A.dodadiElement(d[1]);
  245. A.dodadiElement(d[2]);
  246. A.dodadiElement(d[3]);
  247. A.dodadiElement(d[4]);
  248. A.pecati();
  249. cout<<"Vkupna masa: "<<A.vratiVkupnaMasa()<<endl;
  250. cin>>reg;
  251. cin>>ime;
  252. Kamion B = A.pretovar(reg, ime);
  253. B.pecati();
  254. cout<<"Vkupna masa: "<<B.vratiVkupnaMasa()<<endl;
  255. }
  256. catch(int)
  257. {
  258. cout<<"Pogresno vnesena registracija"<<endl;
  259. }
  260. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement