Posted By

ivadobrincic1 on 11/12/12


Tagged

sort merge lista brisanje pretraivanje


Versions (?)

Who likes this?

1 person have marked this snippet as a favorite

ivadobrincic1


Glavni program_zadatak_1_sp


 / Published in: C++
 

Glavni dio programa za 1. zadatak iz kolegija "Strukture podataka"

  1. #include <iostream>
  2.  
  3. #include "lista_pokazivaci.h"
  4. //#include "lista_polje.h"
  5.  
  6. using namespace std;
  7.  
  8. int sifra = 1;
  9.  
  10. int dodaj(Lista *lis) {
  11. animal nova_zivotinja;
  12. cout << "Unesi ime zivotinje (pocnite velikim slovom): ";
  13. cin >> nova_zivotinja.naziv;
  14. cout << "Unesi vrstu: ";
  15. cin >> nova_zivotinja.vrsta;
  16. cout << "Unesi datum: ";
  17. cin >> nova_zivotinja.datum;
  18. cout << "Unesi cijenu: ";
  19. cin >> nova_zivotinja.cijena;
  20. nova_zivotinja.sifra = sifra;
  21. ++sifra;
  22.  
  23. return InsertL(nova_zivotinja, EndL(lis), lis);
  24. }
  25.  
  26. void ispis_po_sifri_od_najnovije(Lista *lis) {
  27. animal zadnja_zivotinja;
  28. element tekuci = EndL(lis);
  29.  
  30. if (FirstL(lis) == EndL(lis)) {
  31. cout << "Lista je prazna. " << endl;
  32. return;
  33. }
  34.  
  35. do {
  36. tekuci = PreviousL(tekuci, lis);
  37. zadnja_zivotinja = RetrieveL(tekuci, lis);
  38.  
  39. cout << "Sifra zivotinje: ";
  40. cout << zadnja_zivotinja.sifra << endl;
  41. cout << "Ime zivotinje: ";
  42. cout << zadnja_zivotinja.naziv << endl;
  43. cout << "Vrsta: ";
  44. cout << zadnja_zivotinja.vrsta << endl;
  45. cout << "Datum: ";
  46. cout << zadnja_zivotinja.datum << endl;
  47. cout << "Cijena: ";
  48. cout << zadnja_zivotinja.cijena << endl;
  49. cout << "================================" << endl;
  50. } while (zadnja_zivotinja.sifra != RetrieveL(FirstL(lis), lis).sifra);
  51. }
  52.  
  53. void b(Lista *lis) {
  54. int ukupan_broj = 0;
  55. if (FirstL(lis) == EndL(lis)) {
  56. cout << "Lista je prazna." << endl;
  57. return;
  58. }
  59. cout << "================================" << endl;
  60. animal zivotinja;
  61. element tekuci = FirstL(lis);
  62.  
  63. while (tekuci != EndL(lis)) {
  64. zivotinja = RetrieveL(tekuci, lis);
  65. if (zivotinja.datum > "20120923") {
  66. ukupan_broj++;
  67. cout << "Sifra zivotinje: ";
  68. cout << zivotinja.sifra << endl;
  69. cout << "Ime zivotinje: ";
  70. cout << zivotinja.naziv << endl;
  71. cout << "Vrsta: ";
  72. cout << zivotinja.vrsta << endl;
  73. cout << "Datum: ";
  74. cout << zivotinja.datum << endl;
  75. cout << "Cijena: ";
  76. cout << zivotinja.cijena << endl;
  77. cout << "================================" << endl;
  78.  
  79. }
  80.  
  81. tekuci = NextL(tekuci, lis);
  82. }
  83. cout << "Ukupno je " << ukupan_broj << " dodanih tada.";
  84. cout << endl;
  85. }
  86.  
  87. int c_po_nazivu(Lista *lis) {
  88. if (FirstL(lis) == EndL(lis)) {
  89. cout << "Lista je prazna " << endl;
  90. return 0;
  91. }
  92.  
  93. string naziv;
  94. cout << "Naziv zivotinje za brisanje: ";
  95. cin >> naziv;
  96.  
  97. animal zivotinja;
  98. element tekuci = FirstL(lis);
  99.  
  100. while (tekuci != EndL(lis)) {
  101. zivotinja = RetrieveL(tekuci, lis);
  102. if (zivotinja.naziv == naziv) {
  103.  
  104. DeleteL(LocateL(zivotinja, lis), lis);
  105. tekuci = FirstL(lis);
  106. }
  107. else {
  108. tekuci = NextL(tekuci, lis);
  109. }
  110. }
  111. return 1;
  112. }
  113.  
  114. int c_po_vrsti(Lista *lis) {
  115. if (FirstL(lis) == EndL(lis)) {
  116. cout << "Lista je prazna " << endl;
  117. return 0;
  118. }
  119.  
  120. string naziv;
  121. cout << "Vrsta zivotinje za brisanje: ";
  122. cin >> naziv;
  123.  
  124. animal zivotinja;
  125. element tekuci = FirstL(lis);
  126. element za_brisanje;
  127.  
  128. while (tekuci != EndL(lis)) {
  129. zivotinja = RetrieveL(tekuci, lis);
  130. if (zivotinja.vrsta == naziv) {
  131. za_brisanje = tekuci;
  132. DeleteL(za_brisanje, lis);
  133. tekuci = FirstL(lis);
  134. }
  135. else {
  136. tekuci = NextL(tekuci, lis);
  137. }
  138. }
  139. return 1;
  140.  
  141. }
  142.  
  143. void mergesort_po_nazivu(animal polje[], int left, int right) {
  144. int middle = (left + right) / 2;
  145. animal temp;
  146. if (right - left == 1) {
  147. if (polje[right].naziv > polje[left].naziv) {
  148. temp = polje[right];
  149. polje[right] = polje[left];
  150. polje[left] = temp;
  151. return;
  152. }
  153. }
  154. else if (right == left) {
  155. return;
  156. }
  157. else {
  158. mergesort_po_nazivu(polje, left, middle);
  159. mergesort_po_nazivu(polje, middle +1, right);
  160.  
  161. int size_pomocno = right-left +1;
  162. animal *polje_pomocno = new animal[size_pomocno];
  163. int l = left;
  164. int s = middle +1;
  165.  
  166. for (int i = 0; i < size_pomocno; i++) {
  167. if (l == middle+1) {
  168. polje_pomocno[i] = polje[s]; s++;
  169. continue;
  170. }
  171. if (s == right +1) {
  172. polje_pomocno[i] = polje[l]; l++;
  173. continue;
  174. }
  175.  
  176. if (polje[l].naziv > polje[s].naziv) {
  177. polje_pomocno[i] = polje[l];
  178. l++;
  179. }
  180. else {
  181. polje_pomocno[i] = polje[s];
  182. s++;
  183. }
  184. }
  185.  
  186. int j = 0;
  187. for (int i = left; i <= right; i++) {
  188. polje[i] = polje_pomocno[j]; j++;
  189. }
  190. }
  191. }
  192.  
  193.  
  194. void mergesort_po_cijeni(animal polje[], int left, int right) {
  195. int middle = (left + right) / 2;
  196. animal temp;
  197. if (right - left == 1) {
  198. if (polje[right].cijena > polje[left].cijena) {
  199. temp = polje[right];
  200. polje[right] = polje[left];
  201. polje[left] = temp;
  202. return;
  203. }
  204. }
  205. else if (right == left) {
  206. return;
  207. }
  208. else {
  209. mergesort_po_cijeni(polje, left, middle);
  210. mergesort_po_cijeni(polje, middle +1, right);
  211.  
  212. int size_pomocno = right-left +1;
  213. animal *polje_pomocno = new animal[size_pomocno];
  214. int l = left;
  215. int s = middle +1;
  216.  
  217. for (int i = 0; i < size_pomocno; i++) {
  218. if (l == middle+1) {
  219. polje_pomocno[i] = polje[s]; s++;
  220. continue;
  221. }
  222. if (s == right +1) {
  223. polje_pomocno[i] = polje[l]; l++;
  224. continue;
  225. }
  226.  
  227. if (polje[l].cijena > polje[s].cijena) {
  228. polje_pomocno[i] = polje[l];
  229. l++;
  230. }
  231. else {
  232. polje_pomocno[i] = polje[s];
  233. s++;
  234. }
  235. }
  236.  
  237. int j = 0;
  238. for (int i = left; i <= right; i++) {
  239. polje[i] = polje_pomocno[j]; j++;
  240. }
  241. }
  242. }
  243.  
  244. void d(Lista *lis) {
  245. int n = 0;
  246. element temp = FirstL(lis);
  247. while (temp != EndL(lis)) {
  248. ++n;
  249. temp = NextL(temp, lis);
  250. }
  251.  
  252. animal *polje = new animal[n];
  253.  
  254. temp = FirstL(lis);
  255. for (int i = 0; temp != EndL(lis); i++) {
  256. polje[i] = RetrieveL(temp, lis);
  257. temp = NextL(temp, lis);
  258. }
  259. cout << "Sortiramo po nazivu." << endl;
  260. cout << endl;
  261. mergesort_po_nazivu(polje, 0, n-1);
  262. for (int i = 0; i < n; i++) {
  263.  
  264. cout << "Sifra zivotinje: ";
  265. cout << polje[i].sifra << endl;
  266. cout << "Ime zivotinje: ";
  267. cout << polje[i].naziv << endl;
  268. cout << "Vrsta: ";
  269. cout << polje[i].vrsta << endl;
  270. cout << "Datum: ";
  271. cout << polje[i].datum << endl;
  272. cout << "Cijena: ";
  273. cout << polje[i].cijena << endl;
  274. cout << "================================" << endl;
  275. }
  276. cout << endl;
  277.  
  278. DeleteAll(lis);
  279. for (int i = 0; i < n; i++) {
  280. InsertL(polje[i], EndL(lis), lis);
  281. }
  282.  
  283. cout << "Lista sortirana po cijeni zivotinje: " << endl;
  284. cout << endl;
  285. mergesort_po_cijeni(polje, 0, n-1);
  286. for (int i = 0; i < n; i++) {
  287.  
  288. cout << "Sifra zivotinje: ";
  289. cout << polje[i].sifra << endl;
  290. cout << "Ime zivotinje: ";
  291. cout << polje[i].naziv << endl;
  292. cout << "Vrsta: ";
  293. cout << polje[i].vrsta << endl;
  294. cout << "Datum: ";
  295. cout << polje[i].datum << endl;
  296. cout << "Cijena: ";
  297. cout << polje[i].cijena << endl;
  298. cout << "================================" << endl;
  299. }
  300. cout << endl;
  301.  
  302. DeleteAll(lis);
  303. for (int i = 0; i < n; i++) {
  304. InsertL(polje[i], EndL(lis), lis);
  305. }
  306.  
  307. }
  308.  
  309. int main() {
  310.  
  311. animal a;
  312. a.sifra = sifra; sifra++;
  313. a.naziv = "Kodi";
  314. a.vrsta = "pas";
  315. a.datum = "20111005";
  316. a.cijena = 7000;
  317.  
  318. Lista popis;
  319. InitL(&popis);
  320.  
  321. InsertL(a, EndL(&popis), &popis);
  322.  
  323. a.sifra = sifra; sifra++;
  324. a.naziv = "Friki";
  325. a.vrsta = "macka";
  326. a.datum = "20121023";
  327. a.cijena = 300;
  328.  
  329. InsertL(a, EndL(&popis) , &popis);
  330.  
  331. a.sifra = sifra; sifra++;
  332. a.naziv = "Dona";
  333. a.vrsta = "pas";
  334. a.datum = "19990214";
  335. a.cijena = 9543;
  336. InsertL(a, EndL(&popis) , &popis);
  337.  
  338. a.sifra = sifra; sifra++;
  339. a.naziv = "Mrvica";
  340. a.vrsta = "zec";
  341. a.datum = "20040313";
  342. a.cijena = 574;
  343. InsertL(a, EndL(&popis) , &popis);
  344.  
  345. a.sifra = sifra; sifra++;
  346. a.naziv = "Brza";
  347. a.vrsta = "kornjaca";
  348. a.datum = "20130414";
  349. a.cijena = 378;
  350. InsertL(a, EndL(&popis) , &popis);
  351.  
  352. ispis_po_sifri_od_najnovije(&popis);
  353.  
  354. dodaj(&popis);
  355. cout << "================================" << endl;
  356. dodaj(&popis);
  357. cout << "================================" << endl;
  358.  
  359. ispis_po_sifri_od_najnovije(&popis);
  360. cout << "===== Slijedi ispis zivotinja dodanih nakon 23.9.2012. =====";
  361. cout << endl;
  362.  
  363. b(&popis);
  364.  
  365. cout << endl;
  366. c_po_nazivu(&popis);
  367. cout << "===== Ispis nakon brisanja po nazivu =====" << endl;
  368. cout << endl;
  369. ispis_po_sifri_od_najnovije(&popis);
  370.  
  371. cout << endl;
  372. c_po_vrsti(&popis);
  373. cout << "===== Ispis nakon brisanja po vrsti =====" << endl;
  374. cout << endl;
  375. ispis_po_sifri_od_najnovije(&popis);
  376.  
  377. cout << endl;
  378. cout << "===== Merge sort. =====" << endl;
  379. d(&popis);
  380.  
  381.  
  382. system ("pause");
  383. return 0;
  384. }

Report this snippet  

You need to login to post a comment.