#include <stdio.h>
#include <stdlib.h>
#include <float.h>

#define STR_LENGTH    256
#define NOMEFILEDATI  "dati.bin"
#define NOMEFILEDATI2 "dati.txt"
#define NOMEFILEOUT1  "output1.txt"
#define NOMEFILEOUT2  "output2.txt"
#define NRIV          2

typedef FILE*   pfile;
typedef float* pfloat;
typedef char*  pchar;

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);
 }

void stampa_tutti_e_crea_file(pchar nomefile,pfloat a,int n,float smn,float smx)
 {int i,count=0;
  pfile f;
  float v,min=FLT_MAX,max=-FLT_MAX,media=0.0;

  f=fopen(nomefile,"w");
  for(i=0;i<n;i++)
   {printf("%f ",v=a[i]);
    if ((v>=smn) && (v<=smx)) 
     {fprintf(f,"%f\n",v);
      if (v<min) min=v;
      if (v>max) max=v;
      media+=v;
      count++;
     }
   }
  if (count) fprintf(f,"%f\n%f\n%f\n",media/count,min,max); 
  fclose(f);
 }

int main(void)
 {pfile  f;
  int    set,n[NRIV],nn,ns,i,j;
  float  smin,smax,vv;
  pfloat  v[NRIV];

  if ((f=fopen(NOMEFILEDATI2,"r"))==NULL) 
   {printf("ERRORE: Non ho potuto aprire il file %s!!!\n",NOMEFILEDATI2);
    return EXIT_FAILURE;
   }
  ns=get_int_from_file(f);
  smin=get_float_from_file(f);  
  smax=get_float_from_file(f);  
  fclose(f);
 
  if ((f=fopen(NOMEFILEDATI,"rb"))==NULL) 
   {printf("ERRORE: Non ho potuto aprire il file %s!!!\n",NOMEFILEDATI);
    return EXIT_FAILURE;
   }
  for(n[0]=n[1]=i=0;i<ns;i++)
   {fread(&nn, sizeof(int),1,f);
    fread(&set,sizeof(int),1,f); set--;
    fseek(f,sizeof(float)*nn,SEEK_CUR);
    n[set]+=nn;
   }

  for (i=0;i<NRIV;i++)
   if ((v[i]=(pfloat)malloc(sizeof(float)*n[i]))==NULL) 
    {printf("ERRORE: Memoria insufficiente!!!\n");
     return EXIT_FAILURE;
    }

  rewind(f);
  for(n[0]=n[1]=i=0;i<ns;i++)
   {fread(&nn,sizeof(int),1,f);
    fread(&set,sizeof(int),1,f); set--;
    fread(&(v[set][n[set]]),sizeof(float),nn,f);
    n[set]+=nn;    
   }
  fclose(f);
 
  printf("Il I  array: "); stampa_tutti_e_crea_file(NOMEFILEOUT1,v[0],n[0],smin,smax);
  printf("\nIl II array: "); stampa_tutti_e_crea_file(NOMEFILEOUT2,v[1],n[1],smin,smax);
  printf("\n");
  return EXIT_SUCCESS;
  
 }
