Ambulancia más cercana según coordenadas
Se plantea realizar el siguiente ejercicio o práctica de programación:
Existen ambulancias que recorren la ciudad y cuando se recibe una llamada de emergencia, se informa de la ubicación de la emergencia mediante coordenadas, lo mismo que la ubicación de todas las ambulancias. Se sabe que existen N ambulancias en servicio. Realice un algoritmo que, dada la información necesaria, informe las
coordenadas de la ambulancia más cercana al punto de emergencia.
Una posible solución a la práctica planteada puede ser la siguiente:
/*
Se quiere realizar el siguiente ejercicio:
Existen ambulancias que recorren la ciudad y cuando se recibe
una llamada de emergencia, se informa de la ubicación de la
emergencia mediante coordenadas, lo mismo que la ubicación de
todas las ambulancias. Se sabe que existen N ambulancias en servicio.
Realice un algoritmo que, dada la información necesaria, informe las
coordenadas de la ambulancia más cercana al punto de emergencia.
*/
// Inclusión de las librerías necesarias
#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <math.h>
#define MAX 10
// Definición de la estructura punto para
// comprobar la ubicación de las ambulancias
typedef struct p {
float x;
float y;
} Punto;
int main()
{
// Definición de variables a utilizar
// Crear la matriz de ambulancias
Punto ambulancias[MAX];
Punto vector;
// Definir variables auxiliares
int contador = 0;
float posicion_x = 0;
float posicion_y = 0;
float modulo = 0;
int posicion_menor = 0;
float distancia = 0;
// Establecemos las coordenadas de posición de
// las ambulancias de forma aleatoria
// en primer lugar activamos el generador de
// números aleatorios para que no genere siempre
// la misma cadena
srand(time(NULL));
// recorrer el bucle estableciendo los puntos de
// coordenadas para cada ambulancia
for(contador=0; contador<MAX; contador++) {
// generar un valor x e y aleatorio para la
// posicion de la ambulancia
ambulancias[contador].x = rand()%100;
ambulancias[contador].y = rand()%100;
}
// Solicitar llamada de emergencia
printf("Llamada Emer. Coordenada X: ");
scanf(" %f",&posicion_x);
printf("Llamada Emer. Coordenada Y: ");
scanf(" %f",&posicion_y);
// Se realiza la búsqueda de la ambulancia más cercana a la vez
// que se visualizan los datos
printf("\nCoordenadas Llamada: %6.2f %6.2f",posicion_x,posicion_y);
printf("\nPosiciones Ambulancias");
for(contador=0; contador<MAX; contador++) {
// obtener vector del punto 1 al punto 2
vector.x = ambulancias[contador].x-posicion_x;
vector.y = ambulancias[contador].y-posicion_y;
// calculo de modulo del vector
modulo = sqrt(pow(vector.x,2)+pow(vector.y,2));
printf("\n%d. X: %6.2f Y: %6.2f",contador+1,ambulancias[contador].x,ambulancias[contador].y);
printf(" - %6.2f",modulo);
// se obtiene el menor si es la primera iteración del bucle
// se establece ese primer registro como menor y sino se realiza
// la comparación
if(contador==0) {
posicion_menor = contador;
distancia = modulo;
} else {
if(distancia>modulo) {
distancia = modulo;
posicion_menor = contador;
}
}
}
printf("\n============================================================");
printf("\nAmbulancia No.%d ,Distancia: %.2f",posicion_menor+1,distancia);
printf("\n============================================================\n");
return 0;
}
Una vez compilado y ejecutado el ejercicio planteado, se ha de mostrar un resultado similar al siguiente:
Gracias por vuestra visita y un saludo, hasta la próxima.
if ( MeQuedoEnCasa == SoyResponsable ) {
printf("Lo Conseguiremos entre todos");
} else {
printf("Error 404 - Algo estas haciendo mal, piénsalo");
}