#include <stdio.h> 
#include <stdlib.h>
#define STR_LENGTH 256
#define NOMEFILE        "dati.txt"
#define NOMEFILE_DENTRO "dentro.txt"
#define NOMEFILE_FUORI  "fuori.txt"
typedef float* pfloat;
typedef FILE*  pfile;

int get_int_from_file(pfile f)
 {char s[STR_LENGTH]; 
  fscanf(f,"%s",s);
  return atoi(s);
 }

float get_float_from_file(pfile f)
 {char s[STR_LENGTH]; 
  fscanf(f,"%s",s);
  return atof(s);
 }

int main(void)
 {int n_mis,n1=0,n2=0,i;
  pfloat m;
  float sum=0.0,vm,inf,sup;
  pfile f1,f2;

  if ((f1=fopen(NOMEFILE,"r"))==NULL) goto problemi_col_file;
  n_mis=get_int_from_file(f1);
  if ((m=(pfloat)malloc(sizeof(float)*(n_mis)))==NULL) goto memoria_insufficiente;
  for(i=0;i<n_mis;i++) sum+=m[i]=get_float_from_file(f1);
  fclose(f1);  

  if ((f1=fopen(NOMEFILE_DENTRO,"w"))==NULL) goto problemi_col_file;
  if ((f2=fopen(NOMEFILE_FUORI, "w"))==NULL) goto problemi_col_file;
  vm=sum/n_mis;inf=vm*0.9;sup=vm*1.1;
  for(i=n1=n2=0;i<n_mis;i++)
   if ((m[i]>=inf)&&(m[i]<=sup)) {fprintf(f1,"%f\n",m[i]); n1++;}
   else {fprintf(f2,"%f\n",m[i]); n2++;}
  fclose(f1);
  fclose(f2);
  
  printf("La media dei %d valori e' pari a %.2f\nL'intervallo e': [%.2f,%.2f]\nn1=%d, n2=%d\n",n_mis,vm,inf,sup,n1,n2);
  return EXIT_SUCCESS;
  
  memoria_insufficiente: printf("Memoria insufficiente!!\n"); return EXIT_FAILURE;
 
  problemi_col_file: printf("Non posso aprire il file"); return EXIT_FAILURE;
 }
