Advertisement
elica123

Untitled

Jun 20th, 2018
98
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.62 KB | None | 0 0
  1. ZADATAK
  2.  
  3. a) (5 bodova) Napišite definiciju tipa podataka datum koji se sastoji od integer komponenti dan, mjesec i godina. Nadalje,
  4. napišite definiciju tipa podataka element za elemente vezane liste koji sadrže ime, prezime (stringovi od najviše 20
  5. znakova) i datum rođenja osobe (tip datum). Varijable treba biti moguće deklarirati u obliku datum x i element y.
  6. b) (5 bodova) Napišite funkciju dodaj() koja na početak liste dodaje element koji sadrži zadano ime, prezime i datum
  7. rođenja osobe. Argumente i povratni tip te funkcije odredite sami.
  8. c) (5 bodova) Napišite funkciju void ispis(element *prvi, datum d, int g) koja uzima pokazivač na zaglavlje liste
  9. i ispisuje imena i prezimena svih osoba koji su na zadani datum mlađe od g godina.
  10. d) (10 bodova) Napišite glavni program koji iz tekstualne datoteke osobe.in učitava podatke o osobama i ubacuje ih u
  11. vezanu listu koristeći funkciju dodaj. Datoteka u svakom retku sadrži podatke u formatu
  12. ime prezime dan.mjesec.godina
  13. Program zatim poziva funkciju ispis i ispisuje imena i prezimena osoba koje su 9.9.2014. mlađe od 30 godina.
  14.  
  15. RJESENJE:
  16. //a) dio zadatka
  17. typedef struct _datum{
  18. int dan;
  19. int mjesec;
  20. int godina;
  21. }datum;
  22. typedef struct _element{
  23. char ime[21];
  24. char prezime[21];
  25. datum rođenje;
  26. struct _element *next;
  27. }
  28. // b dio zadatka
  29. element* dodaj(element *first, char ime,char prezime,datum datumm){
  30. element *rje;
  31. rje->ime=ime;
  32. rje->prezime=pezime;
  33. rje->rođenje.dan=datumm.dan;
  34. rje->rođenje.mjesec=datumm.mjesec;
  35. rje->rođenje.godina=datumm.godina;
  36. rje->next=first;
  37. return rje;
  38. }
  39. // c dio zadatka
  40. void ispis(element *prvi,const datum d, const int g){
  41. element *pom=*first;
  42. while(pom){ //dal mozda nemora ic pom->datum->dan, nee jer datum nije s *
  43. if(d.dan==pom->rođenje.dan && d.godina==pom->rođenje.godina && d.mjesec==pom->rođenje.mjesec)
  44. if((d.godina-pom->rođenje.godina)<9) //trebalo bi jos to malo vise razradit za mjesece i dane
  45. printf("%s %s",pom->ime, pom->prezime);
  46. pom=pom->next;
  47. }
  48. }
  49. // d dio zadatka
  50. #include<stdio.h>
  51. #include<stdlib.h>
  52. #include<string.h>
  53. int main(void){
  54. FILE *in;
  55. if((in=fopen("osobe.in", "rt"))==NULL){
  56. printf("Greska");
  57. exit(1);
  58. }
  59. char ime,prezime;
  60. int dan,mjesec, godina;
  61. element *first=NULL;
  62. datum datumm;
  63. while(fscanf(in, "%s %s %d.&d.%d", &ime, &prezime, &datumm.dan, &datumm.mjesec, &datumm.godina)>0){
  64. dodaj(first, ime, prezime, datumm) // jesam li dobro poslala listu u funkciju? je li potrebna inicijalizacija na nulu??
  65. }
  66. datumm.dan=9;
  67. datumm.mjesec=9;
  68. datumm.godina=2014;
  69. ispis(first, datum,30);
  70. fclose(in);
  71. return 0;
  72. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement