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

#define FILE_DATI_IN     "dati.txt"
#define FILE_DATI_OUT    "ordered.txt"
#define STR_LENGTH   256

typedef FILE*  pfile;
typedef pfile* ppfile;
typedef float* pfloat;

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

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

int main(void)
 {char   filebasename[STR_LENGTH],filename[STR_LENGTH];
  int    nf,i,nv,j;
  float  s,soglia;
  pfloat pv;
  pfile  pf;
  ppfile ppf;

  if ((pf=fopen(FILE_DATI_IN,"r"))==NULL) goto file_err; 
  fscanf(pf,"%s",filebasename);
  nf=get_int_from_file(pf);
  nv=get_int_from_file(pf);
  soglia=get_float_from_file(pf);
  fclose(pf);

  if ((ppf=(ppfile) malloc(sizeof(pfile) *nf))==NULL) goto mem_err;
  if ((pv= (pfloat) malloc(sizeof(pfloat)*nf))==NULL) goto mem_err;  
  if ((pf=fopen(FILE_DATI_OUT,"w"))==NULL) goto file_err; 
  for(i=0;i<nf;i++) 
   {sprintf(filename,"%s%d.txt",filebasename,i);
    if ((ppf[i]=fopen(filename,"r"))==NULL) 
     {for(i--;i>=0;i--) fclose(ppf[i]); fclose(pf);
      goto file_err;
     }
   }
  for(j=0;j<nv;j++)
   {for(i=0,s=0.0;i<nf;i++) s+=pv[i]=get_float_from_file(ppf[i]);
    printf("m[%d]=%.2f -> ",j,s/=nf);
    if (s<soglia) 
     {for(i=0;i<nf;i++) fprintf(pf,"%.2f\t",pv[nf-1-i]);
      fprintf(pf,"\n");
      printf("ACCETTATA\n");
     }
    else printf("SCARTATA\n");
   }

  fclose(pf); for(i=0;i<nf;i++) fclose(ppf[i]);
  return EXIT_SUCCESS;

  mem_err:  printf("Problema con la memoria!\n"); return EXIT_FAILURE;
  file_err: printf("File Error!\n");  return EXIT_FAILURE;
 }


