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

#define FILE_COORD_X "x.bin"
#define FILE_COORD_Y "y.bin"
#define VOLTE_SIGMA  2

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

int get_dati(pchar nomefile,pfloat* p)
 {pfile f;
  int n=0;
  if ((f=fopen(nomefile,"rb"))==NULL)
   printf("Non posso aprire in lettura il file %s",nomefile);
  else
   {fread(&n,sizeof(int),1,f);
    if ((*p=(pfloat)malloc(sizeof(float)*n))==NULL)
     {printf("Spazio esaurito!"); n=0;}
    else fread(*p,sizeof(float),n,f);
    fclose(f);
   }
  return n;
 }

int main(void)
 {int i,n,n1;
  pfloat x,y,r;
  float xc,yc,m,s;

  xc=yc=m=s=0.0;

  n=get_dati(FILE_COORD_X,&x);
  n1=get_dati(FILE_COORD_Y,&y);
  if (n!=n1) {printf("Errore di consistenza dei dati!"); return EXIT_FAILURE;}
  if ((r=malloc(sizeof(float)*n))==NULL) {printf("Spazio esaurito!"); return EXIT_FAILURE;}

  for(i=0;i<n;i++) {xc+=x[i]; yc+=y[i];}
  printf("Le coordinate del baricentro sono: (%.2f,%.2f)",xc/=n,yc/=n);

  /* Calcolo distanze medie e sigma come sqrt(E(x*x)-E(x)^2)*/
  for(i=0;i<n;i++) 
   {r[i]=sqrtf(pow(xc-x[i],2)+pow(yc-y[i],2));
    m+=r[i];
    s+=r[i]*r[i];
   }
  m/=n; s=sqrtf(s/n-m*m)*VOLTE_SIGMA;

  printf("\nI punti a distanza maggiore di %.2f dal baricentro sono:",s);
  for(i=0;i<n;i++) if (r[i]>s) printf("\n(%.2f,%.2f) d=%.2f",x[i],y[i],r[i]);
  printf("\nTerminato\n");
  free(x);free(y);free(r); 
 }
