Mostrando entradas con la etiqueta Bucle "while". Mostrar todas las entradas
Mostrando entradas con la etiqueta Bucle "while". 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

sábado, 3 de marzo de 2012

"While... End" y "Do... Loop"

A continuación se muestra un sencillísimo ejemplo de todas las variantes de estos bucles:

Module Module1

    Sub Main()
        DoLoop()
        Console.ReadKey()
    End Sub

    Sub DoLoop()
        Dim a As Integer = 1

        ' While
        While (a < 10)
            a += 1
        End While

        ' Equivalente al while
        Do While (a < 10)
            a += 1
        Loop

        ' Evalúa la condición al final
        ' Por lo tanto el bloque se ejecutará al menos una vez
        Do
            a += 1
        Loop While (a <= 10)

        ' Se ejecuta "hasta que", no "mientras"
        Do Until (a > 10)
            a += 1
        Loop

        ' Lo mismo, pero el bloque se ejecuta al menos una vez
        Do
            a += 1
        Loop Until (a > 10)
    End Sub

End Module

jueves, 16 de junio de 2011

Ejercicio de búsqueda en tablas

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

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

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

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

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

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

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

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

Ejercicio calcular factorial

Calcular el factorial de un número que se pide por teclado.

public class Factorial {
    public static void main(String[] args) {
        Scanner entrada = new Scanner(System.in);
        int num, n;
        long f=1L;
        System.out.println("Introduzca un número entero (>= 0):");
        num = entrada.nextInt();
        n = num;
        while(n > 1){
            f = f*n;
            n--;
        }
        System.out.println("El factorial de " + num + " es: " + f);
    }	
}