Posted By

mgroznic on 11/12/12


Tagged

Matej Groznica


Versions (?)

Glavni_program


 / Published in: C++
 

Program za kolegij Strukture podataka

  1. #include <iostream>
  2. #include "lista_polje.h"
  3. //#include "lista_pokazivaci.h"
  4.  
  5. using namespace std;
  6.  
  7. int sifra=1;
  8.  
  9. int dodaj_ziv(lista *lis) {
  10. int provjera=0;
  11. ziv new_ziv;
  12. cout<<"Unesi ime zivotinje: ";
  13. cin>>new_ziv.naziv;
  14. cout<<"Unesi vrstu: ";
  15. cin>>new_ziv.vrsta;
  16. do{
  17. cout<<"Oprezno pri unosu datuma, unos datuma se ponavlja sve dok ne unesete valjani datum!"<<endl;
  18. cout<<"Unesite dan u rasponu 0-31 (DD): ";
  19. cin>>new_ziv.datum[0];
  20. cout<<"Unesite mjesec 0-12 (MM): ";
  21. cin>>new_ziv.datum[1];
  22. cout<<"Unesite godinu (GGGG): ";
  23. cin>>new_ziv.datum[2];
  24. }while(!((new_ziv.datum[0]>0 && new_ziv.datum[0]<=31)&&(new_ziv.datum[1]>0 && new_ziv.datum[1]<=12)
  25. &&(new_ziv.datum[2]>=1000 && new_ziv.datum[2]<=2020)));
  26. cout<<"Unesi cijenu: ";
  27. cin>>new_ziv.cijena;
  28. new_ziv.sifra=sifra;
  29. provjera=InsertL(new_ziv, EndL(lis), lis);
  30. if (provjera==1){
  31. ++sifra;
  32. cout<<"Element je dodan u listu!"<<endl;
  33. return 1;}
  34.  
  35. else
  36. return 0;
  37. }
  38.  
  39. void ispis_last_ziv(lista *lis) {
  40. ziv last_ziv;
  41. element tekuci=EndL(lis);
  42.  
  43. if (FirstL(lis)==EndL(lis)){
  44. cout<<"Prazna lista."<<endl;
  45. return;
  46. }
  47. do {
  48. tekuci=PreviousL(tekuci, lis);
  49. last_ziv=RetrieveL(tekuci,lis);
  50. cout<<"_______________________________"<<endl;
  51. cout<<"Sifra zivotinje: "<<last_ziv.sifra<<endl;
  52. cout<<"Ime zivotinje: "<<last_ziv.naziv<<endl;
  53. cout<<"Vrsta zivotinje: "<<last_ziv.vrsta<<endl;
  54. cout<<"Datum: "<<last_ziv.datum[0]<<"."<<last_ziv.datum[1]<<"."<<last_ziv.datum[2]<<"."<<endl;
  55. cout<<"Cijena: "<<last_ziv.cijena<<endl<<endl<<endl;
  56.  
  57.  
  58. }while (last_ziv.sifra != RetrieveL(FirstL(lis),lis).sifra);
  59. }
  60.  
  61. void pretraga_datum(lista *lis) {
  62. int brojac=0;
  63. if (FirstL(lis)==EndL(lis)) {
  64. cout<<"Prazna lista."<<endl;
  65. return;
  66. }
  67.  
  68. ziv zivotinja;
  69. element tekuci=FirstL(lis);
  70. while (tekuci!=EndL(lis)) {
  71. zivotinja=RetrieveL(tekuci, lis);
  72. if ((zivotinja.datum[2]>2012)||((zivotinja.datum[2]==2012)&&(zivotinja.datum[1]>9))
  73. ||((zivotinja.datum[2]==2012)&&(zivotinja.datum[1]==9)&&(zivotinja.datum[0]>23))){
  74.  
  75. cout<<"_______________________________"<<endl;
  76. cout<<"Sifra zivotinje: "<<zivotinja.sifra<<endl;
  77. cout<<"Ime zivotinje: "<<zivotinja.naziv<<endl;
  78. cout<<"Vrsta: "<<zivotinja.vrsta<<endl;
  79. cout<<"Datum: "<<zivotinja.datum[0]<<"."<<zivotinja.datum[1]
  80. <<"."<<zivotinja.datum[2]<<"."<< endl;cout<<"Cijena: "<<zivotinja.cijena<<endl;
  81. brojac++;
  82. }
  83. tekuci=NextL(tekuci, lis);
  84. }
  85. cout<<"Poslije 23.09.2012. dostavljeno je: "<<brojac<<" zivotinja."<<endl;
  86. }
  87.  
  88. int brisanje_naziv(lista *lis) {
  89. if (FirstL(lis)==EndL(lis)) {
  90. cout<<"Prazna lista."<<endl;
  91. return 0;
  92. }
  93. string naziv;
  94. cout<<"Unesite naziv zivotinje koju zelite obrisati: ";
  95. cin>>naziv;
  96. ziv zivotinja;
  97. element tekuci=FirstL(lis);
  98. while(tekuci!=EndL(lis)){
  99. zivotinja=RetrieveL(tekuci,lis);
  100. if (zivotinja.naziv==naziv) {
  101. DeleteL(LocateL(zivotinja, lis),lis);
  102. tekuci=FirstL(lis);
  103. cout<<"OBRISANO"<<endl;
  104. }
  105. else {
  106. tekuci=NextL(tekuci,lis);
  107. }
  108. }
  109. return 1;
  110. }
  111.  
  112. int brisanje_vrsta(lista *lis) {
  113. if (FirstL(lis)==EndL(lis)) {
  114. cout<<"Prazna lista. "<<endl;
  115. return 0;
  116. }
  117. string naziv;
  118. cout<<"Vrsta zivotinje za brisanje: ";
  119. cin>>naziv;
  120.  
  121. ziv zivotinja;
  122. element tekuci=FirstL(lis);
  123. element za_brisanje;
  124.  
  125. while(tekuci!=EndL(lis)){
  126. zivotinja=RetrieveL(tekuci, lis);
  127. if (zivotinja.vrsta==naziv){
  128. za_brisanje=tekuci;
  129. DeleteL(za_brisanje, lis);
  130. tekuci=FirstL(lis);
  131. }
  132. else {
  133. tekuci=NextL(tekuci, lis);
  134. }
  135. }
  136. return 1;
  137. }
  138.  
  139. void mergesort_po_nazivu(ziv polje[], int lijevi, int desni) {
  140. int sredina = (lijevi + desni) / 2;
  141. ziv temp;
  142. if (desni - lijevi == 1) {
  143. if (polje[desni].naziv > polje[lijevi].naziv) {
  144. temp = polje[desni];
  145. polje[desni] = polje[lijevi];
  146. polje[lijevi] = temp;
  147. return;
  148. }
  149. }
  150. else if (desni == lijevi) {
  151. return;
  152. }
  153. else {
  154.  
  155. mergesort_po_nazivu(polje, lijevi, sredina);
  156. mergesort_po_nazivu(polje, sredina +1, desni);
  157.  
  158.  
  159. int size_pomocno = desni-lijevi +1;
  160. ziv *polje_pomocno = new ziv[size_pomocno];
  161. int l = lijevi;
  162. int s = sredina +1;
  163.  
  164. for (int i = 0; i < size_pomocno; i++) {
  165. if (l == sredina+1) {
  166. polje_pomocno[i] = polje[s]; s++;
  167. continue;
  168. }
  169. if (s == desni +1) {
  170. polje_pomocno[i] = polje[l]; l++;
  171. continue;
  172. }
  173.  
  174. if (polje[l].naziv > polje[s].naziv) {
  175. polje_pomocno[i] = polje[l];
  176. l++;
  177. }
  178. else {
  179. polje_pomocno[i] = polje[s];
  180. s++;
  181. }
  182. }
  183.  
  184. int j = 0;
  185. for (int i = lijevi; i <= desni; i++) {
  186. polje[i] = polje_pomocno[j]; j++;
  187. }
  188. }
  189. }
  190.  
  191. void mergesort_po_cijeni(ziv polje[], int lijevi, int desni) {
  192. int sredina = (lijevi + desni) / 2;
  193. ziv temp;
  194. if (desni - lijevi == 1) {
  195. if (polje[desni].cijena > polje[lijevi].cijena) {
  196. temp = polje[desni];
  197. polje[desni] = polje[lijevi];
  198. polje[lijevi] = temp;
  199. return;
  200. }
  201. }
  202. else if (desni == lijevi) {
  203. return;
  204. }
  205. else {
  206.  
  207. mergesort_po_cijeni(polje, lijevi, sredina);
  208. mergesort_po_cijeni(polje, sredina +1, desni);
  209.  
  210.  
  211. int size_pomocno = desni-lijevi +1;
  212. ziv *polje_pomocno = new ziv[size_pomocno];
  213. int l = lijevi;
  214. int s = sredina +1;
  215.  
  216. for (int i = 0; i < size_pomocno; i++) {
  217. if (l == sredina+1) {
  218. polje_pomocno[i] = polje[s]; s++;
  219. continue;
  220. }
  221. if (s == desni +1) {
  222. polje_pomocno[i] = polje[l]; l++;
  223. continue;
  224. }
  225.  
  226. if (polje[l].cijena > polje[s].cijena) {
  227. polje_pomocno[i] = polje[l];
  228. l++;
  229. }
  230. else {
  231. polje_pomocno[i] = polje[s];
  232. s++;
  233. }
  234. }
  235.  
  236. int j = 0;
  237. for (int i = lijevi; i <= desni; i++) {
  238. polje[i] = polje_pomocno[j]; j++;
  239. }
  240. }
  241. }
  242.  
  243.  
  244.  
  245.  
  246.  
  247. void d(lista *lis) {
  248.  
  249. int n = 0;
  250. element temp = FirstL(lis);
  251. while (temp != EndL(lis)) {
  252. ++n;
  253. temp = NextL(temp, lis);
  254. }
  255.  
  256.  
  257. ziv *polje = new ziv[n];
  258.  
  259.  
  260. temp = FirstL(lis);
  261. for (int i = 0; temp != EndL(lis); i++) {
  262. polje[i] = RetrieveL(temp, lis);
  263. temp = NextL(temp, lis);
  264. }
  265.  
  266. cout << "Sortiramo po nazivu." << endl;
  267. mergesort_po_nazivu(polje, 0, n-1);
  268. for (int i = 0; i < n; i++) {
  269.  
  270. cout<<"_______________________________"<<endl;
  271. cout<<"Sifra zivotinje: "<<polje[i].sifra<<endl;
  272. cout<<"Ime zivotinje: "<<polje[i].naziv<<endl;
  273. cout<<"Vrsta: "<<polje[i].vrsta<<endl;
  274. cout<<"Datum: "<<polje[i].datum[0]<<"."<<polje[i].datum[1]<<"."<<polje[i].datum[2]<<"."<< endl;
  275. cout<<"Cijena: "<<polje[i].cijena<<endl;
  276.  
  277. }
  278. cout << endl;
  279.  
  280.  
  281. cout << "Sortiramo po cijeni." << endl;
  282. mergesort_po_cijeni(polje, 0, n-1);
  283.  
  284. for (int i = 0; i < n; i++) {
  285.  
  286.  
  287. cout<<"_______________________________"<<endl;
  288. cout<<"Sifra zivotinje: "<<polje[i].sifra<<endl;
  289. cout<<"Ime zivotinje: "<<polje[i].naziv<<endl;
  290. cout<<"Vrsta: "<<polje[i].vrsta<<endl;
  291. cout<<"Datum: "<<polje[i].datum[0]<<"."<<polje[i].datum[1]<<"."<<polje[i].datum[2]<<"."<< endl;
  292. cout<<"Cijena: "<<polje[i].cijena<<endl;
  293. }
  294. cout << endl;
  295.  
  296.  
  297.  
  298. DeleteAll(lis);
  299. for (int i = 0; i < n; i++) {
  300. InsertL(polje[i], EndL(lis), lis);
  301. }
  302.  
  303. mergesort_po_cijeni(polje, 0, n-1);
  304.  
  305. DeleteAll(lis);
  306. for (int i = 0; i < n; i++) {
  307. InsertL(polje[i], EndL(lis), lis);
  308. }
  309.  
  310.  
  311. }
  312.  
  313.  
  314. int main() {
  315. ziv a;
  316. a.sifra=sifra;
  317. a.naziv="Tara";
  318. a.vrsta="pas";
  319. a.datum[0]=23;
  320. a.datum[1]=10;
  321. a.datum[2]=2010;
  322. a.cijena=500;
  323. sifra++;
  324.  
  325. lista popis;
  326. InitL(&popis);
  327. InsertL(a,EndL(&popis),&popis);
  328.  
  329. a.sifra=sifra;
  330. a.naziv="Doga";
  331. a.vrsta="pas";
  332. a.datum[0]=23;
  333. a.datum[1]=10;
  334. a.datum[2]=2012;
  335. a.cijena=300;
  336. sifra++;
  337. InsertL(a,EndL(&popis),&popis);
  338.  
  339. a.sifra=sifra;
  340. a.naziv="Pero";
  341. a.vrsta="macka";
  342. a.datum[0]=23;
  343. a.datum[1]=10;
  344. a.datum[2]=2012;
  345. a.cijena=100;
  346. sifra++;
  347. InsertL(a,EndL(&popis),&popis);
  348.  
  349. a.sifra=sifra;
  350. a.naziv="Boni";
  351. a.vrsta="pas";
  352. a.datum[0]=23;
  353. a.datum[1]=10;
  354. a.datum[2]=2010;
  355. a.cijena=1000;
  356. sifra++;
  357. InsertL(a,EndL(&popis),&popis);
  358.  
  359. a.sifra=sifra;
  360. a.naziv="Mica";
  361. a.vrsta="macka";
  362. a.datum[0]=23;
  363. a.datum[1]=10;
  364. a.datum[2]=2010;
  365. a.cijena=200;
  366. sifra++;
  367. InsertL(a,EndL(&popis),&popis);
  368. cout<<endl;
  369. int izb;
  370.  
  371. do{
  372. cout<<"\t\t\t===IZBORNIK==="<<endl;
  373. cout<<"1. Dodavanje zapisa u listu prema rastucoj sifri zivotinje."<<endl;
  374. cout<<"2. Ispis sadrzaja liste pocevsi od zadnje dodane zivotinje."<<endl;
  375. cout<<"3. Ispis svih zivotinja dostavljenih nakon 23.09.2012. godine,\n te ukupan broj takvih zivotinja."<<endl;
  376. cout<<"4. Brisanje pojedinacnih unosa prema nazivu zivotinje."<<endl;
  377. cout<<"5. Brisanje svih zivotinja odredene vrste."<<endl;
  378. cout<<"6. Sortiranje po nazivu i cijeni- silazno"<<endl;
  379. cout<<"9. Izlazak iz programa."<<endl;
  380. cout<<"______________________________________________________________"<<endl<<endl;
  381. cout<<"Vas odabir: ";
  382. cin>>izb;
  383.  
  384. switch (izb){
  385. case 1: {
  386. dodaj_ziv(&popis);
  387. ispis_last_ziv(&popis);
  388. break;
  389. }
  390. case 2:{
  391. ispis_last_ziv(&popis);
  392. break;
  393. }
  394. case 3: {
  395. pretraga_datum(&popis);
  396. break;
  397. }
  398. case 4: {
  399. brisanje_naziv(&popis);
  400. break;
  401. }
  402. case 5: {
  403. brisanje_vrsta(&popis);
  404. break;
  405. }
  406. case 6: {
  407. d(&popis);
  408. break;
  409. }
  410. case 9: break;
  411. default:
  412. cout<<"Unijeli ste broj izvan raspona... Molimo vas obratite paznju na izbornik!"<<endl<<endl;
  413.  
  414. }
  415.  
  416. }while(izb!=9);
  417.  
  418.  
  419. system("pause");
  420. return 0;
  421. }

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: lblazekfoihr on November 12, 2012

Ovaj programski kod ima dosta sličnosti s mojim kodom no postoje i neke razlike. Razlikuju nam se funkcije u datotekama zaglavlja. Mogu reći da mi se kod sviđa zbog toga jer služi svojoj svrsi.

You need to login to post a comment.