#include <stdio.h>

#define DIMSTR 256
#define N 16

#define nfr "rettangoli.txt"
#define nfi "punti.txt"
#define nfo "punti_etic.txt"

int main(void){
    int i,n;
    FILE *fi, *fo;
    double x,y;
    double xad[N], yad[N], xbs[N], ybs[N];

    // apre il file dei rettangoli
    if ((fi=fopen(nfr,"r"))==NULL){
        printf("%s non trovato\n",nfr);
        return 1;
    }
    n=0// inizializza il numero di rettangoli letti
    while (n<N && fscanf(fi,"%lf %lf %lf %lf",&xbs[n], &ybs[n],&xad[n], &yad[n])==4)
        if (xad[n]<xbs[n] && yad[n]<ybs[n])// controllo di validita'
                printf("Coordinate errate %lf %lf %lf %lf\n",
                                xbs[n], ybs[n], xad[n], yad[n]);
                    // poiche' non incremento n il prossimo rettangolo
                                // sovrascrivera` questo
        else
                n++; // rettangolo valido: incremento n

    // la variabile fi puo' essere riusata
    if ((fi=fopen(nfi,"r"))==NULL){
        printf("%s non trovato\n",nfi);
        return -11;
    }
    if ((fo=fopen(nfo,"w"))==NULL){
        printf("%s non scrivibile\n",nfi);
        return -1;
    }

    while (fscanf(fi,"%lf %lf", &x, &y)==2){ // per ogni punto nel file
        fprintf(fo,"<%5.2lf,%5.2lf> "xy);
        for (i=0;i<n;i++) // confronta il punto con ogni rettangolo
            if (xbs[i]<=x && x<=xad[i] && ybs[i]<=y && y<=yad[i])
                    fprintf(fo," %d ",i); // se il punto e' interno, scrivi i
        fprintf(fo,"\n");
    }
    fclose(fi);
    fclose(fo);
    printf("Dati etichettati su %s\n",nfo);
    return 0;

// main