Advertisement
Perlamado

Untitled

Feb 24th, 2020
113
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.47 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, char *hub);
  26. int *funzioneMesi(struct dati *d,int n);
  27. void funzioneOrdinaMesi(int *v);
  28.  
  29. int main( int argc,char *argv[]){
  30. int n,E,N,pacchi,i;
  31. int *v;
  32. FILE *f;
  33. struct dati *dati;
  34.  
  35. if(argc!=2){
  36. printf("Linea di comando non corretta \n");
  37. return 1;
  38. }
  39. f=fopen(argv[1],"r");
  40. if(f==NULL){
  41. printf("file non trovato\n");
  42. return 1;
  43. }
  44.  
  45.  
  46. printf("STAMPA1\n");
  47. //funzioni lettura e stampa ,richiesta a,b
  48. dati=letturaFile(f,&n);
  49. fclose(f);
  50. printf("STAMPA\n");
  51. stampaStructDati(dati,n);
  52. // richiesta c
  53. E=funzioneTrasportiEccezionali(dati,n);
  54. N=funzioneTrasportiNormali(dati,n);
  55. printf("Eccezionali:%d\n Normali:%d \n",E,N);
  56. // richiesta d
  57. pacchi=funzioneNumeroPacchi(dati,n);
  58. printf("numero tot pacchi: %d\n",pacchi);
  59. //richiesta e
  60. funzionePacchiHub(dati,n, "hub_C");
  61. //richiesta f
  62. v = funzioneMesi(dati,n);
  63.  
  64. for(i=0;i<12;i++){
  65. printf("mese:%d\nnumero pacchi:%d\n",i+1,v[i]);
  66. }
  67. //richiesta g
  68. funzioneOrdinaMesi(v);
  69. printf("vettore ordinato\n");
  70. for(i=0;i<12;i++){
  71. printf("mese:%d\nnumero pacchi:%d\n",i+1,v[i]);
  72. }
  73. return 0;
  74. }
  75. struct dati *letturaFile(FILE *f,int *n){
  76. int nConv;
  77. int size=10;
  78. char buffer[100];
  79. char s[2];
  80. struct dati *d1,*d2;
  81. *n=0;
  82.  
  83. d2=malloc(size*sizeof(struct dati));
  84.  
  85. while(fgets(buffer,sizeof(buffer),f)){
  86. d1=d2+ *n;
  87.  
  88. nConv=sscanf(buffer,"%d-%d-%d\t%d\t%s\t%s",&d1->giorno,&d1->mese,&d1->anno,&d1->pacchi,d1->provenienza,s);
  89. if(nConv == 6){
  90. d1->trasportoE=1;
  91. d1->trasportoN=0;
  92. }else{
  93. d1->trasportoE=0;
  94. d1->trasportoN=1;
  95. }
  96.  
  97. (*n)++;
  98. if(*n>=size){
  99. size=2*size;
  100. d2=realloc(d2,size*sizeof(struct dati));
  101. }
  102. printf("CARATTERE: %c VALORE: %d\n", s[0], d1->trasportoE);
  103. }
  104. d2=realloc(d2,*n*sizeof(struct dati));
  105. return d2;
  106. }
  107. void stampaStructDati(struct dati *d,int n){
  108. int i;
  109. for(i=0;i<n;i++){
  110. 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);
  111. }
  112. }
  113. int funzioneTrasportiEccezionali(struct dati *d,int n){
  114. int i;
  115. int count=0;
  116. for(i=0;i<n;i++){
  117. if(d[i].trasportoE==1){
  118. count++;
  119. }
  120. }
  121. return count;
  122. }
  123. int funzioneTrasportiNormali(struct dati *d,int n){
  124. int e;
  125. e=funzioneTrasportiEccezionali(d,n);
  126.  
  127. return n-e;
  128. }
  129. int funzioneNumeroPacchi(struct dati *d,int n){
  130. int i;
  131. int count=0;
  132. for(i=0;i<n;i++){
  133. count+=d[i].pacchi;
  134. }
  135. return count;
  136. }
  137. void funzionePacchiHub(struct dati *d,int n,char *hub){
  138. int i;
  139. int count=0;
  140.  
  141.  
  142. for(i=0;i<n;i++){
  143.  
  144. if(strcmp(d[i].provenienza,hub)==0){
  145. count+=d[i].pacchi;
  146. }
  147. }
  148. printf("hub pacchi:%s\nnumero pacchi:%d\n",hub,count);
  149. }
  150. int *funzioneMesi(struct dati *d,int n){
  151.  
  152. int i,j;
  153. int *v;
  154. v = malloc(12*sizeof(int));
  155. for(i=0;i<12;i++){ // inizializzo il vettore a zero
  156. v[i]=0;
  157. }
  158.  
  159. // ciclo per inserire i pacchi nel mese corretto. 2 for uno sulla struct e uno su v
  160. for(j=0;j<12;j++){
  161. for(i=0;i<n;i++){
  162. if(d[i].mese==j+1){ //j+1 perche' parte da zero e cosi trovo gennaio ecc ecc
  163. v[j]+=d[i].pacchi;
  164. }
  165. }
  166. }
  167. return v;
  168.  
  169.  
  170. }
  171. void funzioneOrdinaMesi(int *v){
  172.  
  173. int i,j;
  174. int s1;
  175. int s2;
  176. int temp;
  177. for(i=0;i<12;i++){
  178. for(j=0;j<12;j++){
  179. s1 = v[i];
  180. s2 = v[j];
  181. if(s1<s2){
  182. temp=v[i];
  183. v[i]=v[j];
  184. v[j]=temp;
  185. }
  186. }
  187. }
  188. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement