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

#define FILE_BIN     "fuochi.bin"
#define FILE_TXT     "distanze.txt"
#define NP           1000000
#define L            2.0
#define FACT         (L/RAND_MAX)
#define STR_LENGTH   256

typedef FILE*  pfile;
typedef struct _fuochi {float x1,y1,x2,y2;} fuochi;
typedef fuochi* pfuochi;

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

float dist(float x1,float y1,float x2,float y2) {x1-=x2; y1-=y2; return sqrt(x1*x1+y1*y1);}

int main(void)
 {int    ne,ie,ip,ni;
  fuochi fu;
  float  d,x,y;
  pfile  fb,ft;

  if ((fb=fopen(FILE_BIN,"rb"))==NULL) goto file_err;
  if ((ft=fopen(FILE_TXT,"r") )==NULL) goto file_err;
  if (fread(&ne,sizeof(int),1,fb)!=1)  goto file_err;
  for(ie=0,ne/=4;ie<ne;ie++)
   {if (fread(&fu,sizeof(fuochi),1,fb)!=1) goto file_err;
    d=get_float_from_file(ft);
    for(ip=ni=0;ip<NP;ip++)
     {x=FACT*rand(); y=FACT*rand();
      if ((dist(x,y,fu.x1,fu.y1)+dist(x,y,fu.x2,fu.y2))<d) ni++;
     }
    printf("L'area per l'ellisse [F1=(%.3f,%.3f) F2=(%.3f,%.3f) D=%.3f e': %.3f\n",fu.x1,fu.y1,fu.x2,fu.y2,d,(L*L*ni)/NP);
   }
  fclose(fb); fclose(ft);
  return EXIT_SUCCESS;
   
  file_err: printf("File Error!\n");  return EXIT_FAILURE;
 }
