/* esame Informatica 3/7/2002 versione A
 * In questo problema e' necessario accedere a tutti i dati due
 * volte, una per trovare la distanza massima e una per selezionare
 * sulla base della distanza del punto e della distanza massima
 * Poiche' i dati derivano da input e' necessario memorizzarli
 * Poiche' e' fornito un limite superiore al numero dei punti da
 * trattare la memorizzazione puo' essere su array
 * Anche la distanza del punto serve due volte, quindi si 
 * puo' scegliere se calcolarla due volte oppure calcolarla una
 * volta sola e memorizzarla. In questo esempio si e' optato
 * per la prima soluzione
 * Algoritmo:
   - acquisisci N controllando che non superi NMAX
   - inizializza la distanza massima a 0
   - ripeti N volte
     - acquisisci la coppia di coordinate di un punto
	 - calcola la distanza dist
	 - se dist supera la distanza massima 
	        - aggiorna la distanza massima
			- ricorda il numero d'ordine del punto corrente
   - visualizza il numero d'ordine del primo punto a distanza massima
   - inizializza a 0 i conteggi dei punti a 
     distanza inferiore e superiore
   - ripeti per ogni punto
     - calcola la distanza del punto corrente
	 - se dist e' inferiore a 1/3 della massima 
	     incrementa il conteggio corrispondente
	 - se dist e' superiore a 2/3 della massima 
	     incrementa il conteggio corrispondente
   - visualizza i conteggi

 */

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

#define NMAX 100

int main(){
	int i,	/* contatore punti */
		iDM,/* numero d'ordine del punto a distanza massima */
		nInf,nSup, /* numeri di punti a distanza 
				    * inferiore e superiore */
		N;	/* numero totale punti */
	typedef struct {
		float x,y;	/* coordinate del punto */
	}	punto;
	punto p[NMAX];	/* array di punti */
	float dist,	/* distanza del punto corrente */
		distMax;/* distanza massima */

	do {	/* acquisisce e controlla che N 
			 * non sia troppo grande */
		printf("Inserire numero di punti da leggere ");
		scanf("%d",&N);
	} while (N>NMAX);
	distMax = 0; /* inizializza distanza massima */
	for (i=0;i<N;i++){
		printf("Coordinate punto n. %d ?",i+1);
		scanf("%f %f",&p[i].x,&p[i].y);
		dist = (float)sqrt(p[i].x*p[i].x + p[i].y*p[i].y);
		if (dist>distMax){
			distMax=dist;
			iDM=i+1;
		}	/* in caso di piu' punti alla stessa
			 * distanza massima viene mantenuto il primo
			 */
	}
	printf("Il numero d'ordine del punto a distanza");
	printf(" massima e' %d\n", iDM);
	nInf=0; nSup=0;
	for (i=0;i<N;i++){
		dist = (float)sqrt(p[i].x*p[i].x + p[i].y*p[i].y);
		if (dist<distMax/3) nInf++;
		if (dist>distMax*2/3) nSup++;
	}
	printf("Tra i punti acquisiti:\n");
	printf("   %d sono a distanza inferiore a 1/3 della massima\n",nInf);
	printf("   %d sono a distanza superiore a 2/3 della massima\n",nSup);
	return 0;
}