Posted By

dpavlovi on 11/11/12


Tagged

sort list merge lista adt ATP


Versions (?)

Glavni program


 / Published in: C++
 

Glavni dio programa za prvi zadatak iz kolegija strukture podataka

  1. #include <iostream>
  2. //#include "lista_polje.h"
  3. #include "lista_pokazivac.h"
  4. int sifra=1;
  5. using namespace std;
  6. void Ispis_elemenata(lista *glavno){
  7. elem poz=PreviousL(EndL(glavno),glavno);
  8. if(FirstL(glavno)!=EndL(glavno))
  9. while(1){
  10. podaci aktualni=RetrieveL(poz,glavno);
  11. cout<<endl<<"Sifra zivotinja: "<<aktualni.sifra;
  12. cout<<endl<<"Cijena zivotinje: "<<aktualni.cijena;
  13. cout<<endl<<"Naziv zivotinje: "<<aktualni.naziv;
  14. cout<<endl<<"Vrsta zivotinje: "<<aktualni.vrsta;
  15. cout<<endl<<"Datum dostave: "<<aktualni.datum[0]<<"."
  16. <<aktualni.datum[1]<<"."<<aktualni.datum[2]<<"."<<endl;
  17. if(poz==FirstL(glavno))
  18. break;
  19. poz=PreviousL(poz,glavno);
  20. }
  21. else
  22. cout<<endl<<"Lista je prazna!"<<endl;
  23. }
  24. void Brisanje_vrste(lista *glavno){
  25. podaci tren;
  26. bool prov=false;
  27. cin.ignore();
  28. tren.cijena=2;
  29. cout<<endl<<"Unesite vrstu koju zelite izbrisati: ";
  30. cin.getline(tren.vrsta,50);
  31. if(LocateL(tren,glavno)==EndL(glavno))
  32. cout<<endl<<"Vrsta nije obrisana!"<<endl;
  33. elem lok=LocateL(tren,glavno);
  34. if(lok==0){
  35. if(DeleteL(lok,glavno))
  36. cout<<endl<<"Vrsta uspjesno obrisana!"<<endl;
  37. return;
  38. }
  39. else{
  40. while(lok!=EndL(glavno)){
  41. if(DeleteL(lok,glavno))
  42. prov=true;
  43. lok=LocateL(tren,glavno);
  44. }
  45. if(prov)
  46. cout<<endl<<"Vrsta uspjesno obrisana!"<<endl;
  47. }
  48. }
  49. elem Dodaj_element(lista *glavno){
  50. podaci poz;
  51. poz.sifra=sifra;
  52. cout<<endl<<"Sifra zivotinje: ";
  53. cout<<poz.sifra;
  54. cout<<endl<<"Cijena zivotinje: ";
  55. cin>>poz.cijena;
  56. cout<<endl<<"Naziv zivotinje: ";
  57. cin.ignore();
  58. cin.getline(poz.naziv,50);
  59. cout<<endl<<"Vrsta zivotinje: ";
  60. cin.getline(poz.vrsta,50);
  61. cout<<endl<<"Datum dostave: ";
  62. cout<<endl<<"Dan dostave: ";
  63. cin>>poz.datum[0];
  64. cout<<endl<<"Mjesec dostave: ";
  65. cin>>poz.datum[1];
  66. cout<<endl<<"Godina dostave: ";
  67. cin>>poz.datum[2];
  68. if(poz.cijena==0){
  69. cout<<endl<<"Cijena nemoze biti 0"<<endl;
  70. return 0;
  71. }
  72. if(InsertL(poz,EndL(glavno),glavno))
  73. sifra+=1;
  74. }
  75. void Brisanje_elementa(lista *glavno){
  76. podaci tren;
  77. cin.ignore();
  78. tren.cijena=1;
  79. cout<<endl<<"Unesite naziv koji zelite izbrisati: ";
  80. cin.getline(tren.naziv,50);
  81. elem lok=LocateL(tren,glavno);
  82. if(DeleteL(lok,glavno))
  83. cout<<endl<<"Zapis je uspjesno obrisan!"<<endl;
  84. else if(!DeleteL(lok,glavno))
  85. cout<<endl<<"Zapis nije obrisan!"<<endl;
  86. }
  87. void Ispis_datum(lista *glavno){
  88. elem poz=PreviousL(EndL(glavno),glavno);
  89. int br=0;
  90. if(FirstL(glavno)!=EndL(glavno)){
  91. while(1){
  92. podaci tren=RetrieveL(poz,glavno);
  93. if(tren.datum[2]==2012){
  94. if((tren.datum[1]>=9)){
  95. if(tren.datum[1]==9){
  96. if(tren.datum[0]>23){
  97. cout<<endl<<"Sifra zivotinje: "<<tren.sifra;
  98. cout<<endl<<"Naziv zivotinje: "<<tren.naziv;
  99. cout<<endl<<"Datum dostave: "<<tren.datum[0]<<"."
  100. <<tren.datum[1]<<"."<<tren.datum[2];
  101. cout<<endl<<"Vrsta zivotinje: "<<tren.vrsta;
  102. cout<<endl<<"Cijena zivotinje: "<<tren.cijena<<endl;
  103. br++;
  104. }
  105. }
  106. else{
  107. cout<<endl<<"Sifra zivotinje: "<<tren.sifra;
  108. cout<<endl<<"Naziv zivotinje: "<<tren.naziv;
  109. cout<<endl<<"Datum dostave: "<<tren.datum[0]<<"."
  110. <<tren.datum[1]<<"."<<tren.datum[2];
  111. cout<<endl<<"Vrsta zivotinje: "<<tren.vrsta;
  112. cout<<endl<<"Cijena zivotinje: "<<tren.cijena<<endl;
  113. br++;
  114. }
  115. }
  116. }
  117. else if(tren.datum[2]>2012){
  118. cout<<endl<<"Sifra zivotinje: "<<tren.sifra;
  119. cout<<endl<<"Naziv zivotinje: "<<tren.naziv;
  120. cout<<endl<<"Datum dostave: "<<tren.datum[0]<<"."
  121. <<tren.datum[1]<<"."<<tren.datum[2];
  122. cout<<endl<<"Vrsta zivotinje: "<<tren.vrsta;
  123. cout<<endl<<"Cijena zivotinje: "<<tren.cijena<<endl;
  124. br++;
  125. }
  126. if(poz==FirstL(glavno))
  127. break;
  128. poz=PreviousL(poz,glavno);
  129. }
  130. cout<<endl<<"Broj zivotinja od 23.9.2012: "<<br<<endl;
  131. }
  132. else
  133. cout<<endl<<"Lista je prazna!"<<endl;
  134. }
  135. void Spoji(podaci polje[], int brj1, int sredina, int brj2){
  136. int i=brj1, j=sredina+1, k=0;
  137. podaci *b=new podaci[brj2-brj1+1];
  138. while(i<=sredina && j<=brj2){
  139. if(polje[i].cijena>polje[j].cijena)
  140. b[k++]=polje[i++];
  141. else if(polje[i].cijena<polje[j].cijena)
  142. b[k++]=polje[j++];
  143. if(polje[i].cijena==polje[j].cijena){
  144. if(strcmp(polje[i].naziv,polje[j].naziv)==1)
  145. b[k++]=polje[i++];
  146. else
  147. b[k++]=polje[j++];
  148. }
  149. }
  150. while(j<=brj2)
  151. b[k++]=polje[j++];
  152. while(i<=sredina)
  153. b[k++]=polje[i++];
  154. for(int c=0;c<=brj2-brj1;c++)
  155. polje[c+brj1]=b[c];
  156. delete []b;
  157. }
  158. void Merge(podaci polje[], int brj1, int brj2){
  159. if(brj1<brj2){
  160. int sredina=(brj1+brj2)/2;
  161. Merge(polje,brj1,sredina);
  162. Merge(polje,sredina+1,brj2);
  163. Spoji(polje,brj1,sredina,brj2);
  164. }
  165. }
  166. void Merge(podaci polje[],int vel){
  167. Merge(polje,0,vel-1);
  168. }
  169. void Prep(lista *glavno){
  170. if(FirstL(glavno)!=EndL(glavno)){
  171. int broj=0;
  172. elem poz=FirstL(glavno);
  173. while(false==(!true)){
  174. broj++;
  175. poz=NextL(poz,glavno);
  176. if(poz==EndL(glavno))
  177. break;
  178. }
  179. poz=FirstL(glavno);
  180. podaci *sort=new podaci[broj];
  181. int mj=0;
  182. while(false==(!true)){
  183. sort[mj]=RetrieveL(poz,glavno);
  184. mj++;
  185. poz=NextL(poz,glavno);
  186. if(poz==EndL(glavno))
  187. break;
  188. }
  189. Merge(sort,broj);
  190. for(int i=0;i<broj;i++){
  191. cout<<endl<<"Sifra zivotinja: "<<sort[i].sifra;
  192. cout<<endl<<"Cijena zivotinje: "<<sort[i].cijena;
  193. cout<<endl<<"Naziv zivotinje: "<<sort[i].naziv;
  194. cout<<endl<<"Vrsta zivotinje: "<<sort[i].vrsta;
  195. cout<<endl<<"Datum dostave: "<<sort[i].datum[0]<<"."
  196. <<sort[i].datum[1]<<"."<<sort[i].datum[2]<<"."<<endl;
  197. }
  198. delete []sort;
  199. }
  200. else
  201. cout<<endl<<"Lista je prazna!"<<endl;
  202. }
  203. int main(){
  204. int izbor;
  205. lista *glavno;
  206. glavno=InitL(glavno);
  207. do{
  208. cout<<endl<<"Izbornik: "<<endl;
  209. cout<<"1. Upis podataka"<<endl;
  210. cout<<"2. Ispis podataka"<<endl;
  211. cout<<"3. Pretraga podataka"<<endl;
  212. cout<<"4. Brisanje podataka"<<endl;
  213. cout<<"5. Brisanje vrste"<<endl;
  214. cout<<"6. Merge sort"<<endl;
  215. cout<<"9. Izlaz it prog"<<endl;
  216. cin>>izbor;
  217. switch(izbor){
  218. case 1:
  219. if(Dodaj_element(glavno))
  220. cout<<endl<<"Zapis je uspjesno dodan!"<<endl;
  221. else
  222. cout<<endl<<"Zapis nije dodan!"<<endl;
  223. break;
  224. case 2:
  225. Ispis_elemenata(glavno);
  226. break;
  227. case 3:
  228. Ispis_datum(glavno);
  229. break;
  230. case 4:
  231. Brisanje_elementa(glavno);
  232. break;
  233. case 5:
  234. Brisanje_vrste(glavno);
  235. break;
  236. case 6:
  237. Prep(glavno);
  238. break;
  239. case 9:
  240. cout<<endl<<"Izlazim iz programa(ENTER)!!!"<<endl;
  241. break;
  242. default:
  243. cout<<endl<<"Nepostoji ta opcija, ponovite upis: "<<endl;
  244. }
  245. }while(izbor!=9);
  246. cin.ignore();
  247. cin.get();
  248. return 0;
  249. }

Report this snippet  

Comments

RSS Icon Subscribe to comments
Posted By: ahuskano on November 11, 2012

ovakvo rješenje problema za razliku od moga ima malo drugačiji pristup brojenju elemenata liste prije nego se pokreče merge sort, dok moje rješenje koristi posebnu funkciju za tu svrhu

Posted By: ikoren on November 11, 2012

Ovaj program za razliku od mog, ima drugačiji pristup unosu datuma. Isto tako, drugačiji je način dobivanja šifre životinja, jer moje rješenje sadrži "rand" šifru koja se nesmije ponavljati.

You need to login to post a comment.