Mostrando entradas con la etiqueta Ordenación. Mostrar todas las entradas
Mostrando entradas con la etiqueta Ordenación. Mostrar todas las entradas

viernes, 9 de marzo de 2012

Ejercicio ordenar (método de la burbuja)

Realizar una aplicación que solicite la cantidad de números que el usuario quiere introducir, después los vaya pidiendo uno a uno y finalmente los ordene utilizando el algoritmo de ordenación de la burbuja y los muestre en consola.

NOTA: enlace a una página de algoritmos de ordenación http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html

Module Module1

    Sub Main()
        Dim temporal As Double
        Dim cuantos As Integer
        Console.WriteLine("¿Cuántos números quiere introducir?")
        cuantos = Console.ReadLine

        cuantos -= 1
        Dim numeros(cuantos) As Double
        For i As Integer = 0 To cuantos
            Console.Write("Número: ")
            numeros(i) = Console.ReadLine
        Next

        For i As Integer = 0 To (cuantos - 1)
            For j As Integer = (i + 1) To cuantos
                If (numeros(i) > numeros(j)) Then
                    temporal = numeros(i)
                    numeros(i) = numeros(j)
                    numeros(j) = temporal
                End If
            Next
        Next

        Console.WriteLine("Números ordenados de menor a mayor:")
        For Each num As Double In numeros
            Console.WriteLine(num)
        Next

        Console.ReadKey()

    End Sub

End Module

jueves, 16 de junio de 2011

Ejercicio crear clase "Ficha"

Crear una clase llamada Ficha, con los siguientes atributos:
  • HOMBRE. De tipo char, estático y constante (público).
  • MUJER. De tipo char, estático y constante (público).
  • nombre. De tipo String (público).
  • edad. De tipo entero (público).
  • sexo. De tipo char (público).
  • dni. De tipo long (público).

public class Ficha {
    public static final char HOMBRE = 'H';
    public static final char MUJER = 'M';
    public String nombre;
    public int edad;
    public char sexo;
    public long dni; //sin letra
}

Realizar un programa para probar la clase anterior que pida los datos de varias fichas (utilizando una tabla de Ficha) al usuario. Además, el programa tendrá dos funciones estáticas:
  1. ordenar(Ficha[] f). Recibe una tabla de objetos Ficha y la ordena por edad.
  2. mostrar(Ficha f). Muestra los datos que contiene el objeto Ficha que recibe.

public class PruebaFicha {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        Ficha[] f = new Ficha[3];
        String aux;
        int pos;
        for (pos=0; pos<f.length; pos++){
            System.out.println("FICHA "+(pos+1));
            f[pos] = new Ficha();
            System.out.print("Nombre: ");
            f[pos].nombre = entrada.nextLine();
            System.out.print("Edad: ");
            f[pos].edad = entrada.nextInt();
            System.out.print("DNI: ");
            f[pos].dni = entrada.nextLong();
            entrada.nextLine();
            System.out.print("Sexo (H/M): ");
            aux = entrada.nextLine();
            if(aux.equals("H"))
                f[pos].sexo=Ficha.HOMBRE;
            else
                f[pos].sexo=Ficha.MUJER;
        }
        ordenar(f);
        System.out.println();
        for (pos=0; pos<f.length; pos++){
            mostrar(f[pos]);
        }
    }
    public static void ordenar(Ficha[] f) {
        int ini, fin, i;
        boolean intercambio;
        Ficha aux; //no hace falta iniciarlo
        ini=0;
        fin=f.length - 1;
        intercambio = true;
        while (ini<fin & intercambio){
            intercambio=false;
            for(i=ini; i<fin; i++){
                if (f[i].edad > f[i+1].edad){
                    aux = f[i];
                    f[i] = f[i+1];
                    f[i+1] = aux;
                    intercambio = true;
                }
            }
            fin--;
            if (intercambio){
                intercambio = false;
                for(i=fin-1; i>=ini; i--){
                    if (f[i].edad > f[i+1].edad){
                        aux = f[i];
                        f[i] = f[i+1];
                        f[i+1] = aux;
                        intercambio = true;
                    }
                }
            }
            i++;
        }
    }
    public static void mostrar(Ficha f1) {
        System.out.print("Nombre: "+f1.nombre);
        System.out.println();
        System.out.print("Edad: "+f1.edad);
        System.out.println();
        System.out.print("DNI: "+f1.dni);
        System.out.println();
        if (f1.sexo == Ficha.MUJER)
            System.out.print("Sexo: MUJER");
        else
            System.out.print("Sexo: HOMBRE");
        System.out.println();
        System.out.println();
    }
}

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]);
    }
}

viernes, 25 de marzo de 2011

Ejercicio ordenar y buscar

Dada una tabla de nombres introducidos por el usuario, ordenarlos mediante el método de la sacudida (variante de la burbuja). Después el usuario pedirá buscar un nombre que se buscará en la tabla mediante el método de búsqueda dicotómica o binaria.

NOTA: enlace a una página de algoritmos de ordenación http://www.cs.ubc.ca/~harrison/Java/sorting-demo.html

public class OrdenarBuscar {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int pos, cuantos;
        int ini, fin, i;
        int izq, der, med;
        String[] nombres;
        String aux, buscado;
        boolean intercambio = true;
        System.out.print("Cuántos nombres quiere introducir: ");
        cuantos = entrada.nextInt();
        nombres = new String[cuantos];
        entrada.nextLine(); //Para limpiar el buffer.
        System.out.println("Introduzca "+cuantos+" nombres.");
        for (pos=0; pos<nombres.length; pos++)
            nombres[pos] = entrada.nextLine();
        ini = 0;
        fin = nombres.length-1;
        while (ini<fin & intercambio){
            intercambio = false;
            for (i=ini;i<fin;i++){
                if (nombres[i].compareTo(nombres[i+1])>0){
                    aux = nombres[i];
                    nombres[i] = nombres[i+1];
                    nombres[i+1] = aux;
                    intercambio = true;
                }
            }
            fin--;
            if (intercambio){
                intercambio = false;
                for (i=fin-1;i>=ini;i--){
                    if (nombres[i].compareTo(nombres[i+1])>0){
                        aux = nombres[i];
                        nombres[i] = nombres[i+1];
                        nombres[i+1] = aux;
                        intercambio = true;
                    }
                }
            }
            i++;
        }
        System.out.println("Nombres ordenados:");
        for (pos=0; pos<nombres.length; pos++)
            System.out.print(nombres[pos]+"  ");
        System.out.println("\nIntroduzca el nombre a buscar.");
        buscado = entrada.nextLine();
        izq = 0;
        der = nombres.length-1;
        med = (izq+der)/2;
        while (buscado.compareTo("")!=0){
            while (buscado.compareTo(nombres[med])!=0 & izq<der){
                if (buscado.compareTo(nombres[med])<0)
                    der = med-1;
                else
                    izq = med+1;
                med = (izq+der)/2;
            }
            if (buscado.compareTo(nombres[med])==0)
                System.out.println("El nombre buscado está en la posición: "+med);
            else
                System.out.println("No encontrado.");
            System.out.println("Introduzca otro nombre.");
            buscado = entrada.nextLine();
        }
        System.out.println("FIN.");
    }
}