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

#define NOMEFILE_IN1 "a.bin"
#define NOMEFILE_IN2 "b.bin"
#define NOMEFILE_OUT "out.txt"
#define FATTORE      1.7

typedef struct _dato {float x,y,z;} dato;
typedef dato*    pdato; 
typedef FILE*    pfile;
typedef int*     pint;
typedef float*   pfloat;

float distanza_origine(pdato pd) 
 {return sqrt((pd->x)*(pd->x)+(pd->y)*(pd->y)+(pd->z)*(pd->z));}

int main(void)
 {pfile pf;
  pdato pd,p;
  int   np,nd,nt,i,j;
  float v1=0.0,v2=0.0,d;

  if ((pf=fopen(NOMEFILE_IN1,"rb"))==NULL) goto file_err;
  fread(&np,sizeof(int),1,pf);
  if ((pd=(pdato)malloc(sizeof(dato)*(nt=2*np)))==NULL) goto mem_err;
  fread(pd,sizeof(dato),np,pf); fclose(pf);
  if ((pf=fopen(NOMEFILE_IN2,"rb"))==NULL) goto file_err;
  fread(&nd,sizeof(int),1,pf);
  if (np!=nd) goto file_err;  
  fread(pd+np,sizeof(dato),np,pf); fclose(pf);
  
  for(i=0;i<nt;i++)
    {v1+=d=distanza_origine(pd+i);
     v2+=d*d;
    }
  v1/=nt;
  v2=sqrt(v2/nt-v1*v1);
  printf("m=%.2f s=%.2f\n",v1,v2);
  v2*=FATTORE;

  if ((pf=fopen(NOMEFILE_OUT,"w"))!=NULL)
  for(i=0;i<np;i++)
   for(j=0;j<2;j++)
    {p=j?pd+i+np:pd+i;
     if (distanza_origine(p)<v2) fprintf(pf,"(%.2f,%.2f,%.2f)\n",p->x,p->y,p->z);
    }
  fclose(pf);free(pd);
 
  return EXIT_SUCCESS;
 
  file_err: printf("Errore nel/nei files!!\n"); return EXIT_FAILURE;
  mem_err:  printf("Errore di memoria!!\n");    return EXIT_FAILURE;
 }
