Posted By

ahuskano on 11/11/12


Tagged

sort merge lista Strukture podataka ATP evidencija zivotinja


Versions (?)

Strukture podataka-main.cpp


 / Published in: C++
 

Source code main.cpp koji je napravljen kao rješenje problema s evidencijom životinja za zadatak 1 iz Struktura podataka

  1. #include<iostream>
  2. #include"Lista_pokazivaci.h"
  3. //#include"Lista_polja.h"
  4. #include<cstdlib>
  5. using namespace std;
  6. int si=1;
  7. int prebroji(lista *X){
  8. int i=0;
  9. element novi=PreviousL(EndL(X),X);
  10. if(FirstL(X)==EndL(X))
  11. return 0;
  12. else
  13. while(1){
  14. i++;
  15. if(FirstL(X)==novi) break;
  16. novi=PreviousL(novi,X);
  17. }
  18. return i;
  19. }
  20. void ispis_sort(elem sort[],lista *X){
  21. for(int i=0;i<prebroji(X);i++){
  22. cout<<"--------------------"<<endl
  23. <<"Naziv: "<<sort[i].naziv<<endl
  24. <<"Vrsta: "<<sort[i].vrsta<<endl
  25. <<"Cijena: "<<sort[i].cijena<<endl
  26. <<"Datum: "<<sort[i].datum<<endl
  27. <<"--------------------"<<endl;
  28. }
  29. }
  30. void spoji(elem sort[],int poc, int sre, int end){
  31. elem *m=new elem [end-poc+1];
  32. int I=poc,K=0,J=sre+1;
  33. while((I<=sre)&&(J<=end))
  34. if(sort[I].cijena>sort[J].cijena)
  35. m[K++]=sort[I++];
  36. else if(sort[I].cijena==sort[J].cijena)
  37. if(strcmp(sort[I].naziv,sort[J].naziv)==1)
  38. m[K++]=sort[I++];
  39. else
  40. m[K++]=sort[J++];
  41. else
  42. m[K++]=sort[J++];
  43. if(I>sre)
  44. while(J<=end)
  45. m[K++]=sort[J++];
  46. else
  47. while(I<=sre)
  48. m[K++]=sort[I++];
  49. for(int I=0;I<=end-poc;I++)
  50. sort[I+poc]=m[I];
  51. delete []m;
  52. }
  53. void merge_sortt(elem sort[],int poc, int end){
  54. if(poc<end){
  55. int sre=(poc+end)/2;
  56. merge_sortt(sort,poc,sre);
  57. merge_sortt(sort,sre+1,end);
  58. spoji(sort,poc,sre,end);
  59. }
  60. }
  61. void merge_sort(lista *X){
  62. if(FirstL(X)==EndL(X))
  63. cout<<endl<<"Lista je prazna"<<endl;
  64. else {
  65. elem *sort=new elem[prebroji(X)+1];
  66. element novi=FirstL(X);
  67. int i=0;
  68. while(novi!=EndL(X)){
  69. sort[i++]=RetreiveL(novi,X);
  70. novi=NextL(novi,X);
  71. }
  72. merge_sortt(sort,0,prebroji(X)-1);
  73. ispis_sort(sort,X);
  74. }
  75. }
  76. void ispis(elem e){
  77. cout<<endl<<"--------------------"<<endl
  78. <<"Sifra zivotinje: "<<e.sifra<<endl
  79. <<"Naziv zivotinje: "<<e.naziv<<endl
  80. <<"Vrsta zivotinje: "<<e.vrsta<<endl
  81. <<"Cijena zivotinje: "<<e.cijena<<endl
  82. <<"Datum: "<<e.datum<<endl
  83. <<"--------------------"<<endl;
  84. }
  85. element ispis_1(lista *X){
  86. elem e;
  87. element novi=PreviousL(EndL(X),X);
  88. if(FirstL(X)==EndL(X))
  89. cout<<endl<<"Prazna lista"<<endl;
  90. else
  91. while(1){
  92. e=RetreiveL(novi,X);
  93. ispis(e);
  94. if(FirstL(X)==novi) break;
  95. novi=PreviousL(novi,X);
  96. }
  97. }
  98.  
  99. int provjera(elem e){
  100. int god,dan,mje;
  101. char cgod[5],cmje[3],cdan[3];
  102. for(int i=0;i<4;i++)
  103. cgod[i]=e.datum[i+6];
  104. for(int i=0;i<2;i++)
  105. cmje[i]=e.datum[i+3];
  106. for(int i=0;i<2;i++)
  107. cdan[i]=e.datum[i];
  108. dan=atoi(cdan);
  109. mje=atoi(cmje);
  110. god=atoi(cgod);
  111. if(god>2012)
  112. return 1;
  113. else if(god==2012)
  114. if(mje>9)
  115. return 1;
  116. else if(mje==9)
  117. if(dan>23)
  118. return 1;
  119. else
  120. return 0;
  121. else
  122. return 0;
  123. else
  124. return 0;
  125. }
  126. void ispis_2012(lista *X){
  127. if(EndL(X)==FirstL(X))
  128. cout<<endl<<"Prazna lista"<<endl;
  129. else{
  130. int br=0;
  131. element k=PreviousL(EndL(X),X);
  132. elem e;
  133. while(true){
  134. e=RetreiveL(k,X);
  135. int p=provjera(e);
  136. if(p){
  137. ispis(e);
  138. br++;
  139. }
  140. if(FirstL(X)==k)
  141. break;
  142. k=PreviousL(k,X);
  143. }
  144. cout<<endl<<"Ukupan broj zivotinje dostavljenih nakon 23.09.2012 iznosi: "<<br<<endl;
  145. }
  146. }
  147. int delete_poj(lista *x){
  148. elem e;
  149. cin.ignore();
  150. cout<<endl<<"Unesite naziv zivotinje koju zelite obrisati: ";
  151. cin.getline(e.naziv,35);
  152. e.sifra=-1;
  153. element p=LocateL(e,x);
  154. return DeleteL(p,x);
  155. }
  156. int delete_vrs(lista *X){
  157. elem e;
  158. e.sifra=-2;
  159. cin.ignore();
  160. cout<<endl<<"Unesite naziv vrste za brisanje: ";
  161. cin.getline(e.vrsta,35);
  162. element c;
  163. bool dalje=true;
  164. int prov=0;
  165. do{
  166. c=LocateL(e,X);
  167. if(c==EndL(X))dalje=false;
  168. if(dalje)
  169. prov=DeleteL(c,X);
  170. }while(dalje==true);
  171. if(prov)
  172. return 1;
  173. else
  174. return 0;
  175. }
  176. int unos(elem e,lista *X){
  177. cout<<endl<<"--------------------"<<endl
  178. <<"Unos zapisa"<<endl
  179. <<"Sifra zivotinje: ";
  180. e.sifra=si++;
  181. cout<<e.sifra<<endl;
  182. cin.ignore();
  183. cout<<"Unesite vrstu zivotinje: ";
  184. cin.getline(e.vrsta,35);
  185. cout<<"Unesite naziv zivotinje: ";
  186. cin.getline(e.naziv,35);
  187. cout<<"Unesite cijenu zivotinje: ";
  188. cin>>e.cijena;
  189. cout<<"Unesite datum: ";
  190. cin.ignore();
  191. cin.getline(e.datum,12);
  192. int p=InsertL(e,EndL(X),X);
  193. if(p==1)
  194. return 1;
  195. else
  196. return 0;
  197. }
  198. int main(){
  199. lista *X=InitL(X);
  200. elem e;
  201. int izbor;
  202. do{
  203. cout<<endl<<"Izbornik: "<<endl
  204. <<"1. Dodati zapis"<<endl
  205. <<"2. Ispis zivotinja (od posljednje dodane)"<<endl
  206. <<"3. Ispis i prebrojavanje zivotinja dostavljenih nakon 23.rujna 2012. te godine"<<endl
  207. <<"4. Brisanje pojedinacnog elementa prema nazivu"<<endl
  208. <<"5. Brisanje pojedine vrste"<<endl
  209. <<"6. Merge sort"<<endl
  210. <<"9. Izlaz iz programa"<<endl
  211. <<"--------------------"<<endl
  212. <<"Vas odabir: ";
  213. cin>>izbor;
  214. switch(izbor){
  215. case 1: if(unos(e,X))
  216. cout<<endl<<"Uspjesno uneseni podaci"<<endl;
  217. else
  218. cout<<endl<<"Podaci nisu uneseni"<<endl;
  219. break;
  220. case 2: ispis_1(X);
  221. break;
  222. case 3: ispis_2012(X);
  223. break;
  224. case 4: if(delete_poj(X))
  225. cout<<endl<<"Zivotinja uspjesno izbrisana"<<endl;
  226. else
  227. cout<<endl<<"Brisanje nije uspjelo"<<endl;
  228. break;
  229. case 5: if(delete_vrs(X))
  230. cout<<endl<<"Vrsta uspjesno izbrisana"<<endl;
  231. else
  232. cout<<endl<<"Brisanje nije uspjelo"<<endl;
  233. break;
  234. case 6: merge_sort(X);
  235. }
  236. }while(izbor!=9);
  237. return 0;
  238. }

Report this snippet  

You need to login to post a comment.