Mostrando entradas con la etiqueta Bucle "for". Mostrar todas las entradas
Mostrando entradas con la etiqueta Bucle "for". Mostrar todas las entradas

domingo, 11 de marzo de 2012

Ejercicios de búsqueda en tablas

EJERCICIO 1
Realizar una aplicación que contenga la función "Buscar", a la que se le pasará un array de números enteros y el elemento a buscar. Debe devolver un Boolean indicando si lo ha encontrado (true) o no (false).

Module Module1

    Sub Main()
        Dim numeros() As Integer = {32, 5, 3, 2, 66, 2, 7, 45, 90}
        Dim num As Integer = 91
        Dim encontrado As Boolean = Buscar(numeros, num)

        Console.WriteLine(encontrado)

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Boolean
        Dim encontrado As Boolean = False

        For Each n As Integer In numeros
            If (n = num) Then
                encontrado = True
            End If
            'Si lo encuentra, sale del "for"
            If encontrado Then Exit For
        Next

        Return encontrado
    End Function

End Module

EJERCICIO 2
Modificar la función anterior para que implemente el algoritmo de búsqueda dicotómica. En este caso se le pasará un array ordenado de menor a mayor.

Module Module1

    Sub Main()
        Dim numeros() As Integer = {2, 2, 3, 5, 7, 32, 45, 66, 90}
        Dim num As Integer = 4
        Dim encontrado As Boolean = Buscar(numeros, num)

        Console.WriteLine(encontrado)

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Boolean
        Dim izquierda As Integer = 0
        Dim derecha As Integer = numeros.Length - 1
        Dim centro As Integer

        While (izquierda <= derecha)
            centro = (izquierda + derecha) / 2
            If (numeros(centro) = num) Then
                Return True
            End If
            If (numeros(centro) > num) Then
                derecha = centro - 1
            ElseIf (numeros(centro) < num) Then
                izquierda = centro + 1
            End If
        End While

        Return False

    End Function

End Module

EJERCICIO 3
Modificar de nuevo la función para que en lugar de un Boolean indicando si ha encontrado o no el elemento buscado, devuelva un entero indicando la posición donde se encuentra dicho elemento. Si el array no contiene ese elemento, devolverá -1.

Module Module1

    Sub Main()
        Dim numeros() As Integer = {2, 2, 3, 5, 7, 32, 45, 66, 90}
        Dim num As Integer = 90
        Dim posicion As Integer = Buscar(numeros, num)

        If (posicion = -1) Then
            Console.WriteLine("No encontrado")
        Else
            Console.WriteLine("Encontrado en la posicion: " & posicion)
        End If

        Console.ReadKey()

    End Sub

    Function Buscar(ByVal numeros() As Integer, ByVal num As Integer) As Integer
        Dim izquierda As Integer = 0
        Dim derecha As Integer = numeros.Length - 1
        Dim centro As Integer

        While (izquierda <= derecha)
            centro = (izquierda + derecha) / 2
            If (numeros(centro) = num) Then
                Return centro
            End If
            If (numeros(centro) > num) Then
                derecha = centro - 1
            ElseIf (numeros(centro) < num) Then
                izquierda = centro + 1
            End If
        End While

        Return -1

    End Function

End Module

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

lunes, 5 de marzo de 2012

Varios ejercicios

EJERCICIO 1
Realizar una aplicación que recoja 10 números enteros desde teclado y al final muestre el mayor y el menor.

Module Module1

    Sub Main()
        Dim numero, mayor, menor As Integer

        Console.Write("Número: ")
        mayor = Console.ReadLine
        menor = mayor

        For i As Integer = 1 To 9
            Console.Write("Número: ")
            numero = Console.ReadLine
            If (numero > mayor) Then
                mayor = numero
            ElseIf (numero < menor) Then
                menor = numero
            End If
        Next

        Console.WriteLine("El número mayor es: " & mayor)
        Console.WriteLine("El número menor es: " & menor)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2
Realizar una aplicación que genere un array de números aleatorios y los muestre. Para ello se utilizará la clase Random. El array también tendrá tamaño aleatorio.

Module Module1

    Sub Main()
        Dim azar As Random = New Random
        ' El método Next(int1, int2) de la clase Random devuelve un número aleatorio dentro de ese intervalo
        Dim cuantos As Integer = azar.Next(1, 100)
        Dim numeros(cuantos) As Integer

        For i As Integer = 0 To cuantos
            numeros(i) = azar.Next(-200, 200)
        Next

        For Each num As Integer In numeros
            Console.WriteLine(num)
        Next

        Console.ReadKey()

    End Sub

End Module

Ejercicio "Cambio"

Realizar una aplicación que recoja por teclado la cantidad total a pagar y la cantidad que se ha entregado. La aplicación debe calcular el cambio correspondiente con el menor número de monedas y/o billetes posibles.

Module Module1

    Sub Main()
        Dim total, entregado, vuelta As Double
        Dim billetes() As Single = {500, 200, 100, 50, 20, 10, 5}
        Dim monedas() As Single = {200, 100, 50, 20, 10, 5, 2, 1}
        Dim resultado(14) As Integer

        Console.Write("Introduzca la cantidad total: ")
        total = Console.ReadLine
        Console.Write("Introduzca la cantidad entregada: ")
        entregado = Console.ReadLine

        Console.WriteLine()

        'Comprobamos las cantidades
        If (total > entregado) Then
            Console.WriteLine("Las cantidades no son correctas.")
            Console.WriteLine("La cantidad entregada debe ser mayor o igual al total.")
        ElseIf (total = entregado) Then
            Console.WriteLine("Ha entregado la cantidad exacta. No tiene cambio.")
        Else
            'Calculamos la vuelta
            vuelta = entregado - total

            Console.WriteLine("Su vuelta es: " & vuelta & " Euros.")

            ' 1º con los billetes
            Dim i As Integer = 0
            For Each cantidad As Single In billetes
                ' \ división entera
                resultado(i) = vuelta \ cantidad
                ' Lo que queda es el resto
                vuelta = vuelta Mod cantidad
                i += 1
            Next

            ' Me daba error si cogía el valor de las monedas con decimales
            ' Así que multipliqué tanto el valor de estas como lo que queda de vuelta por 100
            vuelta = vuelta * 100

            ' 2º con las monedas
            For Each cantidad As Single In monedas
                resultado(i) = vuelta \ cantidad
                vuelta = vuelta Mod cantidad
                i += 1
            Next

            Dim j As Integer = 0
            For i = 0 To 6
                If (resultado(j) <> 0) Then
                    Console.WriteLine(resultado(j) & " billetes de " & billetes(i) & " Euros.")
                End If
                j += 1
            Next

            For i = 0 To 7
                If (resultado(j) <> 0) Then
                    Console.WriteLine(resultado(j) & " monedas de " & (monedas(i) / 100) & " Euros.")
                End If
                j += 1
            Next

        End If

        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 trocear tabla

Dada una tabla de números float, realizar una función que la trocee, es decir,  que cree una tabla de dos dimensiones que tenga en cada fila 3 datos de la primera tabla. En la última fila tendrá los datos que sobren.
Se añade el programa principal con el que se probó la función.

public class Trocear {
    public static void main(String[] args) {
        float[] numeros = {12.23F, 53.23F, 1.423F, 54.22F, 75.72F, 0.125F, 5.34F, 6.33F};
        float[][] resultado;
        int a, b;
        resultado = trocea(numeros);
        for (a=0; a<resultado.length; a++){
            for (b=0; b<resultado[a].length; b++)
                System.out.print(resultado[a][b]+"  ");
            System.out.println();
        }
    }
    public static float[][] trocea(float[] t) {
        float[][] tabla = new float[(t.length+2)/3][];
        int i, j, k=0, c = t.length;
        for (i=0; i<tabla.length; i++){
            tabla[i] = new float[(c>=3)?3:c];
            c = c-3;
            for (j=0; j<tabla[i].length; j++){
                tabla[i][j] = t[k];
                k++;
            }
        }
        return tabla;
    }
}

Ejercicio "mensaje oculto"

Inicializar una tabla bidimensional (4x4) de tipo char en la que se esconderá un mensaje que tiene que mostrar el programa.
Declarar otra tabla de 2 columnas de tipo int, que indicará:
  • 1ª columna -> filas de la tabla 1
  • 2ª columna -> columnas de la tabla 1
En la primera tabla buscará todas las letras que se encuentran en las direcciones de la segunda tabla.

public class MensajeOculto {
    public static void main(String[] args) {
        char[][] mensaje = {{'a', 'b', 'c', 'd'},
                            {'e', 'f', 'g', 'h'},
                            {'i', 'j', 'k', 'l'},
                            {'m', 'n', 'o', 'p'}};
        int[][] clave = {{0, 2},
                         {0, 0},
                         {3, 0},
                         {1, 0},
                         {2, 3},
                         {2, 3},
                         {3, 2}};
        int i;
        for (i=0; i<clave.length; i++){
            System.out.print(mensaje[clave[i][0]][clave[i][1]]);
        }
        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]);
    }
}

Ejercicio ¿alguno igual que la media?

Realizar el diagrama Nassi-Shneiderman para un programa que lea 10 números, calcule su media y nos informe de si alguno de ellos coincide con su media. El programa sólo dirá:
  • La media es **** y COINCIDE con uno de los números introducidos.
O bien:
  • La media es **** y NO COINCIDE con uno de los números introducidos.

DIAGRAMA DE NASSI-SHNEIDERMAN



EJERCICIO EN JAVA

public class CoincideConMedia {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int[] numeros;
        int i, suma=0;
        double media;
        boolean noCoincide = true;
        numeros = new int[10];
        System.out.println("Introduzca "+ numeros.length + " numeros enteros:");
        for (i=0; i<numeros.length; i++){
            numeros[i] = entrada.nextInt();
            suma = suma+numeros[i];
        }
        media = (double)suma / numeros.length;
        i=0;
        while (i<numeros.length & noCoincide){
            if (numeros[i] == media)
                noCoincide = false;
            i++;
        }
        System.out.println("La media es: "+media+ "...");
        if (noCoincide)
            System.out.println("y NO COINCIDE con uno de los números introducidos.");
        else
            System.out.println("y COINCIDE con uno de los números introducidos.");
    }
}

Ejercicios intercalar y concatenar tablas

Dadas dos tablas (arrays) de float, cuyos valores deben estar ordenados de menor a mayor, intercalarlas en una tabla resultante, de forma que contenga los números de ambas tablas ordenados de menor a mayor.

public class Intercalar {
    public static void main(String[] args) {
        int i=0, j=0, k=0;
        float [] tablaA, tablaB, tablaResultante;
        tablaA = new float[]{4.51F, 7.2F, 14.41F, 20.2F};
        tablaB = new float[]{2.25F, 3.0F, 19.5F, 33.33F};
        tablaResultante = new float[tablaA.length + tablaB.length];
        while (i < tablaA.length & j < tablaB.length){
            if (tablaA[i] <= tablaB[j]){
                tablaResultante[k] = tablaA[i];
                i++;
            }
            else{
                tablaResultante[k] = tablaB[j];
                j++;
            }
            k++;
        }
        while (i < tablaA.length){
            tablaResultante[k] = tablaA[i];
            i++;
            k++;
        }
        while (j < tablaB.length){
            tablaResultante[k] = tablaB[j];
            j++;
            k++;
        }
        System.out.print("Tabla A: ");
        for (i=0; i < tablaA.length; i++)
            System.out.print(tablaA[i]+ "  ");
        System.out.println();
        System.out.print("Tabla B: ");
        for (j=0; j < tablaB.length; j++)
            System.out.print(tablaB[j]+ "  ");
        System.out.println();
        System.out.print("Tabla Resultante: ");
        for (k=0; k < tablaResultante.length; k++)
            System.out.print(tablaResultante[k]+ "  ");
    }
}

Dadas dos tablas (arrays) de float, concatenarlas en una tabla resultante, de forma que contenga primero todos los valores de una tabla y después de la otra. 

public class Concatenar {
    public static void main(String[] args) {
         int i=0, j=0, k=0;
         float [] tablaA, tablaB, tablaResultante;
         tablaA = new float[]{4.51F, 7.2F, 14.41F, 20.2F};
         tablaB = new float[]{2.25F, 3.0F, 19.5F, 33.33F};
         tablaResultante = new float[tablaA.length + tablaB.length];
         while (i < tablaA.length){
             tablaResultante[k] = tablaA[i];
             i++;
             k++;
         }
         while (j < tablaB.length & k < tablaResultante.length){
             tablaResultante[k] = tablaB[j];
             j++;
             k++;
         }
         System.out.print("Tabla A: ");
         for (i=0; i < tablaA.length; i++)
             System.out.print(tablaA[i]+ "  ");
         System.out.println();
         System.out.print("Tabla B: ");
         for (j=0; j < tablaB.length; j++)
             System.out.print(tablaB[j]+ "  ");
         System.out.println();
         System.out.print("Tabla Resultante: ");
         for (k=0; k < tablaResultante.length; k++)
             System.out.print(tablaResultante[k]+ "  ");
    }
}

Ejercicio calcular media (tabla bidimensional)

Una tabla bidimensional contiene las notas de un alumno en cada fila. Calculas para cada alumno su nota media y mostrar el alumno, sus notas y la nota media previamente calculada.

public class CalcularMedia {
    public static void main(String[] args) {
        int alum, asig;
        float suma;
        float[][] notas = {{3.5F, 6.7F, 5.25F, 8.0F, 4.8F},
                           {6.5F, 8.0F, 7.5F, 4.75F, 2.0F},
                           {5.5F, 3.7F, 6.25F, 7.0F, 8.7F},
                           {5.9F, 0.5F, 6.75F, 5.0F, 5.7F}};
        float[] notasMedias;
        notasMedias = new float[notas.length];
        //Calcula la nota media para cada alumno (fila)
        for (alum=0; alum<notas.length; alum++){
            suma = 0;
            for (asig=0; asig<notas[alum].length; asig++){
                suma = suma + notas[alum][asig];
            }
            notasMedias[alum] = suma / (notas[alum].length);
        }
        //Muestra el alumno, todas sus notas y la media.
        for (alum=0; alum<notas.length; alum++){
            System.out.print("Alumno " + alum + ": ");
            for (asig=0; asig<notas[alum].length; asig++)
                System.out.print(notas[alum][asig] + "  ");
            System.out.println("Nota media: " + notasMedias[alum]);
        }
    }
}

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.");
    }
}

Ejercicio girar tabla de enteros

Girar el contenido de una tabla de enteros.

public class GirarTabla {
    public static void main(String[] args) {
        int i=0, j, k;
        String aux;
        String[] tabla={"1", "2", "3", "4", "5", "6", "7"};
        j = tabla.length - 1;
        System.out.println("Los valores de la tabla son:");
        for (k=0; k<tabla.length; k++)
            System.out.print(tabla[k]+"   ");
        while (i<j){
            aux = tabla[i];
            tabla[i] = tabla [j];
            tabla [j] = aux;
            i++;
            j--;
        }
        System.out.println();
        System.out.println("Los valores de la tabla tras girarla son:");
        for (i=0; i<tabla.length; i++)
            System.out.print(tabla[i]+"   ");
    }
}

Ejercicio contar cifras

Dado un número entero, mostrar el número de cifras que contiene.

public class ContarCifras {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i, numero, contador=0;
        Integer aux;
        String num;
        System.out.println("Introduzca un número entero positivo.");
        System.out.println("Este programa le mostrará el nº de cifras.");
        numero = entrada.nextInt();
        aux = (Integer) numero;
        num = aux.toString();
        for (i=0; i<num.length(); i++)
            contador++;
        System.out.println("El número de cifras es: "+contador);
    }
}

OTRA FORMA

public class ContarCifras {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int numero, cifras=1;
        System.out.println("Introduzca un número entero y el programa le mostrará el número de cifras.");
        numero = entrada.nextInt();
        while (numero > 9){
            numero = numero/10;
            cifras++;
        }
        System.out.println("El número de cifras del número introducido es: "+cifras);
    }
}

Ejercicio de binario a decimal

DIAGRAMA DE NASSI-SCHNEIDERMAN



EJERCICIO EN JAVA

public class BinDec {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i, j=0, decimal=0;
        String binario;
        System.out.println("Escriba un número en binario. Este programa lo pasará a decimal.");
        binario = entrada.nextLine();
        for (i=binario.length()-1; i>=0; i--){
            if(binario.charAt(i) == '0'){
                decimal = (int) (decimal + 0 * (Math.pow(2, j)));
                j++;
            }
            if(binario.charAt(i) == '1'){
                decimal = (int) (decimal + 1 * (Math.pow(2, j)));
                j++;
            }
        }
        System.out.println(binario+" = "+decimal+" en base decimal.");
    }
}

jueves, 24 de marzo de 2011

Ejercicio calcular media (tabla de double)

Pedir al usuario que elija el tamaño de la tabla de double y que la rellene por teclado. Posteriormente, se le pedirá un número y se calculará la media de aquellos de la tabla que sean mayores que dicho número.

DIAGRAMA DE NASSI-SHNEIDERMAN



EJERCICIO EN JAVA

public class Media {
	public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i, contador=0, elementos;
        double suma=0, media, minimo;
        double[] numeros;
        System.out.println("¿Cuántos números quiere introducir?");
        elementos = entrada.nextInt();
        numeros = new double[elementos];
        System.out.println("Introduzca "+ elementos +" números:");
        for (i=0; i<=elementos-1; i++){
            System.out.print("Número "+ (i+1) +": ");
            numeros[i] = entrada.nextDouble();
        }
        System.out.println("Introduzca el nº mínimo. Se calculará la media de los números mayores que este");
        minimo = entrada.nextDouble();
        for (i=0; i<=elementos-1; i++)
            if (numeros[i] > minimo){
                suma = suma + numeros[i];
                contador++;
            }
        if (contador == 0)
            System.out.println("El número introducido es mayor que todos los anteriores.");
        else{
            media = suma/contador;
            System.out.println("La media de los nº mayores que "+ minimo +" es: "+ media);
        }
    }	
}

Ejercicios con tablas

Crear una tabla de enteros, cuyas casillas se rellenarán pidiendo números por teclado. Una vez rellena, mostrarla en orden inverso.

public class Tabla1 {
	public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i;
        int[] numero;
        numero = new int[10];
        System.out.println("Escriba 10 números:");
        for (i=0; i<=9; i++)
            numero[i] = entrada.nextInt();
        System.out.println("Los números en orden inverso son:");
        for (i=9; i>=0; i--)
            System.out.print(numero[i] + "   ");
    }	
}

Ejercicio similar, pero con una tabla de String.

public class Tabla2 {
	public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        final int CUANTOS=5;
        String[] nombres = new String[CUANTOS];
        int i;
        System.out.println("Introduzca "+ CUANTOS +" nombres:");
        for (i=0; i=0; i--)
            System.out.println(nombres[i]);
    }	
}

Igual que el anterior, pero mostrar las cadenas de caracteres que tengan más de 5 caracteres, en orden inverso.

public class Tabla3 {
	public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        final int CUANTOS=5;
        String[] nombres = new String[CUANTOS];
        int i;
        System.out.println("Introduzca "+ CUANTOS +" nombres:");
        for (i=0; i=0; i--)
            if (nombres[i].length() > 5)
                System.out.println(nombres[i]);
    }	
}

Varios ejercicios

Busca el algoritmo de Euclides (implementado de manera iterativa) y exprésalo en forma de diagrama de nassi-shneiderman.

Después implementa una aplicación Java que lea de teclado dos números enteros positivos y que muestre su máximo común divisor.

NOTA: el algoritmo de Euclides calcula el Máximo Común Divisor de dos números enteros.

DIAGRAMA DE NASSI-SHNEIDERMAN


EJERCICIO EN JAVA

public class Euclides {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int num1, num2, aux;
        System.out.println("Escriba dos números enteros y este programa le mostrará el MCD.");
        System.out.println("Número 1:");
        num1 = entrada.nextInt();
        System.out.println("Número 2:");
        num2 = entrada.nextInt();
        while (num2 != 0){
            aux = num1;
            num1 = num2;
            num2 = aux % num2;
        }
        System.out.println("El MCD de los números introducidos es: " + num1);
    }	
}

Implementa un programa Java que lea de la entrada estándar una frase y la analice para informarnos de:
  • número de caracteres que tiene.
  • número de caracteres alfabéticos que tiene.
public class Caracteres {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos=0, caracteres, caracteresAlfa=0;
        System.out.println("Introduzca una frase:");
        frase = entrada.nextLine();
        caracteres = frase.length();
        while (pos < frase.length()){
            if (Character.isLetter(frase.charAt(pos)))
                caracteresAlfa++;
            pos++;
        }
        System.out.println("El número de caracteres es: "+ caracteres);
        System.out.println("El número de caracteres  alfabéticos es: "+ caracteresAlfa);
    }	
}

Implemente un programa que calcule los divisores de un número entero previamente leído de la entrada estándar.

public class Divisores {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int n, i;
        System.out.println("Introduzca un número entero. Este programa le mostrará sus divisores.");
        n = entrada.nextInt();
        System.out.println("Los divisores de "+ n +" son:");
        for (i=1; i<=n; i++)
            if ((n%i) == 0)
                System.out.println(i);
    }
}

Implemente un programa que lea de la entrada estándar una serie de 5 nombres y calcule la longitud media de los nombre introducidos.

public class LongMedia1 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String nombre;
        int i, longitud=0;
        double longMedia;
        System.out.println("Introduzca 5 nombres:");
        for (i=1; i<=5; i++){
            nombre = entrada.nextLine();
            longitud = longitud + nombre.length();
        }
        longMedia = (double)longitud/5;
        System.out.println("La longitud media de los nombres introducidos es de: "+ longMedia + " caracteres.");
    }
}

Repite el anterior ejercicio, pero leyendo nombres hasta que se introduzca el 'nombre' FIN.

public class LongMedia2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i, longitud=0, veces=0;
        double longitudMedia;
        String nombre="";
        System.out.println("Escriba los nombre que desee. Cuando haya finalizado escriba 'fin'.");
        while (!nombre.equals("fin")){
            nombre = entrada.nextLine();
            longitud = longitud + nombre.length();
            nombre = nombre.toLowerCase();
            veces++;
        }
        longitudMedia = (double)(longitud-3)/(veces-1); //sin tener en cuenta los caracteres de 'fin'
        System.out.println("La longitud media de los nombres introducidos es de: "+ longitudMedia + " caracteres.");
    }
}

jueves, 28 de octubre de 2010

Ejercicio calcular TOTAL y MEDIA

Leer 5 números por teclado y calcular la suma total y la media. Se debe poder cambiar el número de elementos que se introduzcan, sin realizar ningún otro cambio en el programa.

DIAGRAMA DE NASSI-SHNEIDERMAN


EJERCICIO EN JAVA

public class TotalMedia {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i, numero, total;
        float media;
        final int CUANTOS;
        total = 0;
        CUANTOS = 5;
        System.out.println("Introduzca " + CUANTOS + " números enteros:");
        for (i = 1; i <= CUANTOS; i++){
            numero = entrada.nextInt();
            total = total + numero;
        }
        media = (float)total/CUANTOS;
        System.out.println("El resultado total es: " + total + " y la media es: " + media);
    }	
}

Ejercicio contar 'a'

Contar las sucesivas 'a' que pueda haber al principio de una palabra.
Por ejemplo, si la palabra es "aaavión", debe contar 3 'a'.

public class ContarA {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos=0;       //para ir indicando la posición de cada caracter
        int contador=0;  //cuenta las 'a'
        int comodin=0;   //he creado esta variable para comprobar el último caracter
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        frase = frase.toLowerCase();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else{
            if (frase.charAt(0) == 'a'){
                 do{
                    contador = contador + 1;
                    pos++;
                } while (frase.charAt(pos)=='a' & pos < (frase.length()-1));
                comodin = pos;
            }
            for (pos=1; pos < (frase.length()-1); pos++)
                if (Character.isLetter(frase.charAt(pos-1)) == false)
                    while(frase.charAt(pos) == 'a' & pos < (frase.length()-1)){
                        contador = contador + 1;
                        pos++;
                        comodin = pos;
                    }
            if ((comodin == pos | comodin == (frase.length()-1) | !Character.isLetter(frase.charAt(frase.length()-2))) & frase.charAt(pos=(frase.length()-1)) == 'a')
                contador = contador + 1;
            System.out.println("El número de 'a' es " +contador);
        }
    }	
}

No estoy del todo contenta con la solución, porque me quedó un poco largo y quizás no se entiende demasiado bien, pero como había empezado con esta solución, ya era una cuestión personal terminarla ;)

A continuación escribo la solución propuesta por el profesor:

public class ContarAMejor {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        boolean fueraPalabra;
        int pos, contador=0;
        fueraPalabra = true;
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        frase = frase.toLowerCase();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else{
            for (pos=0; pos < frase.length(); pos++)
                if (frase.charAt(pos) == 'a' & fueraPalabra == true)
                    contador++;
                else
                    fueraPalabra = !Character.isLetter(frase.charAt(pos));
        }
        System.out.println("El número total de 'a' es: " + contador);
    }	
}