Posted By

smusa92 on 01/20/12


Tagged

Strukture podataka


Versions (?)

z2_smusa


 / Published in: C++
 

Drugi zadatak

  1. //stog pokaziva��
  2.  
  3.  
  4. struct odora {
  5. int code;
  6. char ime[40], vrsta[40], datum[20], rok_up[20];
  7. };
  8. struct st {
  9. odora vrijednost;
  10. st *next;
  11. };
  12. st *stog=new st, *stog1=new st;
  13.  
  14. void InitS (st *stog) {
  15. stog->next=NULL;
  16. }
  17.  
  18. odora TopS (st *stog) {
  19. return (stog->next)->vrijednost;
  20. }
  21. void PushS (odora x, st *stog) {
  22. st *novi=new st;
  23. novi->vrijednost=x;
  24. novi->next=stog->next;
  25. stog->next=novi;
  26. }
  27. void PopS (st *stog) {
  28. st *prvi=stog->next;
  29. stog->next=prvi->next;
  30. delete prvi;
  31. }
  32.  
  33. bool IsEmptyS (st *stog) {
  34. if (stog->next==NULL) return true;
  35. else return false;
  36. }
  37.  
  38. //stog polje
  39.  
  40.  
  41. struct odora {
  42. int code;
  43. char ime[45], vrsta[45], datum[25], rok_up[25];
  44. };
  45. struct st {
  46. odora elem[1000];
  47. int kursor;
  48. };
  49. st stog, stog1;
  50.  
  51. void InitS (st &stog) {
  52. stog.kursor=999;
  53. }
  54. odora TopS (st stog) {
  55. return stog.elem[stog.kursor+1];
  56. }
  57. void PushS (odora x, st &stog) {
  58. stog.elem[stog.kursor]=x;
  59. stog.kursor--;
  60. }
  61. void PopS (st &stog) {
  62. stog.kursor++;
  63. }
  64.  
  65. bool IsEmptyS (st stog) {
  66. if (stog.kursor==999) return true;
  67. return false;
  68. }
  69.  
  70. //main
  71.  
  72.  
  73. #include <iostream>
  74. #include <cmath>
  75. //#include "stog_polje.h"
  76. #include "stog_pokazivac.h"
  77. using namespace std;
  78. bool check_date(char p[], bool w=true) {
  79.  
  80. int days=10*(p[0]-48)+(p[1]-48);
  81.  
  82. if (days<1 || days>31)
  83. return 0;
  84. int mjes=10*(p[3]-48)+(p[4]-48);
  85.  
  86. if (mjes<1 || mjes>12)
  87. return 0;
  88. if (w) {
  89. int god=1000*(p[6]-48)+100*(p[7]-48)+10*(p[8]-48)+(p[9]-48);
  90.  
  91. if (god<2010 || god>2011)
  92. return 0;
  93. }
  94. return 1;
  95. }
  96.  
  97. bool datum (char p[]) {
  98. int god=1000*(p[6]-48)+100*(p[7]-48)+10*(p[8]-48)+(p[9]-48);
  99.  
  100. if (god>2010)
  101. return false;
  102. int mje=10*(p[3]-48)+(p[4]-48);
  103. if (mje<9)
  104. return true;
  105. if (mje>9)
  106. return false;
  107. int dan=10*(p[0]-48)+(p[1]-48);
  108. if (dan<23)
  109. return true;
  110. return false;
  111. }
  112.  
  113. void ispis_1 () {
  114. odora a;
  115. InitS(stog1);
  116. system ("cls");
  117. cout << "Ispis robe koja je proizvedena prije 23.09.2010.: "<<endl;
  118. while (!IsEmptyS(stog)) {
  119. a=TopS(stog);
  120. if (datum(a.datum)) {
  121. cout << "\nSifra robe: " << a.code;
  122. cout << "\nNaziv robe: " << a.ime;
  123. cout << "\nVrsta robe: " << a.vrsta;
  124. cout << "\nDatum proizvodnje: " << a.datum;
  125. cout << "\nRok uporabe: " << a.rok_up;
  126. cout << "\n======================="<<endl;
  127. }
  128. else PushS(a, stog1);
  129. PopS(stog);
  130. }
  131. system ("pause");
  132. cout << "\nStanje stoga:\n";
  133. while (!IsEmptyS(stog1)) {
  134. a=TopS(stog1);
  135. cout << "\nSifra robe: " << a.code;
  136. cout << "\nNaziv robe: " << a.ime;
  137. cout << "\nVrsta robe: " << a.vrsta;
  138. cout << "\nDatum proizvodnje: " << a.datum;
  139. cout << "\nRok uporabe: " << a.rok_up;
  140. cout << "\n======================"<<endl;
  141. PopS(stog1);
  142. PushS(a, stog);
  143. }
  144. system ("pause");
  145. }
  146. void f1 (){// utovar robe :D
  147. system ("cls");
  148. odora a;
  149. cout << "Sifra robe: ";
  150. cin >> a.code;
  151. cin.ignore();
  152. cout << "Naziv robe: ";
  153. cin.getline(a.ime, 45);
  154. cout << "Vrsta robe: ";
  155. cin.getline(a.vrsta, 45);
  156. bool w;
  157. do {
  158. cout << "Datum proizvodnje (01.01.2010.-31.12.2011.): ";
  159. cin.getline(a.datum, 25);
  160. w=check_date(a.datum);
  161. if (!w) cout << "Krivi datum!\n";
  162. } while (!w);
  163. do {
  164. cout << "Rok uporabe: ";
  165. cin.getline(a.rok_up, 25);
  166. w=check_date(a.rok_up, false);
  167. if (!w) cout << "Krivi datum!\n";
  168.  
  169. } while (!w);
  170. PushS(a, stog);
  171. cout << "\nDodali ste robu u stog.\n";
  172. system ("pause");
  173. }
  174.  
  175.  
  176. bool razlika (char p[], char b[]) {
  177. int proiz=1000*(p[6]-48)+100*(p[7]-48)+10*(p[8]-48)+(p[9]-48);
  178. int rok=1000*(b[6]-48)+100*(b[7]-48)+10*(b[8]-48)+(b[9]-48);
  179. if (proiz+1<rok) return false;
  180. if (proiz<rok) {
  181. proiz=10*(p[3]-48)+(p[4]-48);
  182. if (proiz<12) return false;
  183. rok=10*(b[3]-48)+(b[4]-48);
  184. if (rok>1) return false;
  185. proiz=10*(p[0]-48)+(p[1]-48);
  186. rok=10*(b[0]-48)+(b[1]-48);
  187. if ((rok+30-proiz)>14) return false;
  188. return true;
  189. }
  190. proiz=10*(p[3]-48)+(p[4]-48);
  191. rok=10*(b[3]-48)+(b[4]-48);
  192. if (proiz+1<rok) return false;
  193. if (proiz<rok) {
  194. proiz=10*(p[0]-48)+(p[1]-48);
  195. rok=10*(b[0]-48)+(b[1]-48);
  196. if ((rok+30-proiz)>14) return false;
  197. return true;
  198. }
  199. proiz=10*(p[0]-48)+(p[1]-48);
  200. rok=10*(b[0]-48)+(b[1]-48);
  201. if ((proiz-rok)>14) return false;
  202. return true;
  203. }
  204. void ispis_2 () {
  205. static bool t=true;
  206. if (IsEmptyS(stog)) {
  207. t=true;
  208. return;
  209. }
  210. odora a=TopS(stog);
  211. bool w=razlika(a.datum, a.rok_up);
  212. if (w) {
  213. cout << "\nSifra robe: " << a.code;
  214. cout << "\nNaziv robe: " << a.ime;
  215. cout << "\nVrsta robe: " << a.vrsta;
  216. cout << "\nDatum proizvodnje: " << a.datum;
  217. cout << "\nRok uporabe: " << a.rok_up;
  218. cout << "\n====================="<<endl;
  219. }
  220. PopS(stog);
  221. ispis_2();
  222. if (t) {
  223. system ("pause");
  224. cout << "\nStanje stoga:"<<endl;
  225. t=false;
  226. }
  227. if (!w) {
  228. PushS(a, stog);
  229. cout << "\nSifra robe: " << a.code;
  230. cout << "\nNaziv robe: " << a.ime;
  231. cout << "\nVrsta robe: " << a.vrsta;
  232. cout << "\nDatum proizvodnje: " << a.datum;
  233. cout << "\nRok uporabe: " << a.rok_up;
  234. cout << "\n==================="<<endl;
  235. }
  236. return;
  237. }
  238. int main () {
  239. int a;
  240. InitS(stog);
  241. do {
  242. system ("cls");
  243. cout<<"----------------------------------------------------"<<endl;
  244. cout << "1. Utovar robe u skladiste"<<endl;
  245. cout << "2. Istovar robe u prvoj trgovini"<<endl;
  246. cout << "3. Istovar robe u drugoj trgovini"<<endl;
  247. cout << "9. Prekid programa"<<endl;
  248. cout<<"----------------------------------------------------"<<endl;
  249. cout << "Vas izbor: ";
  250. do {cin >> a;
  251. } while (a<0 || a>3&&a!=9);
  252. switch (a) {
  253. case 1: f1(); break;
  254. case 2: ispis_1(); break;
  255. case 3:{
  256. system ("cls");
  257. cout << "Ispis pokvarljive robe:\n";
  258. ispis_2();
  259. system ("pause");
  260. }
  261. }
  262. } while (a!=9);
  263. return 0;
  264. }

Report this snippet  

You need to login to post a comment.