Posted By

mronki on 11/07/12


Tagged

sort list 1 array merge function structure pointer Strukture podataka ATP zadatak


Versions (?)

ATP list


 / Published in: C++
 

program za evidenciju životinja u trgovini sa kućnim ljubimcima, ispis prema štifri (silazno), te prema cijeni i nazivu (silazno), oba sortiranja implementirana pomoću merge sorta, ispis svih elemenata koji imaju atribut datum nakon 23.rujna 2012, brisanje prema vrsti ili pojedinačno prema nazivu,

  1. #include<iostream>
  2. //#include "polje.h"
  3. #include "pokazivaci.h"
  4. using namespace std;
  5.  
  6. lista *glava;
  7. int kod=10000;
  8. bool sortirano=false;
  9. bool Bsort=false;
  10.  
  11. int datum (int dan, char mjesec[10]){
  12. int Bmjesec;
  13. if (!(strcmp(mjesec,"sjecanj"))) Bmjesec=1;
  14. else if (!(strcmp(mjesec,"veljaca"))) Bmjesec=2;
  15. else if (!(strcmp(mjesec,"ozujak"))) Bmjesec=3;
  16. else if (!(strcmp(mjesec,"travanj"))) Bmjesec=4;
  17. else if (!(strcmp(mjesec,"svibanj"))) Bmjesec=5;
  18. else if (!(strcmp(mjesec,"lipanj"))) Bmjesec=6;
  19. else if (!(strcmp(mjesec,"srpanj"))) Bmjesec=7;
  20. else if (!(strcmp(mjesec,"kolovoz"))) Bmjesec=8;
  21. else if (!(strcmp(mjesec,"rujan"))) Bmjesec=9;
  22. else if (!(strcmp(mjesec,"listopad"))) Bmjesec=10;
  23. else if (!(strcmp(mjesec,"studeni"))) Bmjesec=11;
  24. else if (!(strcmp(mjesec,"prosinac"))) Bmjesec=12;
  25. else Bmjesec=0;
  26. return Bmjesec;
  27. }
  28.  
  29. void merge (telement A[], int i, int k, int j){
  30. int I=i, J=k+1, K=0;
  31. telement *B=new telement [j-i+1];
  32. while (I<=k&&J<=j)
  33. if (Bsort){
  34. if ((A[I].cijena<A[J].cijena)||((A[I].cijena==A[J].cijena)&&(A[I].naziv[0]<A[J].naziv[0])))
  35. memcpy(&B[K++],&A[I++],sizeof(A[I++]));
  36. else
  37. memcpy(&B[K++],&A[J++],sizeof(A[J++]));}
  38. else{
  39. if (A[I].sifra<=A[J].sifra)
  40. memcpy(&B[K++],&A[I++],sizeof(A[I++]));
  41. else
  42. memcpy(&B[K++],&A[J++],sizeof(A[J++]));}
  43. if (I>k)
  44. while (J<=j)
  45. memcpy(&B[K++],&A[J++],sizeof(A[J++]));
  46. else
  47. while (I<=k)
  48. memcpy(&B[K++],&A[I++],sizeof(A[I++]));
  49. for (int I=0;I<=j-i;I++)
  50. memcpy(&A[i+I],&B[I],sizeof(B[I]));
  51. delete []B;
  52. }
  53.  
  54. void MSort (telement A[],int i,int j){
  55. if (i<j){
  56. int k=(i+j)/2;
  57. MSort(A,i,k);
  58. MSort(A,k+1,j);
  59. merge(A,i,k,j);}
  60. }
  61.  
  62. void MSort (telement A[],int N){
  63. MSort (A,0,N-1);
  64. }
  65.  
  66. void sort (telement polje[]){
  67. if (FirstL(glava) == EndL(glava)) {
  68. system("cls");
  69. cout<<"Error!\n";
  70. system ("pause");
  71. return;}
  72. int i=0;
  73. el tekuci=FirstL(glava);
  74. while (1){
  75. telement trenutni=RetreiveL(tekuci,glava);
  76. polje[i].sifra=trenutni.sifra;
  77. strcpy (polje[i].vrsta,trenutni.vrsta);
  78. strcpy (polje[i].naziv,trenutni.naziv);
  79. polje[i].cijena=trenutni.cijena;
  80. memcpy (&polje[i].datum,&trenutni.datum,sizeof(trenutni.datum));
  81. i++;
  82. if (tekuci == PreviousL(EndL(glava), glava)) break;
  83. tekuci=NextL(tekuci, glava);}
  84. MSort(polje,i);
  85. sortirano=true;
  86. DeleteAllL(glava);
  87. glava=InitL(glava);
  88. telement trenutni2;
  89. for (int k=0;k<i;k++){
  90. trenutni2.sifra=polje[k].sifra;
  91. strcpy (trenutni2.vrsta, polje[k].vrsta);
  92. strcpy (trenutni2.naziv, polje[k].naziv);
  93. trenutni2.cijena=polje[k].cijena;
  94. memcpy (&trenutni2.datum,&polje[k].datum,sizeof(polje[k].datum));
  95. InsertL(trenutni2,EndL(glava),glava);}
  96. }
  97.  
  98. int unos(){
  99. telement trenutni;
  100. int kontrola=1;
  101. trenutni.sifra=kod;
  102. system ("cls");
  103. cout<<"UNOS ZIVOTINJE\n";
  104. cout<<"--------------\n";
  105. cout<<"sifra zivotinje: "<<trenutni.sifra<<endl;
  106. cout<<"unesite vrstu zivotinje: ";
  107. cin.ignore();
  108. cin.getline(trenutni.vrsta,100);
  109. cout<<"unesite naziv zivotinje: ";
  110. cin.getline(trenutni.naziv,100);
  111. cout<<"unesite cijenu zivotinje (u kunama): ";
  112. cin>>trenutni.cijena;
  113. do{
  114. if (kontrola==0) cout<<"pogresan unos\n";
  115. cout<<"datum dostave\n";
  116. cout<<"unesite dan: ";
  117. cin>>trenutni.datum.dan;
  118. cout<<"unesite mjesec (rijecima): ";
  119. cin.ignore();
  120. cin.getline(trenutni.datum.Rmjesec,10);
  121. cout<<"unesite godinu: ";
  122. cin>>trenutni.datum.godina;
  123. trenutni.datum.Bmjesec=datum (trenutni.datum.dan,trenutni.datum.Rmjesec);
  124. kontrola=0;}
  125. while (trenutni.datum.dan>30||trenutni.datum.Bmjesec==0);
  126. return InsertL(trenutni,EndL(glava),glava);
  127. }
  128.  
  129. void ispis (telement polje[]){
  130. system ("cls");
  131. if(!Bsort&&sortirano) sort(polje);
  132. if (!Bsort){
  133. cout<<"ISPIS LISTE OD ZADNJE DODANE ZIVOTINJE\n";
  134. cout<<"--------------------------------------\n";}
  135. else{
  136. cout<<"ISPIS SORTIRANE LISTE\n";
  137. cout<<"---------------------\n";}
  138. el tekuci=PreviousL(EndL(glava),glava);
  139. if (FirstL(glava)==EndL(glava)){
  140. system ("pause");
  141. return;}
  142. while (1){
  143. telement trenutni=RetreiveL(tekuci,glava);
  144. cout<<"sifra zivotinje: "<<trenutni.sifra<<endl;
  145. cout<<"vrsta zivotinje: "<<trenutni.vrsta<<endl;
  146. cout<<"naziv zivotinje: "<<trenutni.naziv<<endl;
  147. cout<<"cijena zivotinje: "<<trenutni.cijena<<" kn\n";
  148. cout<<"datum dostave: "<<trenutni.datum.dan<<"."<<trenutni.datum.Rmjesec<<" "<<trenutni.datum.godina<<"."<<endl;
  149. cout<<"------------------------------\n";
  150. if(tekuci==FirstL(glava)) break;
  151. tekuci=PreviousL(tekuci,glava);}
  152. system("pause");
  153. }
  154.  
  155. void pretraga (){
  156. system ("cls");
  157. int brojilo=0;
  158. el tekuci=FirstL(glava);
  159. if (FirstL(glava) == EndL(glava)) {
  160. cout<<"Error!\n";
  161. system ("pause");
  162. return;}
  163. cout<<"ZIVOTINJE DOSTAVLJENE NAKON 23.rujna.2012.\n";
  164. cout<<"--------------------------------------\n";
  165. while (1){
  166. telement trenutni=RetreiveL(tekuci,glava);
  167. if((trenutni.datum.godina>2012)||(trenutni.datum.godina==2012&&trenutni.datum.Bmjesec>9)||
  168. (trenutni.datum.godina==2012&&trenutni.datum.Bmjesec==9&&trenutni.datum.dan>23)){
  169. cout<<"sifra zivotinje: "<<trenutni.sifra<<endl;
  170. cout<<"vrsta zivotinje: "<<trenutni.vrsta<<endl;
  171. cout<<"naziv zivotinje: "<<trenutni.naziv<<endl;
  172. cout<<"cijena zivotinje: "<<trenutni.cijena<<" kn\n";
  173. cout<<"datum dostave: "<<trenutni.datum.dan<<"."<<trenutni.datum.Rmjesec<<"."<<trenutni.datum.godina<<"."<<endl;
  174. cout<<"-----------------------------\n";
  175. brojilo++;}
  176. if (tekuci == PreviousL(EndL(glava), glava)) break;
  177. tekuci=NextL(tekuci, glava);}
  178. cout<<"broj elemenata: "<<brojilo<<endl;
  179. system("pause");
  180. }
  181.  
  182. int brisanjeZ (){
  183. system ("cls");
  184. if (FirstL(glava) == EndL(glava)) {
  185. cout<<"Error!\n";
  186. system ("pause");
  187. return 0;}
  188. telement izbor;
  189. cout<<"unesite naziv zivotinje koju zelite izbrisati: ";
  190. cin.ignore();
  191. cin.getline(izbor.naziv,100);
  192. return DeleteL(LocateL(izbor,glava),glava);
  193. }
  194.  
  195. int brisanjeV (){
  196. int kontrola=0;
  197. system ("cls");
  198. if (FirstL(glava) == EndL(glava)) {
  199. cout<<"Error!\n";
  200. system ("pause");
  201. return 0;}
  202. telement izbor;
  203. cout<<"unesite naziv vrste koju zelite izbrisati: ";
  204. cin.ignore();
  205. cin.getline(izbor.vrsta,100);
  206. while(1){
  207. if (!(DeleteL(LocateL(izbor,glava),glava))) return kontrola;
  208. kontrola=1;}
  209. return kontrola;
  210. }
  211.  
  212. int main(){
  213. int izbor,brojilo;
  214. glava=NULL;
  215. glava=InitL(glava);
  216. telement polje[1000];
  217. do{
  218. system ("cls");
  219. cout<<"IZBORNIK\n";
  220. cout<<"--------\n";
  221. cout<<"1. unos u listu\n2. ispis liste od zadnje dodane zivotinje\n3. ispis svih zivotinja dostavljenih nakon 23.9.2012.\n"
  222. <<"4. brisanje unosa prema nazivu zivotinje\n5. brisanje svih unosa odabrane vrste\n"
  223. <<"6. sortiranje prema cijeni i nazivu\n7. ispis sortirane liste\n0. izlaz iz programa\n\n";
  224. cout<<"Izbor: \n";
  225. cin>>izbor;
  226. switch (izbor){
  227. case 1:
  228. if (unos()) kod++;
  229. sortirano=false;
  230. break;
  231. case 2:
  232. Bsort=false;
  233. ispis(polje);
  234. sortirano=false;
  235. break;
  236. case 3:
  237. pretraga();
  238. break;
  239. case 4:
  240. PV=true;
  241. if (brisanjeZ())
  242. sortirano=false;
  243. else cout<<"ne postoji element\n";
  244. break;
  245. case 5:
  246. PV=false;
  247. if(!(brisanjeV())) cout<<"ne postoji element\n";
  248. else sortirano=false;
  249. break;
  250. case 6:
  251. Bsort=true;
  252. if (!sortirano){
  253. sort (polje);
  254. cout<<"lista je uspjesno sortirana!\n";}
  255. else cout<<"lista je vec sortirana\n";
  256. system("pause");
  257. break;
  258. case 7:
  259. if (sortirano){
  260. Bsort=true;
  261. ispis(polje);}
  262. else{
  263. cout<<"lista nije sortirana!\n";
  264. system("pause");}
  265. break;
  266. case 0:
  267. break;
  268. default:
  269. cout<<"pogresan unos\n";
  270. }
  271. }
  272. while (izbor!=0);
  273. DeleteAllL(glava);
  274. return 0;
  275. }

Report this snippet  

Comments

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

Kolega ima uredna poravnanja i zanimljivo je rijesio ispis elemenata nakon 23.09.2012

You need to login to post a comment.