jueves, 16 de junio de 2011

Ejercicio de búsqueda en tablas

Partiremos de dos tablas de datos de igual tamaño.
  • Una con datos de tipo float (con alturas).
  • Otra con datos de tipo String (con nombres).
Supondremos que cada posición indica en dichas tabla la altura y el nombre de una misma persona.

Hacer un programa que inicialice dichas tablas con valores supuestos.
El programa pedirá por la entrada estandar una altura, buscando a continuación el nombre de la persona más alta que no sobrepase la altura introducida.
  • Si no encuentra ninguna... lo indicará.
  • Si encuentra varias... solo debe mostrar la primera.

public class BuscarAltura {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float[] alturas = {1.55F, 1.48F, 1.76F, 1.59F, 1.70F, 1.63F, 1.82F};
        String[] nombres = {"Macarena", "Pablo", "María", "Noel", "Eduardo", "Manuel", "Julia"};
        int i, ini, fin;
        float alturaBuscada, auxAlt;
        String auxNom;
        boolean buscadaMayor = false, intercambio = true;
        System.out.print("Introduzca la altura a buscar: ");
        alturaBuscada = entrada.nextFloat();
        //Primero ordenamos la tabla:
        ini = 0;
        fin = alturas.length-1;
        while (ini<fin & intercambio){
            intercambio = false;
            for (i=ini; i<fin; i++){
                if (alturas[i] > alturas[i+1]){
                    auxAlt = alturas[i];
                    alturas[i] = alturas[i+1];
                    alturas[i+1] = auxAlt;
                    auxNom = nombres[i];
                    nombres[i] = nombres[i+1];
                    nombres[i+1] = auxNom;
                    intercambio = true;
                }
            }
            fin--;
            if (intercambio){
                intercambio = false;
                for (i=fin-1; i>=ini; i--){
                    if (alturas[i] > alturas[i+1]){
                        auxAlt = alturas[i];
                        alturas[i] = alturas[i+1];
                        alturas[i+1] = auxAlt;
                        auxNom = nombres[i];
                        nombres[i] = nombres[i+1];
                        nombres[i+1] = auxNom;
                        intercambio = true;
                    }
                }
            }
            ini++;
        }
        //Ahora buscamos AlturaBuscada:
        i=alturas.length-1;
        while (i>=0 & !buscadaMayor){
            if (alturaBuscada >= alturas[i])
                buscadaMayor = true;
            i--;
        }
        if (!buscadaMayor)
            System.out.println("No hay ninguna altura menor que la introducida.");
        else
            System.out.println("La persona más alta que no supera la altura introducida es: "+nombres[i+1]);
    }
}

No hay comentarios:

Publicar un comentario