// Programa que dados N puntos del espacio tridimensional, // calcula la distancia máxima entre dos puntos cualesquiera. #include <iostream> #include <string> #include <math.h> using namespace std; // Definición de constantes const int N = 100; // Definición de tipos struct tPunto3D { float x, y, z; }; typedef tPunto3D tPuntos3D[N]; // Declaración de las acciones y funciones // Se lee un sólo punto void LeerUnPunto3D(tPunto3D &p); // Se leen los N puntos void LeerPuntos3D(tPuntos3D tp); // Distancia entre dos puntos tridimensionales float Distancia3D(tPunto3D a, tPunto3D b); // Distancia máxima entre dos puntos tridimensionales cualesquiera float MaxDistancia3D(const tPuntos3D tp); // Programa principal int main() { // Declaracion de variables tPuntos3D tp; float valmax; LeerPuntos3D(tp); valmax = MaxDistancia3D(tp); cout << "La distancia maxima entre dos puntos es " << valmax << endl; return 0; } // Definición de las acciones y funciones void LeerUnPunto3D(tPunto3D &p) { cout << "Introduce las 3 coordenadas de un vector:" << endl; cin >> p.x >> p.y >> p.z; } void LeerPuntos3D(tPuntos3D tp) { int i; for ( i = 0; i < N; i++ ) LeerUnPunto3D(tp[i]); } float Distancia3D(tPunto3D a, tPunto3D b) { return ( sqrt( powf(a.x - b.x, 2) + powf(a.y - b.y, 2) + powf(a.z - b.z, 2) ) ); } // Se aplica el esquema de recorrido para calcular la distancia máxima // entre dos puntos cualesquiera float MaxDistancia3D(const tPuntos3D tp) { int i = 0, j = 0; float aux, valmax = -1; while ( i < N-1 ) { // Se calcula el siguiente índice j = j + 1; // Obsérvese que asignar j=i+1 en lugar de j=i evita muchas consultas repetidas if ( j >= N ) { i = i + 1; j = i + 1; } // Se trata el siguiente valor aux = Distancia3D( (tp[i]), (tp[j]) ); if ( aux > valmax ) valmax = aux; } return valmax; }