4/14/2017

Ejercicio 52

Dada una cadena, haga un algoritmo que compruebe si es un palíndromo.
Un palíndromo es una palabra, número o frase que se lee igual adelante que atrás.

Ejemplo de un políndromo

#include <iostream>
// se incluye la clase Polindromo para despues llamar a sus métodos 
#include "Polindromo.h"

using namespace std;

int main(void)
{
    // se crea un objeto de la clase Polindromo (Instanciación) 
    Polindromo *obj = new Polindromo();
    string cadena;
    // pedimos la cadena 
    cout << "Digite la cadena" << endl;
    cout << ">> ";
    cin >> cadena;
    // encapsulamos la variable cadena  
    obj->setCadena(cadena);
    // si el método de validar retorna true 
    if (obj->validar())
    {
        // entonces, se muestra en pantalla indicando que SI es un palíndromo la cadena 
        cout << "La cadena '" << obj->getCadena() << "' es un palindromo." << endl;
    }
    else
    {
        // sino, se muestra en pantalla indicando que NO es un palíndromo la cadena 
        cout << "La cadena '" << obj->getCadena() << "' no es un palindromo." << endl;
    }
}

#ifndef POLINDROMO_H
#define POLINDROMO_H
#include <iostream>

using namespace std;

class Polindromo
{
    public:
        Polindromo();
        virtual ~Polindromo();
        // se declaran los métodos publicos 
        void setCadena(string val);
        string getCadena();
        bool validar();
    protected:

    private:
        // se declara un atributo privado 
        string cadena;
};

#endif // POLINDROMO_H 

#include "Polindromo.h"

Polindromo::Polindromo()
{
    // se le asigna un valor por defecto al atributo de la clase en el constructor 
    cadena = "";
}

Polindromo::~Polindromo()
{
    //dtor 
}

// método Set y Get del atributo de la clase 
void Polindromo::setCadena(string val)
{
    cadena = val;
}

string Polindromo::getCadena()
{
    return cadena;
}

// método para validar si la cadena es un palíndromo 
bool Polindromo::validar()
{
    // inicializo una variable de tipo entero llamada tam , en la longitud de la cadena 
    int tam = getCadena().length();
    // inicializo un vector de tipo char con el tamaño del valor de la variable tam  
    char caracter[tam];
    // inicializo una variable booleana llamada existe , en false 
    bool existe = false;
    // recorro con el ciclo for para asignarle en cada posicion del vector una letra de la cadena 
    for (int i = 0; i < tam; i++)
    {
        // en la posicion i del vector caracter se le asignara el caracter de la posicion i de la cadena 
        caracter[i] = cadena[i];
    }
    // recorremos otra ves el vector para validar 
    for (int j = 0; j < tam; j++)
    {
        // si el caracter de la posicion i es igual al caracter de la posicion (tam-i-j) 
        if (caracter[j] == caracter[(tam-1)-j])
        {
            // entonces le asignamos a la variable existe el valor de true 
            existe = true;
        }
        else
        {
            // sino retornamos false 
            return false;
        }
    }
    // retornamos el valor de la variable existe  
    return existe;
}


// se importa paquete JOptionPane para dibujar un cuadro de dialogo en pantalla
// que muestre información o para llenar información 
import javax.swing.JOptionPane;

public class Main
{
    public static void main(String[] args)
    {
        // creamos un objeto de la clase Palindromo (Instanciación) 
        Palindromo obj = new Palindromo();
        // pedimos la cadena 
        String cadena = JOptionPane.showInputDialog("Digite la cadena:");
        // encapsulamos la cadena  
        obj.setCadena(cadena);
        // si el método de validar retorna true 
        if (obj.validar()) 
        {
            // entonces, se muestra en pantalla indicando que SI es un palíndromo la cadena 
            JOptionPane.showMessageDialog(null, "La cadena '" + obj.getCadena() + "' es un palindromo.");
        }
        else
        {
            // sino, se muestra en pantalla indicando que NO es un palíndromo la cadena 
            JOptionPane.showMessageDialog(null, "La cadena '" + obj.getCadena() + "' no es un palindromo.");
        }
    }
}

public class Palindromo
{
    // se declara un atributo privado 
    private String cadena;
    
    public Palindromo()
    {
        // se le asigna un valor por defecto al atributo de la clase en el constructor 
        cadena = "";
    }
    
    // método Set y Get del atributo de la clase 
    public void setCadena(String val)
    {
        cadena = val;
    }
    
    public String getCadena()
    {
        return cadena;
    }
    
    // método para validar si la cadena es un palíndromo 
    public boolean validar()
    {
        // inicializo una variable de tipo entero llamada tam , en la longitud de la cadena 
        int tam = getCadena().length();
        // inicializo un vector de tipo char con el tamaño del valor de la variable tam  
        char [] caracter = new char[tam];
        // inicializo una variable booleana llamada existe , en false 
        boolean existe = false;
        // recorro con el ciclo for para asignarle en cada posicion del vector una letra de la cadena 
        for (int i = 0; i < tam; i++)
        {
            // en la posicion i del vector caracter se le asignara el caracter de la posicion i de la cadena 
            caracter[i] = getCadena().charAt(i);
        }
        // recorremos otra ves el vector para validar 
        for (int j = 0; j < tam; j++)
        {
            // si el caracter de la posicion i es igual al caracter de la posicion (tam-i-j) 
            if (caracter[j] == caracter[(tam-1)-j])
            {
                // entonces le asignamos a la variable existe el valor de true 
                existe = true;
            }
            else
            {
                // sino retornamos false 
                return false;
            }
        }
        // retornamos el valor de la variable existe 
        return existe;
    }
}