-----------------------------------------------------------------------------
 MAC-115 - Aula sobre funções e variáveis do tipo double (para números reais) 
=============================================================================

/*
 * Arquivo: problemaExtra1.c
 * -------------------------
 * Este programa lê um ponto origem (x_0, y_0) e uma sequência de n
 * pontos e determina o ponto mais proimo do ponto origem.
 *
 *
 */

#include <stdio.h>
#include <math.h>  /***** uso do sqrt( ) ******/
#include <float.h> /***** uso do FLT_MAX ******/

/* Prototipo da funcao ********/
   float distancia(float x1, float y1, float x2, float y2);
/* Funcao que calcula a distancia entre os pontos (x1,y1) e (x2,y2)
/********************************************************************* */

int main()
{
    int i, n;			/* total de pontos */
    float x0, y0,		/* coordenadas do ponto origem */
     x, y,			/* coordenadas de um ponto */
     dist, 
     distMin,	           	/* distancia minima encontrada */
     xpontoMin, ypontoMin;	/* coordenadas do ponto mais proximo */

    printf("Forneca as coordenadas reais do ponto origem (x0,y0): ");
    scanf("%f %f", &x0, &y0);
    printf("Forneca o valor de n (total de pontos): ");
    scanf("%d", &n);

    distMin = FLT_MAX; 	/* inicializacao com o maior numero real */
    printf("distancia minima inicializada  = %e\n\n", distMin);

    for (i = 0; i < n; i++) {
	printf("Forneca as coordenadas do proximo ponto: ");
	scanf("%f %f", &x, &y);
	dist = distancia(x0, y0, x, y);
	printf("distancia ate' o ponto origem = %f\n", dist);
	if (dist < distMin) {
	    distMin = dist;
	    xpontoMin = x;
	    ypontoMin = y;
	}
	printf("distancia minima ate agora = %f\n\n", distMin);
    }
    printf
	("O ponto mais proximo do ponto origem e' (%f, %f) \n", xpontoMin, ypontoMin);
    printf("Este ponto esta' a distancia  %f \n", distMin);

    return 0;
}

/*
 * Funcao: distancia
 * Uso: distancia (x1,y1,x2,y2)
 * Esta funcao calcula a distancia entre os pontos (x1,y1) e (x2,y2)
 */

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