Advertisement
Guest User

Untitled

a guest
Jan 27th, 2020
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.99 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <string.h>
  4.  
  5. struct Datum {
  6. int dan, mjesec, godina;
  7. };
  8.  
  9. struct Student {
  10. char ime[20], prezime[20];
  11. struct Datum datum_rodjenja;
  12. };
  13.  
  14. void unesi(char niz[], int velicina)
  15. {
  16. char znak = getchar();
  17. if(znak =='\n') znak=getchar();
  18. int i = 0;
  19. while(i<velicina-1 && znak !='\n') {
  20. niz[i] = znak;
  21. i++;
  22. znak = getchar();
  23. }
  24. niz[i] ='\0';
  25. }
  26.  
  27. void zapisi(struct Student studenti[], int n)
  28. {
  29. int i;
  30. FILE *ulaz=fopen("studenti.dat", "ab");
  31. if(ulaz==NULL) {
  32. printf("Greska pri otvaranju datoteke studenti.dat!");
  33. }
  34. for(i=0; i<n; i++) {
  35. fwrite(studenti[i].ime, 1, 20, ulaz);
  36. fwrite(studenti[i].prezime, 1, 20, ulaz);
  37. fwrite(&studenti[i].datum_rodjenja.dan, 1, 1, ulaz);
  38. fwrite(&studenti[i].datum_rodjenja.mjesec, 1, 1,ulaz);
  39. fwrite(&studenti[i].datum_rodjenja.godina, 2, 1, ulaz);
  40. if(ferror(ulaz)) {
  41. printf("Greska prilikom pisanja datoteke.\n");
  42. }
  43. }
  44. fclose(ulaz);
  45. }
  46.  
  47. void promijeni(struct Student student, int n)
  48. {
  49. struct Student studenti[100];
  50. FILE *ulaz=fopen("studenti.dat", "r+b");
  51. if(ferror(ulaz)) {
  52. printf("Greska pri otvaranju datoteke studenti.dat!");
  53. }
  54. strcpy(studenti[n].ime, student.ime);
  55. strcpy(studenti[n].prezime, student.prezime);
  56. fread(studenti[n].ime, 1, 20, ulaz);
  57. fread(studenti[n].prezime, 1, 20, ulaz);
  58. fread(&studenti[n].datum_rodjenja.dan, 1, 1, ulaz);
  59. fread(&studenti[n].datum_rodjenja.mjesec, 1, 1, ulaz);
  60. fread(&studenti[n].datum_rodjenja.godina, 2, 1, ulaz);
  61. strcpy(studenti[n].ime, student.ime);
  62. strcpy(studenti[n].prezime, student.prezime);
  63. studenti[n].datum_rodjenja.dan=student.datum_rodjenja.dan;
  64. studenti[n].datum_rodjenja.mjesec=student.datum_rodjenja.mjesec;
  65. studenti[n].datum_rodjenja.godina=student.datum_rodjenja.godina;
  66. fwrite(studenti[n].ime, 1, 20, ulaz);
  67. fwrite(studenti[n].prezime, 1, 20, ulaz);
  68. fwrite(&studenti[n].datum_rodjenja.dan, 1, 1, ulaz);
  69. fwrite(&studenti[n].datum_rodjenja.mjesec, 1, 1, ulaz);
  70. fwrite(&studenti[n].datum_rodjenja.godina, 2, 1, ulaz);
  71. if(ferror(ulaz)) {
  72. printf("Greska prilikom pisanja datoteke.\n");
  73. }
  74. fclose(ulaz);
  75. }
  76.  
  77. int dani(struct Student studenti[], int n)
  78. {
  79. int indeksmjeseca, sumaDanaKrozMjesece, mjesec_u_danima, ukupniDani, j, brojdana;
  80. indeksmjeseca=studenti[n].datum_rodjenja.mjesec;
  81. sumaDanaKrozMjesece=0;
  82. do {
  83. switch(indeksmjeseca-1) {
  84. case 1:
  85. mjesec_u_danima=31;
  86. break;
  87. case 3:
  88. mjesec_u_danima=31;
  89. break;
  90. case 2:
  91. if((studenti[n].datum_rodjenja.godina%4==0 && studenti[n].datum_rodjenja.godina%100!=0) || studenti[n].datum_rodjenja.godina%400==0) {
  92. mjesec_u_danima=29;
  93. } else {
  94. mjesec_u_danima=28;
  95. }
  96. break;
  97. case 4:
  98. mjesec_u_danima=30;
  99. break;
  100. case 5:
  101. mjesec_u_danima=31;
  102. break;
  103. case 6:
  104. mjesec_u_danima=30;
  105. break;
  106. case 7:
  107. mjesec_u_danima=31;
  108. break;
  109. case 8:
  110. mjesec_u_danima=31;
  111. break;
  112. case 9:
  113. mjesec_u_danima=30;
  114. break;
  115. case 10:
  116. mjesec_u_danima=31;
  117. break;
  118. case 11:
  119. mjesec_u_danima=30;
  120. break;
  121. case 12:
  122. mjesec_u_danima=31;
  123. break;
  124. default:
  125. mjesec_u_danima=0;
  126. break;
  127. }
  128. if(indeksmjeseca==1) {
  129. indeksmjeseca+=1;
  130. }
  131. sumaDanaKrozMjesece+=mjesec_u_danima;
  132. indeksmjeseca--;
  133. } while(indeksmjeseca!=1);
  134. ukupniDani=sumaDanaKrozMjesece+studenti[n].datum_rodjenja.dan;
  135. brojdana=0;
  136. for(j=1000; j<studenti[n].datum_rodjenja.godina; j++) {
  137. if((j%4==0 && j%100!=0) || j%400==0) {
  138. //printf("%d", brojdana);
  139. brojdana+=366;
  140. // printf("%d prestupna\n", j);
  141. } else {
  142. brojdana+=365;
  143. // printf("%d ne\n", j);
  144. }
  145. }
  146. return brojdana+ukupniDani-1;
  147. }
  148.  
  149. void period(struct Student studenti[], int n, int D)
  150. {
  151. int broj_D, temp=0, tempindeks, i, k;
  152. broj_D=abs(D);
  153. for(k=0; k<n; k++) {
  154. temp=dani(studenti, k);
  155. tempindeks=k;
  156. for(i=k+1; i<n; i++) {
  157. if(temp==dani(studenti, i)+broj_D || temp==dani(studenti, i)-broj_D) {
  158. printf("%s %s - %s %s\n", studenti[tempindeks].ime, studenti[tempindeks].prezime, studenti[i].ime, studenti[i].prezime);
  159. }
  160. }
  161. }
  162. }
  163.  
  164. int main()
  165. {
  166. int D, opcija;
  167. struct Student studenti[100];
  168. printf("Unesite broj D: ");
  169. scanf("%d", &D);
  170. int i=0, vel=0;
  171. do {
  172. printf("Unesite 1 za unos, 2 za ispis, 0 za izlaz: ");
  173. scanf("%d", &opcija);
  174. if(opcija==0) {
  175. return 0;
  176. } else if(opcija==1) {
  177. printf("Unesite ime: ");
  178. unesi(studenti[i].ime, 20);
  179. printf("Unesite prezime: ");
  180. unesi(studenti[i].prezime, 20);
  181. printf("Unesite datum rodjenja: ");
  182. scanf("%d %d %d", &studenti[i].datum_rodjenja.dan, &studenti[i].datum_rodjenja.mjesec, &studenti[i].datum_rodjenja.godina);
  183. i++;
  184. vel=i;
  185. } else if(opcija==2) {
  186. for(i=0; i<vel; i++) {
  187. printf("%d. %s %s %d %d %d\n", i+1, studenti[i].ime, studenti[i].prezime, studenti[i].datum_rodjenja.dan, studenti[i].datum_rodjenja.mjesec, studenti[i].datum_rodjenja.godina);
  188. }
  189. } else if(opcija==3) {
  190. period(studenti, vel, D);
  191. zapisi(studenti, vel);
  192. }
  193. } while(opcija!=0);
  194. return 0;
  195. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement