jueves, 24 de marzo de 2011

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

5 comentarios:

  1. Mostrar por consola los números del 10 al 999 (ambos incluidos) e ir indicando cuáles son palíndromos (se
    leen igual de izquierda a derecha y viceversa por ej. 989, 88, 101, etc). Hágalo con funciones. porfa ayuda

    ResponderEliminar
  2. Se puede hacer el programa mediante arreglos o vectores??

    ResponderEliminar
    Respuestas
    1. Como lo que se quiere es saber si una frase es un palíndromo, en este caso tiene más sentido hacerlo con un String, pero entiendo que haciendo algunos ajustes podría cambiarse para hacerlo con un Array. Hace tiempo que no trabajo con Java, así que tampoco puedo aportar mucho más.

      Eliminar