Advertisement
Perlamado

Untitled

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