#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> ", x, y);
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