Perlamado

Untitled

Feb 24th, 2020
46
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.51 KB | None | 0 0
  1. // esame 03/09/2019
  2. // file2.txt
  3.  
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6. #include <string.h>
  7. #include <math.h>
  8.  
  9. struct dati{
  10. int Ora;
  11. int Min;
  12. int Dip;
  13. int Porta;
  14.  
  15. };
  16. struct dipendente{
  17. int codiceDip;
  18. int numIngresso;
  19. int numUscita;
  20. };
  21.  
  22. struct dati *letturaFile(FILE *f,int *n);
  23. void stampaStructDati(struct dati *d,int n);
  24. struct dipendente *creazioneVetDip(struct dati *d,int nDati,int *n);
  25. void stampaVetDipendente( struct dipendente *d, int n );
  26. void riempiVetDipendente(struct dipendente *dip,struct dati *dati,int nDip,int nDati);
  27. int calcolaIngressi(struct dipendente *d,int n);
  28. int attivitaDipendente(struct dipendente *d,int n,int ID);
  29.  
  30. int main(int argc, char *argv[]){
  31. int nDip;
  32. int nDati;
  33. int numeroIngressi;
  34. int idDip;
  35. int ingressiDip;
  36. char s[5];
  37. struct dati *dati;
  38. struct dipendente *vetDipendente;
  39. FILE *f;
  40.  
  41. if(argc!=3){
  42. return 1;
  43. }
  44.  
  45. f=fopen(argv[1],"r");
  46.  
  47. if(f==NULL){
  48. printf("file non trovato\n");
  49. return 1;
  50. }
  51.  
  52. // funzioni per la lettura dei file
  53. dati=letturaFile(f,&nDati);
  54. stampaStructDati(dati,nDati);
  55. // funzione creazioneVetDip riempi vetDip
  56. vetDipendente=creazioneVetDip(dati,nDati,&nDip);
  57. stampaVetDipendente(vetDipendente, nDip);
  58. riempiVetDipendente(vetDipendente,dati,nDip,nDati);
  59. stampaVetDipendente(vetDipendente, nDip);
  60. // richiesta 1
  61. numeroIngressi=calcolaIngressi(vetDipendente,nDip);
  62. printf("[INGRESSI]\n%d\n",numeroIngressi);
  63. // richiesta 3
  64. printf("[DIPEDENTI\n%d\n]",nDip);
  65. // richiesta 5
  66.  
  67. strcpy(s,argv[2]+3);
  68. printf("argv[2] %s s: %s\n", argv[2], s);
  69. idDip=atoi(s);
  70. printf("ID %d\n", idDip);
  71. ingressiDip=attivitaDipendente(vetDipendente,nDip,idDip);
  72. printf("[ATTIVITA']\n%d\n",ingressiDip);
  73.  
  74. return 0;
  75. }
  76.  
  77.  
  78. struct dati *letturaFile(FILE *f,int *n){
  79.  
  80. int nConv; // nCOnv= numero conversioni
  81. int size=10;
  82. char buffer [100];
  83. char s1[8]; // codice dipendente completo dipxxxx
  84. char s2[5]; //solo parte numerica del codice xxxx
  85. struct dati *d1,*d2;
  86.  
  87. *n=0;
  88.  
  89. d2=malloc(size *sizeof(struct dati));
  90.  
  91. while(fgets(buffer,sizeof(buffer),f)){
  92. d1=d2 + *n;
  93. nConv=sscanf(buffer,"%d %d %s %d",&d1->Ora,&d1->Min,s1,&d1->Porta); // il codice dipendente lo salvo
  94. //in s perchè conto solo le ultime 4 cifre numriche
  95. // che inserisco all'interno della variabile dip della struct
  96.  
  97. strcpy(s2,s1+3);// 3 s2 stringa in cui copio e s1+3 è la posizione da cui inizio a copiare
  98. d1->Dip=atoi(s2); // inserisco il contenuto della stringa s2 all'interno della struct nel int Dip
  99. (*n)++;
  100.  
  101. if(*n>=size){
  102. size=2*size;
  103. d2=realloc(d2,size*sizeof(struct dati));
  104. }
  105. }
  106. d2=realloc(d2,*n*sizeof(struct dati));
  107.  
  108. return d2;
  109. }
  110.  
  111. void stampaStructDati(struct dati *d,int n){
  112.  
  113. int i;
  114.  
  115. for(i=0;i<n;i++){
  116. printf("%d %d %d %d\n",d[i].Ora,d[i].Min,d[i].Dip,d[i].Porta);
  117. }
  118. }
  119.  
  120. struct dipendente *creazioneVetDip(struct dati *d,int nDati,int *n){
  121. int i,j,k;
  122. k = 0;
  123. int flag;
  124. int v[nDati];
  125. int size = nDati/2;
  126. // il vettore è inizializzato a zero attraverso il ciclo
  127. for(i = 0;i < nDati; i++){
  128. v[i] = 0;
  129. }
  130.  
  131. struct dipendente *dip,*vetDip;
  132.  
  133. vetDip=malloc(size*sizeof(struct dipendente));
  134.  
  135. for(i=0;i<nDati;i++){
  136. flag=0;
  137. for(j=0;j<nDati;j++){
  138. if(v[j]==d[i].Dip){
  139. flag=1;
  140. }
  141. }
  142. v[i]=d[i].Dip;
  143. if(flag==0){
  144. dip=vetDip +k;
  145. dip->codiceDip=d[i].Dip;
  146. dip->numIngresso = 0;
  147. dip->numUscita = 0;
  148.  
  149. k++;
  150. }
  151. }
  152.  
  153. vetDip=realloc(vetDip, k*sizeof(struct dipendente));
  154. *n = k; //assegno al valore puntato da n la dimensione del vettore vetDip
  155. return vetDip;
  156.  
  157.  
  158. }
  159.  
  160. void stampaVetDipendente( struct dipendente *d, int n ){
  161. int i;
  162.  
  163. for(i=0;i<n;i++){
  164. printf("%d %d %d\n",d[i].codiceDip,d[i].numIngresso,d[i].numUscita);
  165. }
  166. }
  167. void riempiVetDipendente(struct dipendente *dip,struct dati *dati,int nDip,int nDati){
  168.  
  169. int i,j;
  170. for(i=0;i<nDip;i++){
  171. for(j=0;j<nDati;j++){
  172. if(dip[i].codiceDip==dati[j].Dip){
  173.  
  174. if(dip[i].numIngresso==dip[i].numUscita){
  175. dip[i].numIngresso++;
  176. }else {
  177. dip[i].numUscita++;
  178. }
  179. }
  180. }
  181. }
  182. }
  183. int calcolaIngressi(struct dipendente *d,int n){
  184. int i;
  185. int count=0; // la variabile che conta gli ingressi ed inizialmente vale 0
  186. for(i=0;i<n;i++){
  187. count=count+ d[i].numIngresso;
  188. }
  189. return count;
  190. }
  191.  
  192. int attivitaDipendente(struct dipendente *d,int n,int ID){
  193.  
  194. int i;
  195. int ingressi = 0;
  196. for(i=0;i<n;i++){
  197. if(ID==d[i].codiceDip){
  198. //printf("funziona\n");
  199. ingressi=d[i].numIngresso;
  200. }
  201. }
  202. return ingressi;
  203. }
Add Comment
Please, Sign In to add comment