Advertisement
Guest User

Compito_02_07_2014

a guest
May 19th, 2019
92
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 2.56 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3. #include <float.h>
  4.  
  5. #define FILE_INPUT  "dati.bin"
  6.  
  7. typedef struct _dato
  8.   {
  9.     float alpha;
  10.     float beta;
  11.     float misura;
  12.   }dato;
  13.  
  14. typedef FILE*  pfile;
  15. typedef float* pfloat;
  16. typedef dato*  pdato;
  17.  
  18. /*funzione che calcola il minimo di un array di float (dagli il puntatore e la dimensione dell'array*/  
  19. float min_float (pfloat pv, int dim)
  20.   {
  21.     float min=FLT_MAX,v;
  22.     int i;
  23.     for (i=0;i<dim;i++)
  24.       {
  25.         v=pv[i];
  26.         min=min>v?v:min;
  27.       }
  28.     return min;
  29.   }
  30.  
  31. /*Funzione che calcola il max*/
  32. float max_float (pfloat pv, int dim)
  33.   {
  34.     float max=FLT_MIN,v;
  35.     int i;
  36.     for (i=0;i<dim;i++)
  37.       {
  38.         v=pv[i];
  39.         max=max<v?v:max;
  40.       }
  41.     return max;
  42.   }
  43.  
  44. int main (void)
  45.   {
  46.     int   n_dati,i,cont=0;
  47.     float min,max,frazione;
  48.     pdato pd;
  49.     pfloat pmisure;
  50.     pfile pf;
  51.    
  52.     if ((pf=fopen(FILE_INPUT,"rb"))==NULL)                     goto fopen_err;
  53.    
  54.     if((fread(&n_dati,sizeof(int),1,pf))!=1)                   goto read_err;
  55.    
  56.     if((pd=(pdato)malloc(sizeof(dato)*n_dati))==NULL)          goto mem_err;
  57.    
  58.     if(fread(pd, sizeof(dato),n_dati,pf)!=n_dati)              goto read_err;
  59.    
  60.     fclose (pf);
  61.    
  62.     if((pmisure=(pfloat)malloc(sizeof(float)*n_dati))==NULL)   goto mem_err;
  63.    
  64.     for (i=0;i<n_dati;i++)
  65.       pmisure[i]=pd[i].alpha*pd[i].misura+pd[i].beta;
  66.      
  67.     free (pd);
  68.      
  69.     min=min_float(pmisure,n_dati);
  70.     max=max_float(pmisure,n_dati);
  71.    
  72.     printf("min=%.2f\nmax=%.2f\n",min,max);
  73.    
  74.     frazione=0.05*(max-min);    /*lo 0.05% dell'ampiezza*/
  75.     min=min+frazione;
  76.     max=max-frazione;
  77.    
  78.     printf("Ti stampero' i valori del file compresi nel sottointervallo pari al 90%% dell'intervallo di partenza, cioè nell'intervallo ]%.2f,%.2f[\n",min,max);
  79.     for(i=0;i<n_dati;i++)
  80.       {
  81.         frazione=pmisure[i];
  82.         if((frazione>min)&&(frazione<max))
  83.           {
  84.             cont++;
  85.             printf("v[%d]=%.2f\n",cont,frazione);
  86.           }
  87.       }
  88.      
  89.     free (pmisure);
  90.    
  91.     printf("Dunque il numero di valori compresi fra ]%.2f,%.2f[ e' pari a %d\n",min,max,cont);
  92.    
  93.     return EXIT_SUCCESS;
  94.    
  95.     fopen_err:
  96.     printf("Si e' verificato un problema nell'apertura del file\n");
  97.       return EXIT_FAILURE;
  98.      
  99.     read_err:
  100.       printf("Si e' verificato un problema nella lettura del file\n");
  101.       return EXIT_FAILURE;
  102.      
  103.     mem_err:
  104.       printf("Problema di memoria\n");
  105.       return EXIT_FAILURE;
  106.      
  107.   }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement