Advertisement
Perlamado

Untitled

Feb 24th, 2020
135
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.82 KB | None | 0 0
  1. // esame 26-02-2016
  2. // file260216.txt
  3.  
  4.  
  5. #include <stdio.h>
  6. #include <stdlib.h>
  7. #include <string.h>
  8. #include <math.h>
  9. struct dati{
  10. int anno;
  11. int mese;
  12. int ora;
  13. int min;
  14. int centralina;
  15. double temperatura;
  16. };
  17. struct dati *letturaFile(FILE *f,int *n);
  18. void stampaStructDati(struct dati *d,int n);
  19. int soglia32(struct dati *d,int n);
  20. double mediaTemperatura(struct dati *d,int n);
  21. void temperaturaMinima(struct dati *d,int n);
  22. void temperaturaMassima(struct dati *d,int n);
  23. int mese(struct dati *d,int n);
  24. int numeroTotaleCentraline(struct dati *d,int n);
  25.  
  26. int main( int argc, char *argv[]){
  27. int nDati;
  28. int numSuperamenti,totCentraline,meseMax;
  29. double mediaTemp;
  30.  
  31. struct dati *dati;
  32. FILE *f;
  33.  
  34.  
  35. if(argc!=2){
  36. return 1;
  37. }
  38. f=fopen(argv[1],"r");
  39.  
  40. if(f==NULL){
  41. printf("file non trovato\n");
  42. return 1;
  43. }
  44. //lettura e stampa struct
  45. dati=letturaFile(f,&nDati);
  46. fclose(f);
  47. stampaStructDati(dati,nDati);
  48. // richiesta 1
  49. numSuperamenti=soglia32(dati,nDati);
  50. printf("[SUPERAMENTI]\n%d\n",numSuperamenti);
  51. //richiesta 2
  52. mediaTemp=mediaTemperatura(dati,nDati);
  53. printf("[MEDIA]\n%.1lf\n",mediaTemp);
  54. //richiesta 3
  55. printf("[MIN-MAX]\n");
  56. temperaturaMinima(dati,nDati);
  57. temperaturaMassima(dati,nDati);
  58.  
  59. //richiesta 4
  60. meseMax=mese(dati,nDati);
  61. printf("[MESE]\n%d\n",meseMax);
  62. //richiesta 5
  63. totCentraline=numeroTotaleCentraline(dati,nDati);
  64. printf("[NUM-CENTRALINE]\n%d\n",totCentraline);
  65. return 0;
  66. }
  67.  
  68. struct dati *letturaFile(FILE *f,int *n){
  69.  
  70. int nConv;
  71. char buffer[100];
  72. char s1[5]; //codice centralina completo Axxx
  73. char s2[4];// codice centralina numerico xxx
  74. struct dati *d1,*d2;
  75. int size=10;
  76. *n=0;
  77. d2=malloc(size*sizeof(struct dati));
  78.  
  79. while(fgets(buffer,sizeof(buffer),f)){
  80. d1=d2 + *n;
  81. nConv=sscanf(buffer,"%d %d %d %d %s %lf",&d1->anno,&d1->mese,&d1->ora,&d1->min,s1,&d1->temperatura);
  82. strcpy(s2,s1+1);// s2 stringa in cui copio e s1+1 è la posizione da cui inizio a copiare
  83. d1->centralina=atoi(s2); // inserisco il contenuto della stringa s2 all'interno della struct nel int centralina
  84. //printf("%s\n",s2);
  85. (*n)++;
  86. if(*n>=size){
  87. size=size*2;
  88. d2=realloc(d2,size*sizeof(struct dati));
  89. }
  90. }
  91. d2=realloc(d2,*n*sizeof(struct dati));
  92. return d2;
  93. }
  94.  
  95. void stampaStructDati(struct dati *d,int n){
  96. int i;
  97. for(i=0;i<n;i++){
  98. printf("%d %d %d %d %d %.1lf\n",d[i].anno,d[i].mese,d[i].ora,d[i].min,d[i].centralina,d[i].temperatura);
  99. }
  100. }
  101.  
  102. int soglia32(struct dati *d,int n){
  103. int i;
  104. int count=0;
  105. for(i=0;i<n;i++){
  106. if(d[i].temperatura>32){
  107. count++;
  108. }
  109. }
  110. return count;
  111. }
  112. double mediaTemperatura(struct dati *d,int n){
  113.  
  114. int i;
  115. double media;
  116. double somma=0;
  117. for(i=1;i<n;i++){
  118. somma=somma+d[i].temperatura;
  119. }
  120. media=somma/n;
  121. return media;
  122. }
  123.  
  124. void temperaturaMinima(struct dati *d,int n){
  125.  
  126. int i,indice;
  127. double temperaturaMin=50;
  128.  
  129. for(i=0;i<n;i++){
  130. if(d[i].temperatura<temperaturaMin){
  131. temperaturaMin=d[i].temperatura;
  132. indice=i;
  133. }
  134. }
  135. printf("%d-%d %.1lf\n",d[indice].anno,d[indice].mese,temperaturaMin);
  136. }
  137. void temperaturaMassima(struct dati *d,int n){
  138.  
  139. int i,indice;
  140. double temperaturaMax=0;
  141.  
  142. for(i=0;i<n;i++){
  143. if(d[i].temperatura>temperaturaMax){
  144. temperaturaMax=d[i].temperatura;
  145. indice = i;
  146. }
  147. }
  148. printf("%d-%d %.1lf\n ",d[indice].anno,d[indice].mese,temperaturaMax);
  149.  
  150. }
  151.  
  152. int mese(struct dati *d,int n){
  153.  
  154. int i;
  155. int mese;
  156. int max=0;
  157. int v[12];
  158. for(i=0;i<12;i++){
  159. v[i]=0;
  160. }
  161. for(i=0;i<n;i++){
  162. mese=d[i].mese;
  163. v[mese-1]++;
  164. }
  165. for(i=0;i<12;i++){
  166. if(v[i]>max){
  167. max=v[i];
  168. mese=i+1;
  169. }
  170. }
  171. return mese;
  172. }
  173.  
  174. int numeroTotaleCentraline(struct dati *d,int n){
  175. int i;
  176. int count=0;
  177. for(i=0;i<n;i++){
  178. if(d[i].centralina!=d[i+1].centralina){
  179. count ++;
  180. }
  181. }
  182. return count;
  183. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement