Guest User

Untitled

a guest
Aug 16th, 2018
86
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 9.49 KB | None | 0 0
  1.  
  2.  
  3. #include <iostream>
  4. #include <string>
  5.  
  6. using namespace std;
  7.  
  8. class Polazak
  9. {
  10. string odrediste;
  11. bool brzi_voz;
  12. int broj_voza, broj_perona, sat_polaska, minute_polaska, trajanje_voznje, kasnjenje;
  13. public:
  14. Polazak(string odrediste, int broj_voza, int broj_perona, bool brzi_voz,
  15. int sat_polaska, int minute_polaska, int trajanje_voznje);
  16. void PostaviKasnjenje(int kasnjenje)
  17. {
  18. Polazak::kasnjenje=kasnjenje;
  19. }
  20. bool DaLiKasni() const
  21. {
  22. return kasnjenje>0;
  23. }
  24. int DajSatPolaska() const { return sat_polaska; }
  25. int DajMinutePolaska() const { return minute_polaska; }
  26.  
  27. int DajTrajanjeVoznje() const
  28. {
  29. return trajanje_voznje;
  30. }
  31. void OcekivanoVrijemePolaska(int &sati, int &minute) const;
  32. void OcekivanoVrijemeDolaska(int &sati, int &minute) const;
  33. void Ispisi() const;
  34. };
  35.  
  36. class RedVoznje
  37. {
  38. int max_broj_polazaka, broj_polazaka;
  39. Polazak **polasci;
  40. public:
  41. RedVoznje (const RedVoznje &red_voznje);
  42. RedVoznje &operator = (const RedVoznje &red_voznje);
  43. explicit RedVoznje (int max_broj_polazaka) : max_broj_polazaka(max_broj_polazaka), broj_polazaka(0), polasci(new Polazak*[max_broj_polazaka]){}
  44. ~RedVoznje ();
  45. void RegistrirajPolazak(string odrediste, int broj_voza, bool brzi_voz, int broj_perona, int sat_polaska,
  46. int minute_polaska, int trajanje_voznje);
  47. void RegistrirajPolazak(Polazak *polazak);
  48. int DajBrojPolazaka() const
  49. {
  50. return broj_polazaka;
  51. }
  52. int DajBrojPolazakaKojiKasne() const;
  53. int DajProsjecnoTrajanjeVoznji() const;
  54. Polazak &DajPrviPolazak() const;
  55. Polazak &DajPosljednjiPolazak() const;
  56. void IsprazniKolekciju();
  57. void Ispisi(int sati, int minute) const;
  58. };
  59.  
  60.  
  61. int main()
  62. {
  63. try
  64. {
  65. int n(0);
  66. cout<<"Unesi maksimalan broj voznji: ";
  67. cin>>n;
  68. if (!cin) throw 0;
  69. RedVoznje voznje(n);
  70. int broj(0);
  71. cout<<"Unesi broj voznji: ";
  72. cin>>broj;
  73. for (int i=0;i<broj;i++)
  74. {
  75. string naziv;
  76. cout<<"Unesi mjesto: ";
  77. cin>>naziv;
  78. int voz(0), peron(0), s_polaska(0), min_polaska(0), trajanje(0), kasnjenje(0);
  79. cout<<"Unesite broj voza, broj perona, sat polaska, minute polaska, kao i trajanje voznje: \n";
  80. cin>>voz>>peron>>s_polaska>>min_polaska>>trajanje;
  81. cout<<"Unesite koliko ce polazak kasniti od predvidjenog vremena (0 ako nema kasnjenja):\n";
  82. cin>>kasnjenje;
  83. try
  84. {
  85. Polazak *p = new Polazak(naziv, voz, true, peron, s_polaska, min_polaska, trajanje);
  86. voznje.RegistrirajPolazak(p);
  87. p->PostaviKasnjenje(kasnjenje);
  88. }
  89. catch (const char poruka[])
  90. {
  91. i--;
  92. cout<<poruka<<"Unesi ponovo!\n";
  93. }
  94. }
  95. voznje.Ispisi(2,3);
  96. }
  97. catch (...)
  98. {
  99. cout<<"Problemi sa memorijom...\n";
  100. }
  101. return 0;
  102. }
  103.  
  104. Polazak::Polazak(string odrediste, int broj_voza, int broj_perona, bool brzi_voz, int sat_polaska,
  105. int minute_polaska, int trajanje_voznje) : odrediste(odrediste), brzi_voz(brzi_voz), kasnjenje(0)
  106. {
  107. if (broj_voza<0 || broj_voza>99999 || broj_perona<1 || broj_perona>6 || sat_polaska<0 || sat_polaska>24
  108. || minute_polaska<0 || minute_polaska>59 || trajanje_voznje<0) throw "Neispravni parametri.\n";
  109. Polazak::broj_voza=broj_voza;
  110. Polazak::broj_perona=broj_perona;
  111. Polazak::sat_polaska=sat_polaska;
  112. Polazak::minute_polaska=minute_polaska;
  113. Polazak::trajanje_voznje=trajanje_voznje;
  114. }
  115.  
  116. void Polazak::OcekivanoVrijemePolaska(int &sati, int &minute) const
  117. {
  118. minute+=minute_polaska;
  119. if (Polazak::DaLiKasni())
  120. {
  121. minute+=kasnjenje;
  122. }
  123. if (minute>60)
  124. {
  125. while (minute>60) minute-=60;
  126. sati++;
  127. }
  128. if (minute==60)
  129. {
  130. minute=0;
  131. sati++;
  132. }
  133. sati+=sat_polaska;
  134. if (sati>24) while (sati>24)
  135. {
  136. sati-=24;
  137. }
  138. }
  139.  
  140. void Polazak::OcekivanoVrijemeDolaska(int &sati, int &minute) const
  141. {
  142. minute=minute_polaska+trajanje_voznje;
  143. if (Polazak::DaLiKasni())
  144. {
  145. minute+=kasnjenje;
  146. }
  147. if (minute>60)
  148. {
  149. while (minute>60)
  150. {
  151. sati++;
  152. minute-=60;
  153. }
  154. }
  155. if (minute==60)
  156. {
  157. minute=0;
  158. sati++;
  159. }
  160. sati+=sat_polaska;
  161. if (sati>24) while (sati>24)
  162. {
  163. sati-=24;
  164. }
  165. if (sati==24) sati=0;
  166. }
  167.  
  168. void Polazak::Ispisi() const
  169. {
  170. int s1(0), s2(0), m1(0), m2(0);
  171. OcekivanoVrijemePolaska(s1, m1);
  172. if (brzi_voz) cout<<"Brzi ";
  173. else cout<<"Lokalni ";
  174. cout<<"voz broj "<<broj_voza<<", odrediste "<<odrediste;
  175. if (DaLiKasni())
  176. {
  177.  
  178. cout<<" sa predvidjenim vremenom polaska u ";
  179. if (sat_polaska>=0 && sat_polaska<=9) cout<<"0";
  180. cout<<sat_polaska<<":";
  181. if (minute_polaska>=0 && minute_polaska<=9) cout<<"0";
  182. cout<<minute_polaska;
  183. cout<<"\n, kasni oko "<<kasnjenje<<" minuta, te ce poci oko";
  184. if (s1>=0 && s1<=9) cout<<"0";
  185. cout<<s1<<":";
  186. if (m1>=0 && m1<=9) cout<<"0";
  187. cout<<m1;
  188. cout<<". \nOcekuje se da voz stigne na odrediste oko ";
  189. OcekivanoVrijemeDolaska(s2, m2);
  190. if (s2>=0 && s2<=9) cout<<"0";
  191. cout<<s2<<":";
  192. if (m2>=0 && m2<=9) cout<<"0";
  193. cout<<m2;
  194. cout<<". Izvinjavamo se putnicima zbog eventualnih neugodnosti.\n";
  195. }
  196. else
  197. {
  198. cout<<" polazi sa perona "<<broj_perona<<" u ";
  199. if (s1>=0 && s1<=9) cout<<"0";
  200. cout<<s1<<":";
  201. if (m1>=0 && m1<=9) cout<<"0";
  202. cout<<m1;
  203. cout<<", a na \nodrediste stize u ";
  204. OcekivanoVrijemeDolaska(s2, m2);
  205. if (s2>=0 && s2<=9) cout<<"0";
  206. cout<<s2<<":";
  207. if (m2>=0 && m2<=9) cout<<"0";
  208. cout<<m2;
  209. cout<<". \nPutnicima i voznom osoblju zelimo ugodno putovanje.\n\n";
  210. }
  211. }
  212.  
  213.  
  214. RedVoznje::~RedVoznje()
  215. {
  216. for (int i=0;i<broj_polazaka;i++) delete polasci[i];
  217. delete[] polasci;
  218. }
  219.  
  220. RedVoznje::RedVoznje(const RedVoznje &red_voznje) : max_broj_polazaka(red_voznje.max_broj_polazaka),
  221. broj_polazaka(red_voznje.broj_polazaka), polasci(new Polazak*[red_voznje.max_broj_polazaka]) {
  222. for(int i=0;i<broj_polazaka;i++){
  223. polasci[i]=new Polazak(*red_voznje.polasci[i]);
  224. }
  225. }
  226.  
  227. RedVoznje &RedVoznje::operator =(const RedVoznje &red_voznje){
  228. for(int i=0;i<broj_polazaka;i++){
  229. delete polasci[i];
  230. }
  231. delete polasci;
  232. max_broj_polazaka=red_voznje.max_broj_polazaka;
  233. polasci = new Polazak*[max_broj_polazaka];
  234. broj_polazaka=red_voznje.broj_polazaka;
  235. for(int i=0;i<broj_polazaka;i++){
  236. polasci[i]=new Polazak(*red_voznje.polasci[i]);
  237. }
  238. return *this;
  239. }
  240.  
  241.  
  242.  
  243.  
  244. int RedVoznje::DajBrojPolazakaKojiKasne() const
  245. {
  246. int brojac(0);
  247. for (int i=0;i<broj_polazaka;i++)
  248. {
  249. if (polasci[i]->DaLiKasni()) brojac++;
  250. }
  251. return brojac;
  252. }
  253.  
  254. int RedVoznje::DajProsjecnoTrajanjeVoznji() const
  255. {
  256. int suma(0);
  257. for (int i=0;i<broj_polazaka;i++)
  258. {
  259. suma+=polasci[i]->DajTrajanjeVoznje();
  260. }
  261. return suma/broj_polazaka;
  262. }
  263.  
  264. void RedVoznje::RegistrirajPolazak(Polazak *polazak)
  265. {
  266. if (broj_polazaka>=max_broj_polazaka) throw "Previse polazaka.\n";
  267. polasci[broj_polazaka++] = polazak;
  268. }
  269.  
  270. void RedVoznje::RegistrirajPolazak(string odrediste, int broj_voza, bool brzi_voz, int broj_perona, int sat_polaska,
  271. int minute_polaska, int trajanje_voznje)
  272. {
  273.  
  274. if (broj_polazaka>=max_broj_polazaka) throw "Previse polazaka.\n";
  275. if (broj_voza<0 || broj_voza>99999 || broj_perona<1 || broj_perona>6 || sat_polaska<0 || sat_polaska>24
  276. || minute_polaska<0 || minute_polaska>59 || trajanje_voznje<0) throw "Neispravni parametri.\n";
  277. Polazak *polazak(new Polazak(odrediste, broj_voza, broj_perona, brzi_voz, sat_polaska, minute_polaska, trajanje_voznje));
  278. polasci[broj_polazaka++]=polazak;
  279. }
  280.  
  281. Polazak &RedVoznje::DajPrviPolazak() const
  282. {
  283. int prvi(0);
  284. for (int i=1;i<broj_polazaka;i++)
  285. {
  286. if (polasci[i]->DajSatPolaska()<polasci[prvi]->DajSatPolaska() ||
  287. (polasci[i]->DajSatPolaska()==polasci[prvi]->DajSatPolaska() &&
  288. polasci[i]->DajMinutePolaska()<polasci[prvi]->DajMinutePolaska())) prvi=i;
  289. }
  290. return *polasci[prvi];
  291. }
  292.  
  293. Polazak &RedVoznje::DajPosljednjiPolazak() const {
  294. int zadnji(0);
  295. for(int i=1;i<broj_polazaka;i++){
  296. if(polasci[i]->DajSatPolaska() > polasci[zadnji]->DajSatPolaska() ||
  297. (polasci[i]->DajSatPolaska() == polasci[zadnji]->DajSatPolaska() &&
  298. polasci[i]->DajMinutePolaska() > polasci[zadnji]->DajMinutePolaska())) zadnji=i;
  299. }
  300. return *polasci[zadnji];
  301. }
  302.  
  303. void RedVoznje::IsprazniKolekciju(){
  304. for(int i=0;i<broj_polazaka;i++){
  305. delete polasci[i];
  306. }
  307. broj_polazaka=0;
  308. }
  309.  
  310. void RedVoznje::Ispisi(int sati, int minute) const
  311. {
  312. cout<<endl;
  313. for (int i=0;i<broj_polazaka;i++) {
  314. if(polasci[i]->DajSatPolaska()>sati || (polasci[i]->DajSatPolaska()==sati && polasci[i]->DajMinutePolaska()>minute)){
  315. polasci[i]->Ispisi(); }
  316. }
  317. }
  318.  
  319. /*Napomene:
  320. 3. Preklapanje i konstruktor kopije zabranjeni (u private) u redu voznje.
  321. 4. metode dajprvi i dajposljednji polazak napraviti!
  322. */
Add Comment
Please, Sign In to add comment