Posted By

dfilipov on 11/12/12


Tagged

Strukture podataka foi zadatak zivotinje


Versions (?)

SP Zadatak 1


 / Published in: C++
 

Ono što ja mislim da čini moj program posebnim je funkcija za dobivanje vrijednosti datuma Vr_Broj().

  1. #include <iostream>
  2. #include <cstdlib>
  3. #include <cstring>
  4. #include "lista_polje.h"
  5. //#include "lista_pokazivac.h"
  6. using namespace std;
  7.  
  8. short sifra = 1;
  9.  
  10. bool Dodaj_zapis(lista *L) {
  11. s_zapis unos;
  12. unos.sifra = sifra;
  13.  
  14. cin.ignore();
  15. cout << "Vrsta: ";
  16. cin.getline(unos.vrsta, 50);
  17.  
  18. cout << "Naziv: ";
  19. cin.getline(unos.naziv,50);
  20.  
  21. cout << "Cijena: ";
  22. cin >> unos.cijena;
  23.  
  24. cout << "Datum - " << endl;
  25. cout << "- dan: ";
  26. cin >> unos.datum.dan;
  27. cout << "- mjesec: ";
  28. cin >> unos.datum.mjesec;
  29. cout << "- godina: ";
  30. cin >> unos.datum.godina;
  31.  
  32. bool ispravno = true;
  33.  
  34. if (unos.vrsta[0]==NULL) ispravno = false;
  35. if (unos.naziv[0]==NULL) ispravno = false;
  36. if (unos.cijena<0) ispravno = false;
  37.  
  38. if (unos.datum.mjesec<1 || unos.datum.mjesec>12) ispravno = false;
  39. if (unos.datum.mjesec==1 || unos.datum.mjesec==3 || unos.datum.mjesec==5 || unos.datum.mjesec==7 || unos.datum.mjesec==8 || unos.datum.mjesec==10 || unos.datum.mjesec==12)
  40. if (unos.datum.dan<1 || unos.datum.dan>31) ispravno = false;
  41. if (unos.datum.mjesec==4 || unos.datum.mjesec==6 || unos.datum.mjesec==9 || unos.datum.mjesec==11)
  42. if (unos.datum.dan<1 || unos.datum.dan>30) ispravno = false;
  43. if (unos.datum.godina%4==0 && unos.datum.mjesec==2)
  44. if (unos.datum.dan<1 || unos.datum.dan>29) ispravno = false;
  45. if (unos.datum.godina%4 && unos.datum.mjesec == 2)
  46. if (unos.datum.dan<1 || unos.datum.dan>28) ispravno = false;
  47.  
  48. if (ispravno) {
  49. InsertL(unos, EndL(L), L);
  50.  
  51. sifra++;
  52. return true;
  53. }
  54. else return false;
  55. }
  56.  
  57. void Ispisi_listu(lista *L) {
  58. element zadnji = EndL(L);
  59. s_zapis podaci;
  60.  
  61. cout << "---------" << endl;
  62. while (zadnji != FirstL(L)) {
  63. zadnji = PreviousL(zadnji,L);
  64. podaci = RetrieveL(zadnji,L);
  65.  
  66. cout << "Sifra: " << podaci.sifra << endl;
  67. cout << "Vrsta: " << podaci.vrsta << endl;
  68. cout << "Naziv: " << podaci.naziv << endl;
  69. cout << "Cijena: " << podaci.cijena << endl;
  70. cout << "Datum: " << podaci.datum.dan << '.' << podaci.datum.mjesec << '.' << podaci.datum.godina << '.' << endl << endl;
  71. }
  72. }
  73.  
  74. float Vr_Broj(short d, short m, short g) {
  75. float rez = (float)d + (((float)m/12)*365) + ((float)g*365);
  76. return rez;
  77. }
  78.  
  79. int Nakon_23092012(lista *L) {
  80. element zadnji = PreviousL(EndL(L), L);
  81. element prvi = PreviousL(FirstL(L), L);
  82. s_zapis podaci;
  83. int koliko = 0;
  84.  
  85. cout << "---------" << endl;
  86. while (zadnji != prvi) {
  87. podaci = RetrieveL(zadnji,L);
  88.  
  89. if (Vr_Broj(podaci.datum.dan, podaci.datum.mjesec, podaci.datum.godina) > Vr_Broj(23,9,2012)) {
  90. cout << "Sifra: " << podaci.sifra << endl;
  91. cout << "Vrsta: " << podaci.vrsta << endl;
  92. cout << "Naziv: " << podaci.naziv << endl;
  93. cout << "Cijena: " << podaci.cijena << endl;
  94. cout << "Datum: " << podaci.datum.dan << '.' << podaci.datum.mjesec << '.' << podaci.datum.godina << '.' << endl << endl;
  95.  
  96. koliko++;
  97. }
  98.  
  99. zadnji = PreviousL(zadnji,L);
  100. }
  101. return koliko;
  102. }
  103.  
  104. bool Brisi_prema_nazivu(lista *L) {
  105. cout << "Unesi naziv zivotinje koju zelite izbrisati: ";
  106. cin.ignore();
  107. s_zapis unos;
  108. cin.getline(unos.naziv, 50);
  109.  
  110. element lokacija = LocateL(unos, L);
  111. if (DeleteL(lokacija, L)) return true;
  112. else return false;
  113. }
  114.  
  115. bool Brisi_prema_vrsti(lista *L) {
  116. cout << "Unesi vrste zivotinje koju zelite izbrisati: ";
  117. cin.ignore();
  118. s_zapis unos;
  119. cin.getline(unos.vrsta, 50);
  120.  
  121. bool brisao = false;
  122.  
  123. element lokacija;
  124. do {
  125. lokacija = LocateL(unos, L);
  126. if (lokacija == EndL(L)) break;
  127. if (DeleteL(lokacija, L)) brisao = true;
  128. } while (lokacija != EndL(L));
  129.  
  130. if (brisao) return true;
  131. return false;
  132. }
  133.  
  134. void MergeSort(s_zapis polje[], int L, int R) {
  135. int i, j, k, m;
  136. if (L < R) {
  137. m = (L+R)/2;
  138. MergeSort(polje, L, m);
  139. MergeSort(polje, m+1, R);
  140.  
  141. i=L; j=m+1; k=L;
  142. s_zapis *pom_polje = new s_zapis[R-L+1];
  143.  
  144. while (i<=m && j<=R)
  145. if (polje[i].cijena > polje[j].cijena) pom_polje[k++] = polje[i++];
  146. else if (polje[i].cijena < polje[j].cijena) pom_polje[k++] = polje[j++];
  147. else if (strcmp(polje[i].naziv, polje[j].naziv) > 0) pom_polje[k++] = polje[i++];
  148. else pom_polje[k++] = polje[i++];
  149.  
  150. while (i<=m) pom_polje[k++] = polje[i++];
  151. while (j<=R) pom_polje[k++] = polje[j++];
  152. for (k=L; k<=R; k++)
  153. polje[k] = pom_polje[k];
  154. }
  155. }
  156.  
  157. void MergeSort(lista *L) {
  158. s_zapis podaci[100];
  159. element pozicija = FirstL(L);
  160.  
  161. int br = 0;
  162. while (pozicija != EndL(L)) {
  163. podaci[br] = RetrieveL(pozicija, L);
  164. pozicija = NextL(pozicija, L);
  165. br++;
  166. }
  167.  
  168. MergeSort(podaci, 0, br-1);
  169.  
  170. cout << "---------" << endl;
  171. for (int i=0; i<br; i++) {
  172. cout << "Sifra: " << podaci[i].sifra << endl;
  173. cout << "Vrsta: " << podaci[i].vrsta << endl;
  174. cout << "Naziv: " << podaci[i].naziv << endl;
  175. cout << "Cijena: " << podaci[i].cijena << endl;
  176. cout << "Datum: " << podaci[i].datum.dan << '.' << podaci[i].datum.mjesec << '.' << podaci[i].datum.godina << '.' << endl << endl;
  177. }
  178. }
  179.  
  180. int main()
  181. {
  182. lista *zapisi;
  183. zapisi = InitL(zapisi);
  184. short odabir;
  185.  
  186. while (1) {
  187. system("cls");
  188. cout << "1. Dodaj zapis" << endl;
  189. cout << "2. Ispisi sadrzaj liste" << endl;
  190. cout << "3. Ispisi zivotinje koje su dostavljene nakon 23. rujna 2012" << endl;
  191. cout << "4. Brisi zivotinju prema nazivu" << endl;
  192. cout << "5. Brisi zivotinje prema vrsti" << endl;
  193. cout << "6. Silazno sortiraj zapise zivotinja" << endl;
  194. cout << "0. Izadi iz programa" << endl;
  195. cout << "-----------------------------" << endl << endl;
  196.  
  197. do {
  198. cout << "Vas odabir: ";
  199. cin >> odabir;
  200. } while (odabir!=1 && odabir!=2 && odabir!=3 && odabir!=4 && odabir!=5 && odabir!=6 && odabir!=0);
  201. cout << endl;
  202.  
  203. switch (odabir) {
  204. case 1: {
  205. if (Dodaj_zapis(zapisi)) cout << "Uspjesno ste unijeli zapis." << endl;
  206. else cout << "Zapis nije pravilan." << endl;
  207. break;
  208. }
  209. case 2: {
  210. Ispisi_listu(zapisi);
  211. break;
  212. }
  213. case 3: {
  214. cout << "Broj zivotinja dostavljenih nako 29.03.2012.: " << Nakon_23092012(zapisi) << endl;
  215. break;
  216. }
  217. case 4: {
  218. if (Brisi_prema_nazivu(zapisi)) cout << "Uspjesno ste izbrisali zapis." << endl;
  219. else cout << "Zapis nije pronaden." << endl;
  220. break;
  221. }
  222. case 5: {
  223. if (Brisi_prema_vrsti(zapisi)) cout << "Uspjesno ste izbrisali zapise." << endl;
  224. else cout << "Zapisi nisu pronadeni." << endl;
  225. break;
  226. }
  227. case 6: {
  228. MergeSort(zapisi);
  229. cout << "Sortirano." << endl;
  230. break;
  231. }
  232. default: return 0;
  233. }
  234. system("pause");
  235. }
  236. }

Report this snippet  

You need to login to post a comment.