Hay mucha redundancia posible de eliminar.
Sugiero hacer una funcion que compare 2
coordenadas bool iguales(coordenadas c1, coordenadas c2);
y este se use en la comparacion de
punto_geograficobool iguales(punto_geografico p1, punto_geografico p2) {
return iguales(p1.longitud, p2.longitud) &&
iguales(p1.latitud, p2.latitud);
}
y dado que los valores de los elementos de una coordenada estan limitados, sugiero hacer una conversion de los numeros antes de compararlos.
Por ejemplo:
long convertir(coordenadas c) {
return c.grados* 10000 + c.minutos*100 + c.segundos;
}
En el fondo lo que se quiere hacer, si es que la aritmetica no me falla, es convertir 3 numeros sueltos en un solo numero: por ejemplo: grados 165, minutos 32, segundos 87 se convierte en 1653287.
Con ello se hace 1 sola comparacion numerica y 1 del caracter.
iguales (la version que compara de coordenadas) se transforma en:
bool iguales(coordenadas c1, coordenadas c2) {
return c1.direccion == c2.direccion &&
convertir(c1) == convertir(c2);
}