Posted By

dsokac1992 on 11/12/12


Tagged


Versions (?)

zadatak 1


 / Published in: C++
 

Zadatak 1

  1. #include <iostream>
  2. #include <cstring>
  3. #include <cmath>
  4. #include "lista_polje.h"
  5. //#include "lista_pokazivac.h"
  6. //Programski kod radi ispravno samo sa bilbiotekom lista_polje.h
  7.  
  8. using namespace std;
  9.  
  10. float DatumPretvori(char *datumF, int i, int brojac){
  11. if(datumF[0]>='0'&&datumF[0]<='9'){
  12. int k = 0;
  13. float iznos = 0;
  14. while(k<brojac){
  15. if(datumF[i-k]=='0'){k++; continue;}
  16. else iznos+=((int)datumF[i-k]-48)*pow(10.00,k);
  17. k++;
  18.  
  19. }
  20. return iznos;
  21. }
  22. else{
  23. if(datumF[1]=='S'||datumF[1]=='s') return 1;
  24. if(datumF[0]=='V'||datumF[0]=='v') return 2;
  25. if(datumF[0]=='O'||datumF[0]=='o') return 3;
  26. if(datumF[0]=='T'||datumF[0]=='t') return 4;
  27. if(datumF[1]=='V'||datumF[1]=='v') return 5;
  28. if(datumF[2]=='P'||datumF[2]=='p') return 6;
  29. if(datumF[1]=='R'||datumF[1]=='r') return 7;
  30. if(datumF[0]=='K'||datumF[0]=='k') return 8;
  31. if(datumF[0]=='R'||datumF[0]=='r') return 9;
  32. if(datumF[2]=='S'||datumF[2]=='s') return 10;
  33. if(datumF[1]=='T'||datumF[1]=='t') return 11;
  34. if(datumF[0]=='P'||datumF[0]=='p') return 12;
  35. }
  36.  
  37. }
  38. void DatumShift (char *datumF, int i){
  39. int k = i+1;
  40. int j = k;
  41. while(k<strlen(datumF)) datumF[k-j]=datumF[k++];
  42. }
  43.  
  44. void pretvorba (char *datumF, clan *element){
  45. int shift = 0, brojac=0;
  46. for(int i=0; i<strlen(datumF); i++){
  47. if(datumF[i]=='.'||datumF[i]==' '){
  48. if(shift==0)element->datum.dan=(int)DatumPretvori(datumF, i-1,brojac);
  49. if(shift==1)element->datum.mjesec=(int)DatumPretvori(datumF,i-1,brojac);
  50. if(shift==2){element->datum.godina=(int)DatumPretvori(datumF,i-1,brojac); break;}
  51. DatumShift(datumF,i);
  52. if(shift<2)i=0;
  53. shift++;
  54. brojac = 0;
  55. }
  56.  
  57. brojac++;
  58. }
  59. }
  60. void Spoji (clan element[], pokazivac i, pokazivac k, pokazivac j){
  61. pokazivac I=i, J=k+1, K=0;
  62. clan *B = new clan [j-i+1];
  63. while(I<=k && J<=j){
  64. if((element[I].cijena>element[J].cijena)||
  65. (element[I].cijena==element[J].cijena && strcmp(element[I].naziv,element[J].naziv)==1)){
  66. memcpy(&B[K++],&element[I++],sizeof(element[I++]));
  67. }
  68. else { memcpy(&B[K++],&element[J++],sizeof(element[J++]));
  69. }
  70. }
  71. if(I>k)
  72. while(J<=j){
  73. memcpy(&B[K++],&element[J++],sizeof(element[J++]));
  74. }
  75. else
  76. while(I<=k){
  77. memcpy(&B[K++],&element[I++], sizeof(element[I++]));
  78.  
  79. }
  80. for(I=0; I<=j-i;I++)
  81. memcpy(&element[i+I],&B[I],sizeof(B[I]));
  82.  
  83. delete []B;
  84.  
  85. }
  86.  
  87. void MSort (clan element[], pokazivac i, pokazivac j){
  88. if(i<j){
  89. pokazivac k = (j+i)/2;
  90. MSort (element, i, k);
  91. MSort (element, k+1,j);
  92. Spoji (element, i, k, j);
  93. }
  94. }
  95.  
  96.  
  97. void MSort(clan element[], int N){
  98. MSort(element, 0, N-1);
  99. }
  100. void sort(clan polje[], lista *element){
  101. int i=0;
  102. pokazivac tekuci=FirstL(element);
  103. while (1){
  104. clan trenutni=RetrieveL(tekuci,element);
  105. polje[i].sifra=trenutni.sifra;
  106. strcpy (polje[i].vrsta,trenutni.vrsta);
  107. strcpy (polje[i].naziv,trenutni.naziv);
  108. polje[i].cijena=trenutni.cijena;
  109. memcpy (&polje[i].datum.dan,&trenutni.datum.dan,sizeof(trenutni.datum.dan));
  110. memcpy (&polje[i].datum.mjesec,&trenutni.datum.mjesec,sizeof(trenutni.datum.mjesec));
  111. memcpy (&polje[i].datum.godina,&trenutni.datum.godina,sizeof(trenutni.datum.godina));
  112. i++;
  113. if (tekuci == PreviousL(EndL(element), element)) break;
  114. tekuci=NextL(tekuci, element);}
  115. MSort(polje,i);
  116. DeleteAllL(element);
  117. element = InitL(element);
  118. clan sortiran;
  119. for (int k=0;k<i;k++){
  120. sortiran.sifra=polje[k].sifra;
  121. strcpy (sortiran.vrsta, polje[k].vrsta);
  122. strcpy (sortiran.naziv, polje[k].naziv);
  123. sortiran.cijena=polje[k].cijena;
  124. memcpy (&polje[i].datum.dan,&sortiran.datum.dan,sizeof(sortiran.datum.dan));
  125. memcpy (&polje[i].datum.mjesec,&sortiran.datum.mjesec,sizeof(sortiran.datum.mjesec));
  126. memcpy (&polje[i].datum.godina,&sortiran.datum.godina,sizeof(sortiran.datum.godina));
  127. InsertL(sortiran,EndL(element),element);}
  128. }
  129.  
  130.  
  131. void ispis1 (clan element){
  132. cout << "------------------------"<<endl;
  133. cout << "Sifra: "<<element.sifra<<endl;
  134. cout << "\tVrsta: "<<element.vrsta<<endl;
  135. cout << "\tNaziv: "<<element.naziv<<endl;
  136. cout << "\tCijena: "<<element.cijena<<endl;
  137. cout << "Datum dostave: "<<element.datum.dan<<"."<<element.datum.mjesec<<"."<<element.datum.godina<<"."<<endl;
  138. }
  139. bool Delete(clan trg, lista *element){
  140. pokazivac i = FirstL(element);
  141. while(i<EndL(element)){
  142. i = LocateL(trg, element);
  143. if(i!=EndL(element))DeleteL(i, element);
  144. i = NextL(i, element);
  145. }
  146. return true;
  147.  
  148. }
  149. int unos(lista *element,int& sifra, char *datumF){
  150. clan novi;
  151. cout << "*************"<<endl;
  152. novi.sifra = sifra;
  153. cout << "Sifra: "<< novi.sifra<<endl<<endl;
  154. cout << "Vrsta: ";
  155. cin.ignore();
  156. cin.getline(novi.vrsta, 50);
  157. for(int i=0; i<strlen(novi.vrsta);i++){
  158. if(novi.vrsta[i]>='0'&&novi.vrsta[i]<='9') return 0;
  159. }
  160. cout << "Naziv: ";
  161. cin.getline(novi.naziv, 50);
  162. for(int i=0; i<strlen(novi.naziv);i++){
  163. if(novi.naziv[i]>='0'&&novi.naziv[i]<='9') return 0;
  164. }
  165. cout << "Cijena: ";
  166. cin >> novi.cijena;
  167. cin.ignore();
  168. cout << "Datum: ";
  169. cin.getline(datumF, 50);
  170. pretvorba(datumF, &novi);
  171. InsertL(novi, EndL(element), element);
  172. sifra++;
  173. cout << "-----------------------------------"<<endl;
  174. cout << "Ispis svih elemenata liste...."<<endl;
  175. cout << "-----------------------------------"<<endl;
  176. clan trenutni;
  177. pokazivac i = PreviousL(EndL(element),element);
  178. if(EndL(element)!=FirstL(element));
  179. while(1){
  180. trenutni = RetrieveL(i, element);
  181. ispis1(trenutni);
  182. if(i == FirstL(element)) break;
  183. i = PreviousL(i, element);
  184. }
  185.  
  186. return 1;
  187. }
  188.  
  189.  
  190. int ispis_uvjet(lista *element){
  191. int brojac = 0;
  192. bool ispis;
  193. cout << "Ispis zivotinja dostavljenih nakon 23.9.2012. godine.... \n"<<endl;
  194. pokazivac i=FirstL(element);
  195. while(i<EndL(element)){
  196. clan trenutni = RetrieveL(i, element);
  197. ispis = false;
  198. if(trenutni.datum.godina>2012) ispis = true;
  199. if(trenutni.datum.godina==2012 && trenutni.datum.mjesec>9)ispis=true;
  200. if(trenutni.datum.godina==2012 &&
  201. trenutni.datum.mjesec==9 && trenutni.datum.dan>23)ispis = true;
  202. if(ispis){
  203. ispis1(trenutni);
  204. brojac++;
  205. }
  206. i = NextL(i, element);
  207. }
  208. if (!ispis) return false;
  209. return brojac;
  210. }
  211.  
  212.  
  213. int main(){
  214. int izbor, a;
  215. clan polje[10000];
  216. char *datumF = new char [50];
  217. lista *element = new lista;
  218. clan trg;
  219. memset(trg.naziv, 0, 50);
  220. memset(trg.vrsta,0,50);
  221. trg.datum.dan = trg.datum.mjesec = trg.datum.godina=0;
  222. date target;
  223. InitL(element);
  224. int sifra = 1;
  225. do{
  226. cout << "---------------------------"<<endl;
  227. cout << " IZBORNIK "<<endl;
  228. cout << "---------------------------"<<endl;
  229. cout << "1. Dodaj zapis zivotinje u listu"<<endl;
  230. cout << "2. Ispisi sve zivotinje dostavljene nakon 23.9.2012. godine"<<endl;
  231. cout << "3. Obrisi zapis po kriteriju"<<endl;
  232. cout << "4. Sortiraj silazno listu zivotinja (Merge sort)"<<endl;
  233. cout << "9. Izlaz iz programa"<<endl;
  234. cout << "---"<<endl;
  235. cout << "Vas izbor: ";
  236. cin >> izbor;
  237.  
  238. switch(izbor){
  239. case 1: if(unos(element,sifra,datumF)) cout << "---\nElement uspjesno unesen."<<endl;
  240. else cout << "---\nElement nije dodan!!! Neispravan unos!"<<endl; break;
  241. case 2: if(!ispis_uvjet(element)) cout << "*****\nNema trazenog zapisa za ispis!"<<endl;
  242. else{cout << "---\nBroj zapisa: "<<ispis_uvjet(element)<<endl;} break;
  243. case 3: if(element->sljedeci==0) cout << "*****\nNema elemenata za brisanje! Odaberite mogucnost 1."<<endl;
  244. else{
  245. do{cout << "----\nObrisi zapis po kiretriju.....\n---"<<endl;
  246. cout << "Odaberi kriterij:\n\t[1] po nazivu\n\t[2] po vrsti"<<endl;
  247. cout << "Izbor: ";
  248. cin >> a;
  249. cout<<endl;
  250. if(a==1){
  251. cin.ignore();
  252. cout << "Unesi naziv: ";
  253. cin.getline(trg.naziv, 50);
  254. }
  255.  
  256. if(a==2){
  257. cin.ignore();
  258. cout << "Unesi vrstu: ";
  259. cin.getline(trg.vrsta, 50);
  260. }
  261. if(!Delete(trg,element)) cout << "*****\nNeuspjesno brisanje! Provjerite upisani kriterij."<<endl;
  262. else {
  263. for(pokazivac i = FirstL(element); i<EndL(element); i=NextL(i,element)){
  264. clan x = RetrieveL(i, element);
  265. ispis1(x);
  266. }
  267. cout << "*****\nBrisanje uspjesno!"<<endl;
  268. }
  269. }while(a<1||a>2);
  270. }
  271.  
  272. break;
  273.  
  274. case 4: sort(polje,element);
  275. for(pokazivac i=FirstL(element); i<EndL(element); i=NextL(i,element)){
  276. clan x = RetrieveL(i,element);
  277. ispis1(x);
  278. }
  279.  
  280. break;
  281. }
  282.  
  283.  
  284. }while(izbor!=9);
  285.  
  286. return 0;
  287. }

Report this snippet  

You need to login to post a comment.