Advertisement
KralMarko123

Kamion

May 16th, 2019
125
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.79 KB | None | 0 0
  1. /*
  2. Камион Problem 1 (0 / 0)
  3. Сите елементи кои ги превезуваат камионите имаат одредена маса.
  4. Имплементирајте апстрактна класа ImaMasa од која што ќе наследуваат сите класи кои имаат маса. Во оваа класа треба да се дефинираат методите:
  5.  
  6. double vratiMasa() враќа маса изразена во kg
  7. void pecati() печати информации за соодветниот објект
  8. Нека еден камион превезува пијалоци и тоа: пакет сокови и пакет вина. Да се дефинираат класите PaketSok и PaketVino кои ги имплементираат методите од апстрактната класа ImaMasa. При тоа да се земе предвид дека класите PaketSok и PaketVino се изведени од класата PaketPijalok.
  9. Притоа да се земат дадените податоци:
  10.  
  11. Класа PaketPijalok:
  12.  
  13. членови:
  14. volumenEden double
  15. kolicina int
  16. методи:
  17. double vratiMasa()
  18. void pecati()
  19. int getKolicina()
  20. Класа PaketSok:
  21.  
  22. членови:
  23. volumenEden double
  24. kolicina int
  25. daliGaziran bool
  26. методи:
  27. double vratiMasa()
  28. void pecati()
  29. Класа PaketVino:
  30.  
  31. членови:
  32. volumenEden double
  33. kolicina int
  34. procentAlkohol double
  35. методи:
  36. double vratiMasa()
  37. double getProcentAlkohol()
  38. void pecati()
  39. Еден пијалок има маса пресметана како производ на волуменот и густината (0.8kg/dm3) и масата на амбалажата (0.2kg).
  40. Овие податоци за густината и за масата на амбалажата да се стават како статички податоци за класата PaketPijalok.
  41. Масата на пакетот е производ на масата на еден пијалок и количината на пијалоци која ја има во пакетот. Соковите кои не се газирани имаат дополнителна маса од 0.1kg по пијалок.
  42. За вината, масата се добива како производ од масата на пакетот пресметан по правилата за секој пијалок помножен со коефициентот: (0.9+procentAlkohol).
  43.  
  44. Покрај овие класи, да се имплементира класата Kamion. За еден камион се чуваат информации за:
  45.  
  46. регистрацијата char*
  47. возачот char*
  48. елементите кои ги превезува камионот (низа од покажувачи од ImaMasa)
  49. Во класата Kamion покрај методите set и get дефинирајте ги и следните методи:
  50.  
  51. Kamion(char* ) конструктор со кој се генерира празен камион (без товар) и само возач
  52. void registriraj(char*) се додава регистрацијата на камионот
  53. void dodadiElement(ImaMasa) се додава нов елемент во камионот
  54. double vratiVkupnaMasa() се враќа вкупната маса на товарот кој го пренесува камионот
  55. void pecati() се печатат сите елементи во камионот заедно со регистрацијата и името на возачот
  56. Kamion pretovar(char* , char* ) се врши претовар во нов камион, но во новиот покрај тоа што се менуваат регистрацијата и името на возачот (аргументи), се отстранува пакетот со најголема маса.
  57. Со помош на правилата за справување со исклучоци да се модифицира програмата така што ќе се запазат следните правила: - Регистрацијата има 8 карактери, така што првите два и последните два мора да бидат букви.
  58. Да се определи каде ќе се фрли соодветниот исклучок. Онаму каде што ќе се фати исклучокот,
  59. ќе се отпечати "Pogresno vnesena registracija!".
  60.  
  61. */
  62.  
  63. #include<iostream>
  64. #include<cstring>
  65.  
  66. using namespace std;
  67.  
  68. class ImaMasa
  69. {
  70. protected:
  71. double mass;
  72. public:
  73. virtual double vratiMasa() = 0;
  74. virtual void pecati() = 0;
  75. };
  76.  
  77. class PaketPijalok : virtual public ImaMasa
  78. {
  79. private:
  80. double volumenEden;
  81. int kolicina;
  82. static double PaketMass;
  83. static double density;
  84. public:
  85. double vratiMasa()
  86. {
  87. return mass;
  88. }
  89. void pecati()
  90. {
  91. cout << "quantity " << kolicina << ", ";
  92. }
  93. int getKolicina();
  94. void setVolume(double volumen)
  95. {
  96. volumenEden=volumen;
  97. }
  98. void setKolicina(int k)
  99. {
  100. kolicina=k;
  101. }
  102. double getVolume()
  103. {
  104. return volumenEden;
  105. }
  106. static double getDensity()
  107. {
  108. return density;
  109. }
  110. virtual ~PaketPijalok(){};
  111. };
  112.  
  113. class PaketSok: virtual public ImaMasa, public PaketPijalok
  114. {
  115. private:
  116. bool daliGaziran;
  117. public:
  118. PaketSok(double volumen, int kolicina, bool g)
  119. {
  120. setVolume(volumen);
  121. daliGaziran=g;
  122. setKolicina(kolicina);
  123. }
  124. double vratiMasa()
  125. {
  126. if(daliGaziran==false)
  127. return mass*getVolume()*getDensity();
  128. else
  129. return mass*getVolume()*getDensity()+0.1;
  130. }
  131. void pecati()
  132. {
  133. cout << "PaketSok" << endl;
  134. PaketPijalok::pecati();
  135. cout << " each of " << getVolume() << "l(dm3)" << endl;
  136. }
  137. virtual ~PaketSok();
  138. };
  139.  
  140. class PaketVino: virtual public ImaMasa, public PaketPijalok
  141. {
  142. private:
  143. double procentAlkohol;
  144. public:
  145. PaketVino(double volumen, int kolicina, double procent)
  146. {
  147. if(procent<0 || procent>1)
  148. {
  149. cerr << "Incorrect alcohol percentage!" << endl;
  150. procentAlkohol=0;
  151. }
  152. else
  153. procentAlkohol=procent;
  154. setVolume(volumen);
  155. setKolicina(kolicina);
  156. }
  157. double vratiMasa()
  158. {
  159. return mass*getVolume()*getDensity()*(0.9+procentAlkohol);
  160. }
  161. double getProcentAlkohol()
  162. {
  163. return procentAlkohol;
  164. }
  165. void pecati()
  166. {
  167. cout << "PaketVino" << endl;
  168. PaketPijalok::pecati();
  169. cout << procentAlkohol*10 << "% alchocol each of " << getVolume() << "l(dm3)" << endl;
  170. }
  171. virtual ~PaketVino();
  172. };
  173.  
  174. class Kamion
  175. {
  176. private:
  177. char *registration;
  178. char *driver;
  179. ImaMasa **element;
  180. int n;
  181. public:
  182. Kamion (const char *registrationin="", const char *driverin="")
  183. {
  184. if(strlen(registrationin)!=8 || !isalpha(registrationin[0]) || !isalpha(registrationin[6]) || !isalpha(registrationin[7]))
  185. {
  186. cerr << "Incorrect registration!" << endl;
  187. }
  188. strcpy(registration,registrationin);
  189. strcpy(driver,driverin);
  190. element=NULL;
  191. n=0;
  192. }
  193. void dodadiElement(ImaMasa *elementin)
  194. {
  195. ImaMasa **temp = element;
  196. element = new ImaMasa*[n+1];
  197. for(int i=0; i<n; i++)
  198. element[i]=temp[i];
  199. element[n++]=elementin;
  200. delete [] temp;
  201. }
  202. double vratiVkupnaMasa()
  203. {
  204. double total=0;
  205. for (int i=0; i<n; i++)
  206. total+=element[i]->vratiMasa();
  207. return total;
  208. }
  209. void pecati()
  210. {
  211. cout << "Truck with registration " << registration << " and driver " << driver << " transports:" << endl;
  212. for(int i=0; i<n; i++)
  213. {
  214. element[i]->pecati();
  215. }
  216. }
  217. Kamion pretovar(const char *registrationin="",const char *driverin="")
  218. {
  219. strcpy(registration,registrationin);
  220. strcpy(driver,driverin);
  221. double max=0;
  222. int index;
  223. for(int i=0; i<n; i++)
  224. {
  225. if(max<element[i]->vratiMasa())
  226. {
  227. max=element[i]->vratiMasa();
  228. index=i;
  229. }
  230. }
  231. ImaMasa **temp = element;
  232. element = new ImaMasa*[n-1];
  233. for(int i=0; i<index; i++)
  234. element[i]=temp[i];
  235. for(int i=index; i<n-1; i++)
  236. element[i]=temp[i+1];
  237. n--;
  238. delete [] temp;
  239. return *this;
  240. }
  241. };
  242.  
  243.  
  244.  
  245. int main()
  246. {
  247. char ime[20], reg[9];
  248. double vol;
  249. int kol;
  250. bool g;
  251. double proc;
  252.  
  253. cin>>reg;
  254. cin>>ime;
  255. Kamion A(reg, ime);
  256. ImaMasa **d = new ImaMasa*[5];
  257. cin>>vol>>kol;
  258. cin>>g;
  259. d[0] = new PaketSok(vol, kol, g);
  260. cin>>vol>>kol;
  261. cin>>proc;
  262. d[1] = new PaketVino(vol, kol, proc);
  263. cin>>vol>>kol;
  264. cin>>proc;
  265. d[2] = new PaketVino(vol, kol, proc);
  266. cin>>vol>>kol;
  267. cin>>g;
  268. d[3] = new PaketSok(vol, kol, g);
  269. cin>>vol>>kol;
  270. cin>>proc;
  271. d[4] = new PaketVino(vol, kol, proc);
  272.  
  273. A.dodadiElement(d[0]);
  274. A.dodadiElement(d[1]);
  275. A.dodadiElement(d[2]);
  276. A.dodadiElement(d[3]);
  277. A.dodadiElement(d[4]);
  278. A.pecati();
  279. cout<<"Total mass: "<<A.vratiVkupnaMasa()<<endl;
  280. cin>>reg;
  281. cin>>ime;
  282. Kamion B = A.pretovar(reg, ime);
  283. B.pecati();
  284. cout<<"Total mass: "<<B.vratiVkupnaMasa()<<endl;
  285.  
  286. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement