Advertisement
etf2018

Z5Z1

Sep 1st, 2018
117
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 6.00 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <string.h>
  3.  
  4. struct Datum {
  5. int dan, mjesec, godina;
  6. };
  7. struct Uposlenik {
  8. char ime_prezime[50];
  9. struct Datum datum_rodjenja;
  10. };
  11. int broj_rijeci(char *s) { // Funkcija za prebrojavanje rijeci, TUT 9 Zadatak 5
  12. int brojac = 0;
  13. while (*s) {
  14. if (*s==' ' && *(s-1)!=' ')
  15. brojac++;
  16. s++;
  17. if (*s=='\0' && *(s-1)!=' ')
  18. brojac++;
  19. }
  20. return brojac;
  21. }
  22. int provjeri_prezime(struct Uposlenik kandidat, struct Uposlenik direktor) {
  23. char prvoprezimekand[50], drugoprezimekand[50], prvoprezimedir[50], drugoprezimedir[50];
  24. int brojrijecikand, brojrijecidir, brojprezimenadir=1, brojprezimenakand=1;
  25. brojrijecikand=broj_rijeci(kandidat.ime_prezime); // Sluzi da provjeravamo broj imena
  26. brojrijecidir=broj_rijeci(direktor.ime_prezime);
  27. char *pocetakPrvogPreziKand, *pocetakDrugogPreziKand, *pocetakPrvogPreziDir, *pocetakDrugogPreziDir, *pomocniPok;
  28. char *klizeciPrvogPreziKand, *klizeciDrugogPreziKand, *klizeciPrvogPreziDir, *klizeciDrugogPreziDir;
  29. pocetakPrvogPreziKand=prvoprezimekand;
  30. pocetakDrugogPreziKand=drugoprezimekand;
  31. pocetakPrvogPreziDir=prvoprezimedir;
  32. pocetakDrugogPreziDir=drugoprezimedir;
  33. klizeciPrvogPreziKand=prvoprezimekand;
  34. klizeciDrugogPreziKand=drugoprezimekand;
  35. klizeciPrvogPreziDir=prvoprezimedir;
  36. klizeciDrugogPreziDir=drugoprezimedir;
  37.  
  38. pomocniPok=kandidat.ime_prezime;
  39. while(*pomocniPok!=' ')
  40. pomocniPok++;
  41. pomocniPok++;
  42. if (brojrijecikand==3) { // Ako je funkcija izbrojala tri rijeci, znaci da kandidat ima 2 imena, tako da pomjeramo pokazivac na kraj drugog imena, tj na pocetak prezimena
  43. while (*pomocniPok!=' ')
  44. pomocniPok++;
  45. pomocniPok++;
  46. }
  47. while(*pomocniPok!='-' && *pomocniPok!='\0')
  48. *klizeciPrvogPreziKand++=*pomocniPok++; // Upisuje prezime u pomocni string prvoprezimekand
  49. *klizeciPrvogPreziKand='\0';
  50. if(*pomocniPok=='-') {
  51. pomocniPok++;
  52. while(*pomocniPok!='\0')
  53. *klizeciDrugogPreziKand++=*pomocniPok++; // U slucaju da je naisao na znak -, znaci da kandidat ima 2 prezimena, tako da upisujemo drugo prezime u pomocni string drugoprezimekand
  54. *klizeciDrugogPreziKand='\0';
  55. brojprezimenakand++;
  56. }
  57. // Analogno se sve radi i za direktora
  58. pomocniPok=direktor.ime_prezime;
  59. while(*pomocniPok!=' ')
  60. pomocniPok++;
  61. pomocniPok++;
  62. if (brojrijecidir==3) {
  63. while (*pomocniPok!=' ')
  64. pomocniPok++;
  65. pomocniPok++;
  66. }
  67. while(*pomocniPok!='-' && *pomocniPok!='\0')
  68. *klizeciPrvogPreziDir++=*pomocniPok++;
  69. *klizeciPrvogPreziDir='\0';
  70. if(*pomocniPok=='-') {
  71. pomocniPok++;
  72. while(*pomocniPok!='\0')
  73. *klizeciDrugogPreziDir++=*pomocniPok++;
  74. *klizeciDrugogPreziDir='\0';
  75. brojprezimenadir++;
  76. }
  77. // If statementi koji za određen broj prezimena direktora i kandidata poredi prezimena, nije se moglo jednim if statementom jer za slucajeve jednog prezimena, stringovi drugoprezimekand i drugoprezimedir bi bili neinicijalizovani
  78. if(brojprezimenadir==1 && brojprezimenakand==1) {
  79. if(strcmp(pocetakPrvogPreziKand,pocetakPrvogPreziDir)!=0)
  80. return 1;
  81. }
  82. if(brojprezimenadir==1 && brojprezimenakand==2) {
  83. if(strcmp(pocetakPrvogPreziDir, pocetakPrvogPreziKand)!=0 && strcmp(pocetakPrvogPreziDir, pocetakDrugogPreziKand)!=0)
  84. return 1;
  85. }
  86. if(brojprezimenadir==2 && brojprezimenakand==1) {
  87. if(strcmp(pocetakPrvogPreziDir, pocetakPrvogPreziKand)!=0 && strcmp(pocetakDrugogPreziDir, pocetakPrvogPreziKand)!=0)
  88. return 1;
  89. }
  90. if(brojprezimenadir==2 && brojprezimenakand==2) {
  91. if(strcmp(pocetakPrvogPreziDir, pocetakPrvogPreziKand)!=0 && strcmp(pocetakPrvogPreziDir, pocetakDrugogPreziKand)!=0 && strcmp(pocetakDrugogPreziDir, pocetakPrvogPreziKand)!=0 && strcmp(pocetakDrugogPreziDir, pocetakDrugogPreziKand))
  92. return 1;
  93. }
  94. return 0;
  95. }
  96. int razlika_dana(struct Uposlenik kandidat, struct Uposlenik direktor) {
  97. // Funkcija radi tako sto broji koliko dana je proslo od 00/00/0000
  98. int mjeseciUGodini[]={31,28,31,30,31,30,31,31,30,31,30,31};
  99. int godine, i;
  100. long brojdanakandidata, brojdanadirektora, razlikadana;
  101. brojdanakandidata=kandidat.datum_rodjenja.godina*365+kandidat.datum_rodjenja.dan; // Dodavanje godina i dana u mjesecu rodjenja
  102. for(i=0;i<kandidat.datum_rodjenja.mjesec-1;i++)
  103. brojdanakandidata+=mjeseciUGodini[i]; // Dodavanje preostalih mjeseci
  104. godine=kandidat.datum_rodjenja.godina;
  105. if (kandidat.datum_rodjenja.mjesec<=2)
  106. godine--; // U slucaju da je rodjen u januaru ili februaru, ne treba racunati prestupnu godinu
  107. brojdanakandidata+=godine/4-godine/100+godine/400; // Dodavanje prestupnih godina
  108. // Analogno se radi i za direktora
  109. brojdanadirektora=direktor.datum_rodjenja.godina*365+direktor.datum_rodjenja.dan;
  110. for (i=0;i<direktor.datum_rodjenja.mjesec-1;i++)
  111. brojdanadirektora+=mjeseciUGodini[i];
  112. godine=direktor.datum_rodjenja.godina;
  113. if (direktor.datum_rodjenja.mjesec<=2)
  114. godine--;
  115. brojdanadirektora+=godine/4-godine/100+godine/400;
  116. razlikadana=brojdanadirektora-brojdanakandidata;
  117.  
  118. return razlikadana; // Vracamo razliku izmedju dva broja
  119. }
  120.  
  121. int suzi_listu(struct Uposlenik* kandidati, int vel, struct Uposlenik direktor, int broj_dana) {
  122. int i, razlikadana, j;
  123. for (i=0;i<vel;i++) {
  124. razlikadana=razlika_dana(kandidati[i], direktor);
  125. if(razlikadana>broj_dana) { // U slucaju da kandidat ne zadovoljava uslove direktora, prvo se provjerava da li je dio porodice, te onda ako nije se izbacuje iz liste
  126. if(provjeri_prezime(kandidati[i], direktor)) {
  127. for (j=i;j<vel-1;j++)
  128. kandidati[j]=kandidati[j+1];
  129. vel--;
  130. i--;
  131. }
  132. }
  133. }
  134. return vel;
  135. }
  136. int main() {
  137. struct Uposlenik direktor = {"Mujo Mujic", {1, 9, 1980} };
  138. struct Uposlenik kandidati[7] = {
  139. { "Meho Mehic", { 31, 1, 1980 } },
  140. { "Pero Peric", { 1, 2, 1980 } },
  141. { "Sara Sarac", { 3, 10, 1980 } },
  142. { "Fata Mujic", { 1, 2, 1976 } },
  143. { "Jozo Jozic", { 2, 10, 1980 } },
  144. { "Mijo Mijic", { 4, 3, 1979 } },
  145. { "Suljo Suljc", { 15, 1, 1982 } },
  146. };
  147.  
  148. int novi_br = suzi_listu(kandidati, 7, direktor, -31);
  149. int i;
  150. printf("Nakon suzenja liste:\n");
  151. for (i=0; i<novi_br; i++)
  152. printf("%s\n", kandidati[i].ime_prezime);
  153.  
  154. return 0;
  155. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement