Posted By

zoka123 on 11/11/12


Tagged

Liste mergesort zivotinje


Versions (?)

zadatak 1


 / Published in: C++
 

Glavni program evidencije zivotinja, zadatak 1 iz kolegija Strukture podataka

  1. #include <iostream>
  2. //#include "lista_polje.h"
  3. #include "lista_pokazivac.h"
  4. #include "time.h"
  5. using namespace std;
  6.  
  7. void unos(char *znakovni_niz){
  8. cin.getline(znakovni_niz, 30);
  9. if (cin.gcount()==1)
  10. cin.getline (znakovni_niz,30);
  11. };
  12.  
  13. int dodaj() {
  14. int pom;
  15. tzivotinja *novi = new tzivotinja;
  16.  
  17. cout << "Sifra: " << sifra << endl;
  18. novi->sifra = sifra;
  19. cout << "Naziv: ";
  20. unos(novi->naziv);
  21. cout << "Vrsta: ";
  22. unos(novi->vrsta);
  23. cout << "Cijena: ";
  24. cin >> novi->cijena;
  25. cout << "Datum dostave: " << endl;
  26.  
  27. cout << "\t Dan: ";
  28. do{cin >> pom;} while(pom<0 || pom >31);
  29. (novi->datum).tm_mday = pom;
  30.  
  31. cout << "\t Mjesec: ";
  32. do{cin >> pom;}while(pom<1 || pom >12);
  33. (novi->datum).tm_mon = pom-1;
  34.  
  35. cout << "\t Godina: ";
  36. do{cin >> pom;}while(pom<1 || pom >2012);
  37. (novi->datum).tm_year = pom-1900;
  38. bool dodano = insertL(novi,endL(lista),lista);
  39. sifra++;
  40. kursor++;
  41. return dodano;
  42. }
  43.  
  44. void ispisi_listu() {
  45. tzivotinja tekuci;
  46. for(int i = endL(lista)-2; i>=0;i--){
  47. tekuci = retrieveL(i, lista);
  48. cout << "Sifra:\t" << tekuci.sifra << endl;
  49. cout << "-------------" << endl;
  50. cout << "Naziv:\t" << tekuci.naziv << endl;
  51. cout << "Vrsta:\t" << tekuci.vrsta << endl;
  52. cout << "Cijena:\t" << tekuci.cijena << endl;
  53. cout << "Datum dostave:\t" << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon + 1 << "." << (tekuci.datum).tm_year + 1900<< "." << endl<<endl;
  54. }
  55. }
  56.  
  57. int pretrazi_listu() {
  58. cout << "Zivotinje dostavljene nakon 23.9.2012." << endl<<endl;
  59. tzivotinja tekuci;
  60. int br=0;
  61. for(int i = endL(lista)-2; i>=0;i--){
  62. tekuci = retrieveL(i, lista);
  63. if(!((tekuci.datum).tm_year + 1900 < 2012
  64. || ((tekuci.datum).tm_year + 1900 == 2012 && ((tekuci.datum).tm_mon + 1) < 9)
  65. || ((tekuci.datum).tm_year + 1900 == 2012 && ((tekuci.datum).tm_mon + 1) == 9) && (tekuci.datum).tm_mday <= 23)){
  66. cout << "Sifra:\t" << tekuci.sifra << endl;
  67. cout << "Naziv:\t" << tekuci.naziv << endl;
  68. cout << "Vrsta:\t" << tekuci.vrsta << endl;
  69. cout << "Cijena:\t" << tekuci.cijena << endl;
  70. cout << "Datum dostave:\t" << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon + 1 << "." << (tekuci.datum).tm_year + 1900<< "." << endl<<endl;
  71. br++;
  72. }
  73. }
  74. return br;
  75. }
  76.  
  77. int obrisi_prema_nazivu(){
  78. tzivotinja tekuci;
  79. cout << "Unesite naziv zivotinje za brisanje: ";
  80. char naziv[30];
  81. bool nadjeno = false;
  82. unos(naziv);
  83. for(int i = endL(lista)-2; i>=0 && !nadjeno;i--){
  84. tekuci = retrieveL(i, lista);
  85. if(strcmp(naziv,tekuci.naziv)==0){
  86. cout << "Jeste li sigurni da zelite obrisati zapis (d/n): " << endl << endl;
  87. cout << "Sifra:\t" << tekuci.sifra << endl;
  88. cout << "Naziv:\t" << tekuci.naziv << endl;
  89. cout << "Vrsta:\t" << tekuci.vrsta << endl;
  90. cout << "Cijena:\t" << tekuci.cijena << endl;
  91. cout << "Datum dostave:\t" << (tekuci.datum).tm_mday << "." << (tekuci.datum).tm_mon + 1 << "." << (tekuci.datum).tm_year + 1900<< "." << endl<<endl;
  92. nadjeno = true;
  93. char izbor;
  94. cout << "(d/n) >> ";
  95. do{cin >>izbor;} while(izbor!='d' && izbor!='n');
  96. if(izbor=='d') deleteL(i,lista);
  97. else return 0;
  98. }
  99. }
  100. return nadjeno;
  101. }
  102.  
  103. int obrisi_prema_vrsti(){
  104. tzivotinja tekuci;
  105. cout << "Unesite vrstu zivotinje za brisanje: ";
  106. char vrsta[30];
  107. bool nadjeno = false;
  108. bool obrisano = false;
  109. unos(vrsta);
  110. for(int i = endL(lista)-2; i>=0;i--){
  111. tekuci = retrieveL(i, lista);
  112. if(strcmp(vrsta,tekuci.vrsta)==0){
  113. char izbor;
  114. if(!nadjeno){
  115. cout << "Jeste li sigurni da zelite obrisati zapise ove vrste: " << vrsta << endl << endl;
  116. cout << "(d/n) >> ";
  117. do{cin >>izbor;} while(izbor!='d' && izbor!='n');
  118. }
  119. if(izbor=='d'){
  120. deleteL(i,lista);
  121. obrisano = true;
  122. }
  123. nadjeno = true;
  124. }
  125. }
  126. return obrisano;
  127. }
  128.  
  129.  
  130. void Merge(int i, int k, int j) {
  131. int I=i, J=k+1, K=0;
  132. tzivotinja a,b,*POM = new tzivotinja [j-i+1];
  133.  
  134. #define lista(x) retrieveL(x,lista); // isto sto lista[i] samo zbog pokazivaca
  135.  
  136. while(I<=k && J<=j){
  137. a=lista(I);
  138. b=lista(J);
  139.  
  140. if(a.cijena < b.cijena) {
  141. POM[K++]=a;
  142. I++;
  143. }
  144.  
  145. else if(a.cijena > b.cijena){
  146. POM[K++]=b;
  147. J++;
  148. }
  149. else if(strcmp(a.naziv,b.naziv)==1) {
  150. POM[K++]=b;
  151. J++;
  152. }
  153. else {
  154. POM[K++]=a;
  155. I++;
  156. }
  157. }
  158.  
  159. if(I>k) while(J<=j) {
  160. b=lista(J++);
  161. POM[K++] = b;
  162. }
  163.  
  164. else while(I<=k) {
  165. a=lista(I++);
  166. POM[K++] = a;
  167. }
  168.  
  169. for(int I=0;I<=j-i;I++) updateL(POM[I],i+I,lista);
  170. delete [] POM;
  171. }
  172.  
  173. void MS(int i, int j) {
  174. if(i<j) {
  175. int k=(i+j)/2;
  176. MS(i,k);
  177. MS(k+1,j);
  178. Merge(i,k,j);
  179. }
  180. }
  181.  
  182. int sortiraj() {
  183. MS(0,endL(lista)-2);
  184. return 1;
  185. }
  186.  
  187. int izbornik(){
  188. int izbor;
  189. cout << endl << "Izbornik" << endl;
  190. cout << "===================" << endl;
  191. cout << " 1) Dodaj zapis" << endl;
  192. cout << " 2) Ispisi listu" << endl;
  193. cout << " 3) Pretrazi listu" << endl;
  194. cout << " 4) Brisi prema nazivu" << endl;
  195. cout << " 5) Brisi prema vrsti" << endl;
  196. cout << " 6) Sortiraj listu" << endl;
  197. cout << " 9) Izlaz iz programa" << endl;
  198. cout << endl;
  199. cin >> izbor;
  200. system("cls");
  201. return izbor;
  202. }
  203.  
  204.  
  205. int main(){
  206. //INICIJALIZACIJA GLAVE LISTE
  207. initL(lista);
  208. int izbor = 0;
  209. do {
  210. izbor = izbornik();
  211. switch(izbor){
  212. case 1:
  213. cout << (dodaj()? "\nZapis uspjesno dodan!" : "\nZapis nije dodan") << endl << endl;
  214. break;
  215. case 2:
  216. ispisi_listu();
  217. break;
  218. case 3:
  219. cout<< "Ispisano je " << pretrazi_listu() << " zapisa.\n";
  220. break;
  221. case 4:
  222. cout << (obrisi_prema_nazivu() ? "Zapis izbrisan" : "zapis nije obrisan ili nije pronadjen zapis s tim nazivom" ) << endl << endl;
  223. break;
  224. case 5:
  225. cout << (obrisi_prema_vrsti() ? "Zivotinje te vrste su obrisane" : "Zapis nije obrisan ili ne postoji zapis te vrste" ) << endl<<endl;
  226. break;
  227. case 6:
  228. cout << (sortiraj() ? "Lista sortirana!" : "Lista NIJE sortirana" ) << endl << endl;
  229. break;
  230. }
  231.  
  232. }while (izbor!=9);
  233.  
  234. return 0;
  235. }

Report this snippet  

You need to login to post a comment.