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

#define FILE_IN "dati.bin"

typedef struct  _corona {float x,y,riq,req;} corona;
typedef struct  _dot    {float x,y;}       dot;
typedef corona* pcorona;
typedef int*    pint;
typedef FILE*   pfile;

int main(void)
 {pfile    pf;
  pcorona  pc,pctmp;
  int      i,j,nc,nd,first,second,n_first=0,n_second=0;
  pint     ph;
  dot      d;
  float    dx,dy,dq;
  
  if ((pf=fopen(FILE_IN,"rb"))==NULL)                   goto file_err;
  if (fread(&nc,sizeof(int),1,pf)!=1)                   goto file_err;
  if ((pc=(pcorona)malloc(sizeof(corona)*nc))==NULL)    goto mem_err;
  if ((ph=(pint)malloc(sizeof(int)*nc))==NULL)          goto mem_err;
  if (fread(pc,sizeof(corona),nc,pf)!=nc)               goto file_err;
  for (i=0,pctmp=pc;i<nc;i++,pctmp++) 
   {ph[i]=0; pctmp->riq*=(pctmp->riq); pctmp->req*=(pctmp->req);}
  if (fread(&nd,sizeof(int),1,pf)!=1)                   goto file_err;
  for(j=0;j<nd;j++)
   {if (fread(&d,sizeof(dot),1,pf)!=1)                  goto file_err;
    for(i=0,pctmp=pc;i<nc;i++,pctmp++)
     {dx=d.x-pctmp->x; dy=d.y-pctmp->y; dq=dx*dx+dy*dy;
      if ((dq>(pctmp->riq))&&(dq<(pctmp->req))) ph[i]++;
     }
   }
  for(i=0;i<nc;i++) printf("Nella corona %d abbiamo %d hits\n",i,ph[i]);
  for(i=0;i<nc;i++)
   if (ph[i]>n_first) {n_second=n_first; n_first=ph[i]; second=first; first=i;}
   else if (ph[i]>n_second) {n_second=ph[i]; second=i;}

  free(pc); free(ph); fclose(pf);

  if (n_first)
   {printf("Il fit migliore e' la corona n.%d con %d hits\n",first,n_first);
    if (n_second) printf("Il secondo fit migliore e' la corona n.%d con %d hits\n",second,n_second);
   } 
  else printf("Purtroppo nessun punto e' interno alle corone fornite\n");

  return EXIT_SUCCESS;

  file_err: printf("File Error!\n");  return EXIT_FAILURE;
  mem_err:  printf("Mem  Error!\n");  return EXIT_FAILURE;
 }



