#include <stdio.h> 
#include <stdlib.h>
#include <float.h>
#define STR_LENGTH 256
#define NOMEFILE   "dati.txt"
#define NOMEFILE1  "less_or_equal.txt"
#define NOMEFILE2  "more.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,a1,a2;
  float  v_soglia,min1=FLT_MAX,min2=FLT_MAX,max1=-FLT_MAX,max2=-FLT_MAX,s1=0.0,s2=0.0,val;
  pfile  f,f1,f2;

  printf("Dammi il valore di soglia:  ");
  v_soglia=get_int_from_file(stdin);
  if ((f=fopen(NOMEFILE,"r"))==NULL) goto problemi_col_file;
  n_mis=get_int_from_file(f);
  if ((m=(pfloat)malloc(sizeof(float)*(n_mis)))==NULL) goto memoria_insufficiente;
  for(i=0;i<n_mis;i++) if ((m[i]=get_float_from_file(f))<v_soglia) n1++;
  fclose(f);  
  n2=n_mis-n1;
  if ((a1=(pfloat)malloc(sizeof(float)*n1))==NULL) goto memoria_insufficiente;
  if ((a2=(pfloat)malloc(sizeof(float)*n2))==NULL) goto memoria_insufficiente;
  if ((f1=fopen(NOMEFILE1,"w"))==NULL) goto problemi_col_file;
  if ((f2=fopen(NOMEFILE2,"w"))==NULL) goto problemi_col_file;
  fprintf(f1,"%d\n",n1);
  fprintf(f2,"%d\n",n2);
  for(i=n1=n2=0;i<n_mis;i++) 
   {val=m[i];
    if (val<v_soglia) 
    {a1[n1++]=val;
     if (val>max1) max1=val;
     if (val<min1) min1=val;
     s1+=val; 
     fprintf(f1,"%f\n",val);
    }
   else 
    {a2[n2++]=val;
     if (val>max2) max2=val;
     if (val<min2) min2=val;
     s2+=val;
     fprintf(f2,"%f\n",val);
    }
   }
  fclose(f1);
  fclose(f2);

  if (n1) printf("Valori inerenti l'array num. 1, min=%f max=%f media=%f\n",min1,max1,s1/n1);
  if (n2) printf("Valori inerenti l'array num. 2, min=%f max=%f media=%f\n",min2,max2,s2/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;
 }
