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

#define FILE_DATI_X     "x.txt"
#define FILE_DATI_Y     "y.txt"
#define FILE_DATI_R     "r.bin"
#define BASENAME        "filtro"

#define NVAL            10
#define STR_LENGTH      256

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

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

pfloat get_float_array_from_file_txt(pchar nomefile,pfloat pmean)
 {pfile    f;
  unsigned i;
  float    sum=0;
  pfloat   pa;

  if ((f=fopen(nomefile,"r"))==NULL) return NULL;
  if ((pa=(pfloat)malloc(NVAL*sizeof(float)))==NULL) return NULL;
  for(i=0;i<NVAL;i++) sum+=pa[i]=get_float_from_file(f);
  fclose(f);
  (*pmean)=sum/NVAL;
  return pa;
 }

int main(void)
 {pfile    fin,fout;
  pfloat   px,py,pd;
  float    mx,my,dx,dy;
  double   min,max=0;
  unsigned nc,ic,ip,n;
  char     s[STR_LENGTH];

  if ((px=get_float_array_from_file_txt(FILE_DATI_X,&mx))==NULL) goto error;
  if ((py=get_float_array_from_file_txt(FILE_DATI_Y,&my))==NULL) goto error;
  printf("Baricentro=(%.2f,%.2f)\n",mx,my);

  if ((pd=(pfloat)malloc(NVAL*sizeof(float)))==NULL)             goto error;
  for(ip=0;ip<NVAL;ip++) {dx=px[ip]-mx; dy=py[ip]-my; printf("d[%u]=%.2f\n",ip,pd[ip]=sqrt(dx*dx+dy*dy));}

  if ((fin=fopen(FILE_DATI_R,"rb"))==NULL) goto error;
  fread(&nc,sizeof(unsigned),1,fin);  
  printf("nc=%u\n",nc);
  for(ic=0;ic<nc;ic++)
   {sprintf(s,"%s.%d.txt",BASENAME,ic);
    if ((fout=fopen(s,"w"))==NULL) goto error;
    min=max;
    n=0;
    fread(&max,sizeof(double),1,fin);
    printf("Intervallo [%.2f,%.2f[\n",min,max);
    for(ip=0;ip<NVAL;ip++)
     {
      if ((min<=pd[ip])&&(pd[ip]<max))
       {fprintf(fout,"(%.2f,%.2f)\n",px[ip],py[ip]);
        n++;
       }
     }
    fclose(fout);
    printf("Nel file %s abbiamo posto %u punti\n",s,n);
   }

  free(px); free(py); free(pd); fclose(fin);
  return EXIT_SUCCESS;
  error: printf("Errore!!\n"); return EXIT_FAILURE;
   
 }


