Posted By

SikavicaNino on 11/12/12


Tagged

element zivotinja sifra sortiranja


Versions (?)

Implementacija liste-main.cpp


 / Published in: C++
 

Ovo je glavna datoteka main u kojoj se pozivaju funkcije iz datoteka listapokazivac.h i listapolje.h za implementaciju liste. Korisniku je ponuđen izbornik preko kojeg moze: 1. dodavati zapis, 2. ispisati sadrzaj, 3. pretražiti listu po datumu (ispis nakon 23.9.2012), 4. brisanje prema vrsti, 5.brisanje prema nazivu, 6. sortiranje prema nazivu i cijeni

  1. #include <iostream>
  2. using namespace std;
  3.  
  4. struct zivotinja{
  5. int sifra;
  6. string naziv, vrsta;
  7. long datum;
  8. int cijena;
  9. };
  10.  
  11. #include "lista_pokazivac.h"
  12. //#include "lista_polje.h"
  13.  
  14. int sifra = 1;
  15. int zadatak_a_dodavanje(Lista *popis) {
  16. cout << "Unos nove zivotinje." << endl;
  17.  
  18. zivotinja nova;
  19.  
  20. cout << "Vrsta: ";
  21. cin >> nova.vrsta;
  22. cout << "Naziv: ";
  23. cin >> nova.naziv;
  24. cout << "Cijena: ";
  25. cin >> nova.cijena;
  26. cout << "Datum (YYYYMMDD): ";
  27. cin >> nova.datum;
  28. nova.sifra = sifra;
  29. sifra++;
  30. if(InsertL(nova, EndL(popis) , popis)==true)
  31. return 1;
  32. else
  33. return 0;
  34. }
  35.  
  36. void zadatak_a_ispis(Lista *popis){
  37. element tekuci = EndL(popis);
  38. element prvi = FirstL(popis);
  39. zivotinja pom;
  40. do{
  41. tekuci = PreviousL(tekuci, popis);
  42. pom = RetrieveL(tekuci, popis);
  43. cout << "Sifra: " << pom.sifra << endl;
  44. cout << "Vrsta: " << pom.vrsta << endl;
  45. cout << "Naziv: " << pom.naziv << endl;
  46. cout << "Cijena: " << pom.cijena << endl;
  47. cout << "Datum: " << pom.datum << endl << endl;
  48. }while (tekuci != prvi);
  49. }
  50.  
  51. void zadatak_b(Lista *popis, long datum){
  52. element tekuci = FirstL(popis);
  53. zivotinja pom;
  54. int brojac = 0;
  55. do{
  56. pom = RetrieveL(tekuci, popis);
  57. if (pom.datum > datum){
  58. brojac++;
  59. cout << "Dana " << pom.datum << " zaprimili smo: " << pom.naziv << endl;
  60. }
  61. tekuci = NextL(tekuci, popis);
  62.  
  63. }while(tekuci != EndL(popis));
  64. cout << "Nakon " << datum << " pris1tiglo je: " << brojac << " zivotinja." << endl << endl;
  65. }
  66.  
  67. int zadatak_c_vrsta(Lista *popis){
  68. string ime_vrste;
  69. cout << "Ime vrste koju brisemo: ";
  70. cin >> ime_vrste;
  71.  
  72. element tekuci = FirstL(popis);
  73. zivotinja pom;
  74. int brojac = 0;
  75. do{
  76. pom = RetrieveL(tekuci, popis);
  77. if (pom.vrsta == ime_vrste){
  78. brojac = 1;
  79. cout << "Brisemo zivotinju sa sifrom: " << pom.sifra;
  80. cout << ", naziva: " << pom.naziv <<" i vrste: "<<pom.vrsta<< endl;
  81. DeleteL(tekuci, popis);
  82. }
  83. else{
  84. tekuci = NextL(tekuci, popis);
  85. }
  86.  
  87. }while(tekuci != EndL(popis));
  88.  
  89. return brojac;
  90. }
  91.  
  92. int zadatak_c_naziv(Lista *popis){
  93. string ime_naziv;
  94. cout << "Naziv zivotinje koju brisemo: ";
  95. cin >> ime_naziv;
  96.  
  97. element tekuci = FirstL(popis);
  98. zivotinja pom;
  99. int brojac = 0;
  100. do{
  101. pom = RetrieveL(tekuci, popis);
  102. if(pom.naziv == ime_naziv) {
  103. brojac = 1;
  104. cout << "Brisemo zivotinju sa sifrom: " << pom.sifra;
  105. cout << ", vrste: " << pom.vrsta <<" i naziva: "<<pom.naziv<< endl;
  106. DeleteL(tekuci, popis);
  107. }
  108. else{
  109. tekuci = NextL(tekuci, popis);
  110. }
  111.  
  112. }while(tekuci != EndL(popis));
  113.  
  114. return brojac;
  115. }
  116.  
  117. void sortiranje_po_cijeni(zivotinja polje[], int lijevi, int desni){
  118.  
  119. int sredina = (lijevi + desni) / 2;
  120. zivotinja temp;
  121.  
  122. if (lijevi == desni){
  123. return;
  124. }
  125.  
  126.  
  127. else if (lijevi + 1 ==desni){
  128. if (polje[desni].cijena > polje[lijevi].cijena){
  129. temp = polje[desni];
  130. polje[desni] = polje[lijevi];
  131. polje[lijevi] = temp;
  132. return;
  133. }
  134. }
  135.  
  136. else{
  137. sortiranje_po_cijeni(polje, lijevi, sredina);
  138. sortiranje_po_cijeni(polje, sredina + 1, desni);
  139.  
  140. int size_pomocno = 1+ (desni - lijevi);
  141. zivotinja *polje_pomocno = new zivotinja[size_pomocno];
  142. int l = lijevi;
  143. int s = sredina +1;
  144.  
  145. for(int i = 0; i < size_pomocno; i++){
  146. if (l == sredina+1){
  147. polje_pomocno[i] = polje[s]; s++;
  148. continue;
  149. }
  150. if (s == desni +1){
  151. polje_pomocno[i] = polje[l]; l++;
  152. continue;
  153. }
  154.  
  155. if(polje[l].cijena > polje[s].cijena){
  156. polje_pomocno[i] = polje[l];
  157. l++;
  158. }
  159. else{
  160. polje_pomocno[i] = polje[s];
  161. s++;
  162. }
  163. }
  164. int j = 0;
  165. for (int i = lijevi; i <= desni; i++){
  166. polje[i] = polje_pomocno[j]; j++;
  167. }
  168. }
  169. }
  170.  
  171. void sortiranje_po_nazivu(zivotinja polje[], int lijevi, int desni){
  172. int sredina = (lijevi + desni) / 2;
  173. zivotinja temp;
  174.  
  175. if (desni == lijevi){
  176. return;
  177. }
  178.  
  179. else if (desni - lijevi == 1){
  180. if (polje[desni].naziv > polje[lijevi].naziv) {
  181. temp = polje[desni];
  182. polje[desni] = polje[lijevi];
  183. polje[lijevi] = temp;
  184. return;
  185. }
  186. }
  187.  
  188. else{
  189.  
  190. sortiranje_po_nazivu(polje, lijevi, sredina);
  191. sortiranje_po_nazivu(polje, sredina +1, desni);
  192.  
  193. int size_pomocno = desni-lijevi +1;
  194. zivotinja *polje_pomocno = new zivotinja[size_pomocno];
  195.  
  196. int l = lijevi;
  197. int s = sredina +1;
  198.  
  199. for (int i = 0; i < size_pomocno; i++){
  200. if (l == sredina+1){
  201. polje_pomocno[i] = polje[s]; s++;
  202. continue;
  203. }
  204. if (s == desni +1){
  205. polje_pomocno[i] = polje[l]; l++;
  206. continue;
  207. }
  208.  
  209. if (polje[l].naziv > polje[s].naziv){
  210. polje_pomocno[i] = polje[l];
  211. l++;
  212. }
  213. else{
  214. polje_pomocno[i] = polje[s];
  215. s++;
  216. }
  217. }
  218. int j = 0;
  219. for (int i = lijevi; i <= desni; i++) {
  220. polje[i] = polje_pomocno[j]; j++;
  221. }
  222.  
  223. }
  224. }
  225.  
  226.  
  227. int main(){
  228.  
  229. Lista popis;
  230. InitL(&popis);
  231.  
  232. short izb;
  233. do{
  234. cout<<endl<<"IZBORNIK"<<endl;
  235. cout<<"1. Dodavanje zapisa u listu prema rastucoj sifri zivotinje"<<endl;
  236. cout<<"2. Ispis zivotinja (od posljednje dodane)"<<endl;
  237. cout<<"3. Pretrazivanje po datumu (ispis nakon 23.9.2012.) "<<endl;
  238. cout<<"4. Brisanje prema vrsti zivotinje"<<endl;
  239. cout<<"5. Brisanje prema nazivu zivotinje"<<endl;
  240. cout<<"6. Sortiranje zivotinja prema nazivu i cijeni (silazno)"<<endl;
  241. cout<<"9. Izlaz iz programa"<<endl;
  242. cout<<"Izbor: ";
  243. cin>>izb;
  244.  
  245.  
  246. switch(izb){
  247. case 1:{
  248. int br;
  249. cout << "Dodavanje zivotinja (rastuca sifra)" << endl;
  250. do{
  251. cout<<"Koliko zivotinja zelite unesti?(min 5)";
  252. cin>>br;
  253. }while(br<5);
  254. zadatak_a_dodavanje(&popis);
  255. for(int i = 1;i < br; i++){
  256. cout<<endl;
  257. zadatak_a_dodavanje(&popis);;
  258. }
  259. break;
  260. }
  261. cout << endl;
  262. case 2: {
  263. cout << "Pocinje ispis polja (od zadnje dodanog)." << endl;
  264. zadatak_a_ispis(&popis);
  265. break;
  266. }
  267. case 3:{
  268. cout << "Pokrecemo b zadatak, ispis nakon datuma." << endl;
  269. zadatak_b(&popis, 20120923);
  270. break;
  271. }
  272. case 4:{
  273. zadatak_c_vrsta(&popis);
  274. break;
  275. }
  276. case 5:{
  277. zadatak_c_naziv(&popis);
  278. break;
  279. }
  280. case 6:{
  281. cout << "Brojanje elemenata liste." << endl;
  282. int br = 0;
  283. zivotinja pom_z;
  284. element pom = FirstL(&popis);
  285. while (pom != EndL(&popis)){
  286. pom = NextL(pom, &popis);
  287. br++;
  288. }
  289.  
  290. cout << "Prebacivanje u polje." << endl;
  291. zivotinja *pomocno = new zivotinja[br];
  292. pom = FirstL(&popis);
  293. int j = 0;
  294. while (pom != EndL(&popis)) {
  295. pom_z = RetrieveL(pom, &popis);
  296. pomocno[j] = pom_z;
  297. j++;
  298. pom = NextL(pom, &popis);
  299. }
  300. sortiranje_po_nazivu(pomocno, 0, br-1);
  301.  
  302. cout << endl << "Sortirani ispis (po nazivu). " << endl;
  303. for (int i = 0; i < br; i++) {
  304. cout << "Naziv: " << pomocno[i].naziv << endl << endl;
  305. }
  306.  
  307. sortiranje_po_cijeni(pomocno, 0, br-1);
  308. cout << "Sortirani ispis (po cijeni). " << endl;
  309. for (int i = 0; i < br; i++) {
  310. cout << "Naziv: " << pomocno[i].naziv << ", cijena: " << pomocno[i].cijena << endl << endl;
  311. }
  312. break;
  313. }
  314. case 9: break;
  315. default: cout<<"Pogresan unos."<<endl;
  316. }
  317. cout<<endl;
  318. }while(izb!=9);
  319.  
  320. system("pause");
  321. return 0;
  322.  
  323. }

Report this snippet  

Comments

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

Kod kojeg sam radio posjeduje sličnosti s ovim kodom jer nam je zadatak bio isti, no postoje i određene razlike. Datoteke zaglavlja, odnosno funkcije u njima su izrađene na malo drugačiji način, a sama main funkcija također sadrži neke razlike ( druge funkcije, različita imena varijabli, itd..).

You need to login to post a comment.