Advertisement
Perlamado

Untitled

Feb 19th, 2020
104
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.25 KB | None | 0 0
  1. // esame 3
  2. //file3.txt
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <math.h>
  9.  
  10. struct dati{
  11. int giorno;
  12. int mese;
  13. int anno;
  14. int pacchi;
  15. char provenienza[11];
  16. int trasportoE;
  17. int trasportoN;
  18. };
  19.  
  20. struct dati *letturaFile(FILE *f,int *n);
  21. void stampaStructDati(struct dati *d,int n);
  22. int funzioneTrasportiEccezionali(struct dati *d,int n);
  23. int funzioneTrasportiNormali(struct dati *d,int n);
  24. int funzioneNumeroPacchi(struct dati *d,int n);
  25. void funzionePacchiHub(struct dati *d,int n);
  26. void funzioneMesi(struct dati *d,int n);
  27.  
  28. int main( int argc,char *argv[]){
  29. int n,E,N,pacchi;
  30. FILE *f;
  31. struct dati *dati;
  32.  
  33. if(argc!=3){
  34. return 1;
  35. }
  36. f=fopen(argv[1],"r");
  37. if(f==NULL){
  38. printf("file non trovato\n");
  39. return 1;
  40. }
  41. //funzioni lettura e stampa ,richiesta a,b
  42. dati=letturaFile(f,&n);
  43. fclose(f);
  44. stampaStructDati(dati,n);
  45. // richiesta c
  46. E=funzioneTrasportiEccezionali(dati,n);
  47. N=funzioneTrasportiNormali(dati,n);
  48. printf("Eccezionali:%d\n Normali:%d \n",E,N);
  49. // richiesta d
  50. pacchi=funzioneNumeroPacchi(dati,n);
  51. printf("numero tot pacchi: %d\n",pacchi);
  52. //richiesta e
  53. funzionePacchiHub(dati,n);
  54. //richiesta f
  55. funzioneMesi(dati,n);
  56.  
  57. return 0;
  58. }
  59. struct dati *letturaFile(FILE *f,int *n){
  60. int nConv;
  61. int size=10;
  62. char buffer[100];
  63. char s[2];
  64. struct dati *d1,*d2;
  65. *n=0;
  66.  
  67. d2=malloc(size*sizeof(struct dati));
  68.  
  69. while(fgets(buffer,sizeof(buffer),f)){
  70. d1=d2+ *n;
  71. nConv=sscanf(buffer,"%d %d %d %d %s %s",&d1->giorno,&d1->mese,&d1->anno,&d1->pacchi,d1->provenienza,s);
  72. if(s[0]=='E'){
  73. d1->trasportoE=1;
  74. }else{
  75. d1->trasportoE=0;
  76. }
  77. (*n)++;
  78. if(*n>=size){
  79. size=2*size;
  80. d2=realloc(d2,size*sizeof(struct dati));
  81. }
  82. }
  83. d2=realloc(d2,*n*sizeof(struct dati));
  84. return d2;
  85. }
  86. void stampaStructDati(struct dati *d,int n){
  87. int i;
  88. for(i=0;i<n;i++){
  89. printf("%d %d %d %d %s %d %d\n",d[i].giorno,d[i].mese,d[i].anno,d[i].pacchi,d[i].provenienza,d[i].trasportoE,d[i].trasportoN);
  90. }
  91. }
  92. int funzioneTrasportiEccezionali(struct dati *d,int n){
  93. int i;
  94. int count=0;
  95. for(i=0;i<n;i++){
  96. if(d[i].trasportoE==1){
  97. count++;
  98. }
  99. }
  100. return count;
  101. }
  102. int funzioneTrasportiNormali(struct dati *d,int n){
  103. int e;
  104. int count=0;
  105. e=funzioneTrasportiEccezionali(d,n);
  106.  
  107. return count-e;
  108. }
  109. int funzioneNumeroPacchi(struct dati *d,int n){
  110. int i;
  111. int count=0;
  112. for(i=0;i<n;i++){
  113. count+=d[i].pacchi;
  114. }
  115. return count;
  116. }
  117. void funzionePacchiHub(struct dati *d,int n){
  118. int i;
  119. int count=0;
  120. char hub[11];
  121.  
  122. for(i=0;i<11;i++){
  123. hub[i]=0;
  124. }
  125. for(i=0;i<n;i++){
  126.  
  127. if(strcmp(d[i].provenienza,hub)==0){
  128. count+=d[i].pacchi;
  129. }
  130. }
  131. printf("hub pacchi:%s\nnumero pacchi:%d\n",hub,count);
  132. }
  133. void funzioneMesi(struct dati *d,int n){
  134.  
  135. int i,j;
  136. int mese;
  137. int pacchiMese=0;
  138. int v[12];
  139. for(i=0;i<12;i++){ // inizializzo il vettore a zero
  140. v[i]=0;
  141. }
  142. for(i=0;i<n;i++){
  143. mese=d[i].mese;// inserisco i mesi nel vettore
  144. v[mese-1]++;
  145. }
  146. // ciclo per inserire i pacchi nel mese corretto. 2 for uno sulla struct e uno su v
  147. for(j=0;j<12;j++){
  148. for(i=0;i<n;i++){
  149. if(d[i].mese==v[j+1]){
  150.  
  151. pacchiMese+=d[i].pacchi;
  152. }
  153. }
  154. }
  155. printf("mese:%d\nnumero pacchi:%d\n",mese,pacchiMese);
  156. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement