Mostrando entradas con la etiqueta If - else. Mostrar todas las entradas
Mostrando entradas con la etiqueta If - else. Mostrar todas las entradas

domingo, 11 de marzo de 2012

Ejercicios MCD y MCM

EJERCICIO 1 - Máximo Común Divisor
Realizar una aplicación que calcule el máximo común divisor de dos números introducidos por teclado.

Module Module1

    Sub Main()
        Dim numero1, numero2, a As Integer
        Dim n1, n2 As Integer

        Console.Write("Número 1: ")
        numero1 = Console.ReadLine
        Console.Write("Número 2: ")
        numero2 = Console.ReadLine

        n1 = numero1
        n2 = numero2

        If (numero1 < numero2) Then
            a = numero2
            numero2 = numero1
            numero1 = a
        End If

        ' Algoritmo de Euclides
        While (numero1 Mod numero2 <> 0)
            a = numero1
            numero1 = numero2
            numero2 = a Mod numero2
        End While

        Console.WriteLine("El MCD de " & n1 & " y " & n2 & " es: " & numero2)

        Console.ReadKey()

    End Sub

End Module

EJERCICIO 2 - Mínimo Común Múltiplo
Realizar una aplicación que calcule el mínimo común múltiplo de dos números introducidos por teclado.

Module Module1

    Sub Main()
        Dim numero1, numero2, mcm As Integer

        Console.Write("Número 1: ")
        numero1 = Console.ReadLine
        Console.Write("Número 2: ")
        numero2 = Console.ReadLine

        mcm = (numero1 / MCD(numero1, numero2)) * numero2

        Console.WriteLine("El mcm de " & numero1 & " y " & numero2 & " es: " & mcm)

        Console.ReadKey()

    End Sub

    Function MCD(ByVal num1 As Integer, ByVal num2 As Integer) As Integer
        Dim a As Integer
        If (num1 < num2) Then
            a = num2
            num2 = num1
            num1 = a
        End If

        ' Algoritmo de Euclides
        While (num1 Mod num2 <> 0)
            a = num1
            num1 = num2
            num2 = a Mod num2
        End While

        Return num2
    End Function

End Module

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

sábado, 3 de marzo de 2012

Ejercicio "Ecuación de 2º grado"

Realizar una aplicación que calcule las raíces de una ecuación de segundo grado y las muestre, una vez que ha recogido los coeficientes por teclado.

Imports System.Math

Module Module1

    Sub Main()

        Dim a, b, c As Integer
        Dim discriminante As Integer

        Console.WriteLine("ax^2 + bx + c = 0")
        Console.WriteLine("Introduce los valores de los coeficientes.")
        Console.Write("a: ")
        a = Console.ReadLine
        Console.Write("b: ")
        b = Console.ReadLine
        Console.Write("c: ")
        c = Console.ReadLine

        If (a = 0) Then
            Console.WriteLine("La ecuación no es de segundo grado.")
        Else
            discriminante = b ^ 2 - (4 * a * c)

            If (discriminante = 0) Then
                Dim raiz As Double
                raiz = -b / (2 * a)
                Console.WriteLine("La ecuación tiene un único resultado.")
                Console.WriteLine("Raíz: " & raiz)
            ElseIf (discriminante > 0) Then
                Dim raiz1, raiz2 As Double
                raiz1 = (-b + (Sqrt(discriminante))) / (2 * a)
                raiz2 = (-b - (Sqrt(discriminante))) / (2 * a)
                Console.WriteLine("La ecuación tiene dos resultados.")
                Console.WriteLine("Raíz 1: " & raiz1)
                Console.WriteLine("Raíz 2: " & raiz2)
            Else
                Console.WriteLine("La ecuación no tiene resultado para esos valores.")
            End If
        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 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]);
    }
}

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

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

Ejercicios búsquedas

Realizar un programa que pida el nombre de una isla y una vez introducido, compruebe si dicha isla pertenece a las Islas Canarias.

public class BuscarIslas {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int pos=0;
        String islaBuscada;
        String[] islasCanarias = {"El Hierro", "La Palma", "La Gomera", "Tenerife", "Gran Canaria", "Lanzarote", "Fuerteventura"};
        System.out.println("Introduzca el nombre de una isla.");
        System.out.println("Este programa le dirá si pertenece al archipiélago canario.");
        islaBuscada = entrada.nextLine();
        while (pos<(islasCanarias.length-1) & !islaBuscada.equals(islasCanarias[pos]))
            pos++;
        if (islaBuscada.equals(islasCanarias[pos]))
            System.out.println("Sí se trata de una de las Islas Canarias.");
        else
            System.out.println("No es una de las Islas Canarias o el nombre no se ha escrito bien.");
    }
}

Realizar un programa que contenga una tabla de alturas y pida al usuario una altura concreta. Buscará si la altura dada está en la tabla y mostrará la posición.

public class BuscarAlt {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int pos=0;
        double[] alturas = {1.75, 1.58, 1.50, 2.07, 1.67, 2.11, 1.98, 1.83, 1.49, 1.67};
        double alturaUsuario;
        System.out.println("Introduzca la altura que desee.");
        System.out.println("Este programa le mostrará la posición en que se encuentra.");
        alturaUsuario = entrada.nextDouble();
        while (pos<(alturas.length-1) & alturas[pos]!=alturaUsuario)
            pos++;
        if (alturas[pos]==alturaUsuario)
            System.out.println("La altura "+alturaUsuario+" se encuentra en la posición: "+pos);
        else
            System.out.println("La altura "+alturaUsuario+" no se ha encontrado.");
    }
}

Ejercicio calcular media de una serie de números

Calcular la media de una serie de números introducidos por teclado, hasta que se introduzca uno que provoca la finalización del programa.

public class MediaNum {
	public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        double numero, suma=0, media;
        int contador=0;
        System.out.println("Este programa calcula la media de una serie de números.");
        System.out.println("Cuando quiera finalizar introduzca '999'.");
        System.out.println("Introduzca los números:");
        numero = entrada.nextDouble();
        while (numero != 999){
            suma = suma + numero;
            contador++;
            numero = entrada.nextDouble();
        }
        if (numero == 999)
            System.out.println("Ha decidido salir sin introducir números.");
        else{
            media = suma/contador;
            System.out.println("La media de los números introducidos es: "+ media);
        }
    }	
}

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

Palíndromo

Realizar un programa que, dada una frase por el usuario, diga si dicha frase es o no un palíndromo.
NOTA: según el diccionario de la RAE, palíndromo es una palabra o frase que se lee igual de izquierda a derecha, que de derecha a izquierda.

DIAGRAMA DE NASSI-SHNEIDERMAN



EJERCICIO EN JAVA

public class Palindromo1 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int pos=0;
        StringBuffer frase, inversa;
        String s1, s2;
        System.out.println("Introduzca una frase. Este programa comprobará si se trata o no de un palíndromo.");
        frase = new StringBuffer(entrada.nextLine());
        while (pos < frase.length()) //si utilizamos for, dejamos la parte de pos++ vacía
            if (!Character.isLetter(frase.charAt(pos)))
                frase.deleteCharAt(pos);
            else
                pos++;
        inversa = new StringBuffer(frase);
        inversa.reverse();
        s1 = frase.toString();
        s2 = inversa.toString();
        if (s1.equalsIgnoreCase(s2)) //ignora si hay mayusculas o minisculas
            System.out.println("La frase introducida es un palíndromo.");
        else
            System.out.println("La frase introducida no es un palíndromo.");
    }	
}

El mismo ejercicio, pero sin emplear StringBuffer.

DIAGRAMA DE NASSI-SHNEIDERMAN


EJERCICIO EN JAVA

public class Palindromo2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i=0, j, pos=0, contador=0, contador2=0;
        String frase;
        System.out.println("Introduzca una frase. Este programa le dirá si es un palíndromo.");
        frase = entrada.nextLine();
        j=(frase.length()-1);
        while (i<frase.length() & j>=0)
            if (!Character.isLetter(frase.charAt(i)))
                i++;
            else
                if (!Character.isLetter(frase.charAt(j)))
                    j--;
                else
                    if (frase.charAt(i) == frase.charAt(j)){
                        contador++;
                        i++;
                        j--;
                    }
                    else{
                        i++;
                        j--;
                    }
        while (pos <= (frase.length()-1))
            if (Character.isLetter(frase.charAt(pos))){
                contador2++;
                pos++;
            }
            else
                pos++;
        if (contador == contador2)
            System.out.println("La frase es un palíndromo.");
        else
            System.out.println("La frase no es un palíndromo.");
    }	
}

OTRA FORMA DE HACER EL EJERCICIO EN JAVA (MÁS SENCILLA). Esta forma está basada en el diagrama anterior.

public class Palindromo3 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int i=0, j;
        String frase;
        boolean esPalindromo=true;
        System.out.println("Introduzca una frase. Este programa le dirá si es un palíndromo.");
        frase = entrada.nextLine();
        j=(frase.length()-1);
        while (i<j & esPalindromo)
            if (!Character.isLetter(frase.charAt(i)))
                i++;
            else
                if (!Character.isLetter(frase.charAt(j)))
                    j--;
                else
                    if (frase.charAt(i) == frase.charAt(j)){
                        i++;
                        j--;
                    }
                    else
                        esPalindromo = false;
        if (i>=j)
            System.out.println("La frase es un palíndromo.");
        else
            System.out.println("La frase no es un palíndromo.");
    }
}   

jueves, 28 de octubre de 2010

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

jueves, 21 de octubre de 2010

Ejercicios con "for" y "Strings"

1.- Realizar un programa que lea una frase por teclado y después muestre los caracteres 'a' que contiene dicha frase, junto a la posición que ocupa (las posiciones se comienzan a contar desde 0).

public class Ejer1 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos;    //para ir indicando la posición de cada caracter
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        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')
                    System.out.println("a - " + pos);
    }	
}

2.- El mismo ejercicio anterior, pero que busque los caracteres 'a' desde el final hasta el principio.

public class Ejer2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos;    //para ir indicando la posición de cada caracter
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else
            for (pos= (frase.length()-1); pos >= 0; pos--)
                if (frase.charAt(pos) == 'a')
                    System.out.println("a - " + pos);
    }	
}

3.- El mismo programa, pero ahora debe mostrar sólo las 'a' que estén al principio de una palabra.

DIAGRAMA DE NASSI-SHNEIDERMAN



PROGRAMA EN JAVA

public class Ejer3 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        String frase;
        int pos;    //para ir indicando la posición de cada caracter
        pos = 0;
        System.out.println("A continuación escriba una frase (que contenga alguna 'a'):");
        frase = entrada.nextLine();
        if (frase.indexOf('a') == -1)
            System.out.println("La frase introducida no contiene ninguna 'a'.");
        else{
            if (frase.charAt(pos) == 'a')
                System.out.println("a - " + (pos));
            for (pos=0; pos < (frase.length()-1); pos++)
                if (Character.isLetter(frase.charAt(pos)) == false)
                    if (frase.charAt(pos + 1) == 'a')
                        System.out.println("a - " + (pos + 1));
        }
    }	
}

lunes, 18 de octubre de 2010

Ejercicios

1.- Programa que lea el precio de un producto y a partir de un precio () , lo incremente en un 11%. Si su valor final es inferior a 1000 €, deberá imprimir el precio del producto, pero a partir de 1000 € tan solo imprimirá el mensaje:
"Cariiiisimo"
... incluidas las comillas.

public class Precio {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float precio, total;
        System.out.println("Escriba el precio del producto que desee:");
        precio = entrada.nextFloat();
        total = 1.11F * precio;
        if (total < 1000)
            System.out.println("El precio final de producto elegido es: " + total + " euros.);
        else
            System.out.println("\"Cariiiisimo\"");             
    }	
}

2.- Programa que calcule el gasto de agua en una vivienda dado el número de litros gastados, siendo el sistema de cobro:
  • la cuota fija mensual es de 6 €.
  • los primeros 50 litros son gratis (opción 1).
  • entre 50 y 200 litros se cobra el litro a 0.1 € (opción 2).
  • a partir de 200 litros se cobra el litro a 0.3 € (opción 3).
public class CuotaMensual {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        float litros, gasto, cuota;
        cuota = 6F;
        System.out.println("Introduzca el número de litros consumidos:");
        litros = entrada.nextFloat();
        if (litros <= 50)
            gasto = cuota;
        else
            if (litros <= 200)
                gasto = cuota + (litros-50F)*0.1F;
            else
                gasto = cuota + (litros-200F)*0.3F + 150*0.1F;
        System.out.println("El gasto mensual es de: " + gasto + " euros.");
    }	
}

3.- Dada una medida de tiempo expresada en horas, minutos y segundos con valores arbitrarios, elabore un programa que transforme dicha medida en una expresión correcta. Por ejemplo, dada la medida 3h 118m 195s, el programa deberá obtener como resultado 5h 1m 15s.

public class Hora {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int h1, m1, s1, h2, m2, s2, m3;
        //h: horas, m: minutos, s: segundos
        System.out.println("Escriba una medida de tiempo en el siguiente formato: horas minutos segundos");
        h1 = entrada.nextInt();
        m1 = entrada.nextInt();
        s1 = entrada.nextInt();
        if (s1 >= 60){
            s2 = s1 % 60;
            m2 = m1 + s1/60;
            if (m1 >= 60){
                m3 = m2 % 60;
                h2 = h1 + m2/60;
            }
            else{
                m3 = m2;
                h2 = h1;
            }
        }
        else{
            s2 = s1;
            if (m1 >= 60){
                m3 = m1 % 60;
                h2 = h1 + m1/60;
            }
            else{
                m3 = m1;
                h2 = h1;
            }
        }
        System.out.println("La expresión correcta es: "+h2+" horas "+m3+" min. "+s2+" seg.");
    }
}

jueves, 7 de octubre de 2010

Meses

Hacer un programa en Java que lea un número correspondiente a un mes y muestre el número de días de ese mes.

public class Meses1 {
    public static void main(String[] args) {
        int mes;
        Scanner entrada = new Scanner(System.in);
        System.out.println("Escribe el número correspondiente a un mes:");
        mes = entrada.nextInt();
        if (mes==1 | mes==3 | mes==5 | mes==7 | mes==8 | mes==10 | mes==12)
            System.out.println("El mes tiene 31 días.");
        else{
            if (mes==2)
                System.out.println("El mes tiene 28 días.");
            else{
                if (mes==4 | mes==6 | mes==9 | mes==11)
                    System.out.println("El mes tiene 30 días.");
                else
                    System.out.println("Sólo existen 12 meses.");
            }
        }
    }	
}

Otra forma de hacerlo sería utilizando "switch".

public class Meses2 {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int mes;
        System.out.println("Escribe el número correspondiente a un mes:");
        mes = entrada.nextInt();
        switch (mes){
            case 1:
            case 3:
            case 5:
            case 7:
            case 8:
            case 10:
            case 12:
                System.out.println("El mes tiene 31 días.");
                break;
            case 2:
                System.out.println("El mes tiene 28 días.");
                break;
            case 4:
            case 6:
            case 9:
            case 11:
                System.out.println("El mes tiene 30 días.");
                break;
            default:
                System.out.println("Debe introducir el número correspondiente a un mes. El número introducido no es correcto.");
                break;
        }
    }	
}