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

#define NF     "coord.bin"
#define NDIM   3
#define STRLEN 256

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

typedef struct _misura {float x,y,z;} misura;
typedef misura*                       pmisura;


int main(void)
 {pfile   f;
  int     i,j,nm;
  pmisura pm,pp;
  float   v,xg,yg,zg,dq,dx,dy,dz;
  char    c,s[STRLEN];
  
  if ((f=fopen(NF,"rb"))==NULL) goto file_err;
  fread(&nm,sizeof(int),1,f);
  printf("Acquisisco %d misure\n",nm);
  if ((pm=(pmisura)malloc(sizeof(misura)*nm))==NULL) goto mem_err;
  
  for(i=0,pp=pm,xg=yg=zg=0.0;i<nm;i++,pp++)
   {for(j=0;j<NDIM;j++)
     {fread(&v,sizeof(float),1,f);
      fread(&c,sizeof(char),1,f);
      switch (c)
       {case 'x': xg+=dx=pp->x=v; break;
        case 'y': yg+=dy=pp->y=v; break;
        case 'z': zg+=dz=pp->z=v; break;
        default:  goto data_err;
       }
     }
    printf("Misura n.%3d -> (%.2f,%.2f,%.2f)\n",i,dx,dy,dz);
   }
  
  printf("\nBaricentro   -> (%.2f,%.2f,%.2f)\nSoglia=",xg/=nm,yg/=nm,zg/=nm);
  scanf("%s",s);
  v=atof(s);v*=v;
  
  for(i=0,pp=pm;i<nm;i++,pp++)
   {dx=pp->x-xg;dy=pp->y-yg;dz=pp->z-zg;
    dq=dx*dx+dy*dy+dz*dz;
    if (dq>v) printf("Scartato punto n.%3d d=%.2f\n",i,sqrt(dq));
   }
  
  fclose(f);  
  return EXIT_SUCCESS;
  
  file_err: printf("Problema coi files!\n");     return EXIT_FAILURE;
  mem_err:  printf("Problema colla memoria!\n"); return EXIT_FAILURE;
  data_err: printf("Problema coi dati!\n");      return EXIT_FAILURE;
 }
