Inicio > C# > palindrome en C# – explicación

palindrome en C# – explicación

hace ya casi más de un año que en mi spaces, escribí un ejemplo de como identificar un palíndromo, y hace un rato me preguntaron sobre su funcionamiento, y creo que no lo explique bien, así que en este post explicare línea por línea para que se entienda mejor, así que aquí vamos…

 

using System;
using System.Collections.Generic;
using System.Text;

namespace palindrome
{
    class Program
    {
        //variables para derterminar si la palabra es palindrome o no
        //son constantes, porque la funcion verificar es de tipo entero
        // y retornara un 0 o 1 respectivamente.
        const int palindrome = 1;
        const int nopalindrome = 0;

        static void Main(string[] args)
        {
            //este es un arreglo de tipo char, que contendra la letra a introducir
            char[] carateres;

            //pedimos al usuario que introduzca una palabra
            Console.WriteLine("Ingrese una palabra: ");
            //asignamos lo que teclea el usuario a la variable "s"
            string s = Console.ReadLine();
            //instanceamos la var "caracteres" indicando el tamaño de el arreglo
            //que en este caso es el tamaño de la palabra introducida.
            carateres = new char[s.Length];
            //saber cuantos caracteres tienes nuestra cadena
            //esto lo hacemos copiando los caracteres de una subcadena especificada
            //esto lo hace el metodo ToCharArray
            carateres = s.ToCharArray(0, s.Length);
            //Console.WriteLine(s.Length);
            //comparamos si lo que nos regresa la función es un 1
            //si es así la palabra es palindrome, sino pues no lo es
            if (verificar(0, carateres, s.Length) == palindrome)
                Console.WriteLine("la palabra es palindrome...");
            else
                Console.WriteLine("La palabra no es palindrome...");

        }

        //aquí es donde comparamos las letras de inicio a fin
        static int verificar(int pos, char[] palabra, int largo)
        {
            //primera condición, si la palabra en su posición 0 es igual a la ultima, 
            //por ejemplo "ojo", verifica si la pos 0 ('o') es igual a la ultima (3-0-1= 2) que también es una 'o'
            if (palabra[pos] == palabra[largo - pos - 1])
            {
                //aquí solo nos indica que si las pos es menor que largo - pos entra e incrementa pos
                //cuando llega al centro de la palabra, nos indica que es un palindrome
                if (pos < largo - pos)
                    return (verificar(++pos, palabra, largo));
                else
                    return (palindrome);
            }
            //si no entra al if en donde se comaparan los caracteres
            return (nopalindrome);
        }
    }
} 

espero q se entienda y les sea de utilidad, la verdad es que ya no me acordaba :P, pero ya que lo vi de nuevo y compilé, es así como funciona.

Saludos!

Categorías: C#
  1. Ronald
    May 5, 2009 a las 9:58 pm

    Hey el codigo no compila.

    • May 10, 2009 a las 12:31 am

      Que tal Roland,

      antes de publicar un post con código me aseguro que funcione, y este del palindrome funciona. Me gustaria ayudarte asi que si eres tan amable de decirme por qué?, no compila o que errores te manda al tratar de generar la solución por favor.

  2. Taio
    May 25, 2009 a las 10:23 pm

    Necesito un metodo que me diga si el arreglo string, ingresado por un usuario, es palindromo o no :S..
    Realmente me tiene medio trancado… agradezco cualquier ayuda.
    Saludos

    • May 26, 2009 a las 4:27 pm

      Amigo Taio,

      el ejemplo hace exactamente lo que pides, a no ser que lo necesites en otro lenguaje, si es el caso me puedes decir y con gusto te ayudo

      • Taio
        May 30, 2009 a las 1:19 am

        Estimado Norber:

        Es que ese codigo, me indica si la palabra (1 solo string) es palindromo, yo lo que necesito es comparar un array de strings:

        EJ: string[] x={«hola», «soy», «taio»};

        no se si usando el Compare.. puedo lograr que me retorne un bool al main, indicandome si es o no un palindromo.

        Desde ya, muchas gracias por la pronta respuesta.
        Un saludo desde Cerro Largo, Uruguay.

  3. Taio
    May 31, 2009 a las 6:31 pm

    Esta es la letra del ejercicio que necesito terminar….

    Se desea codificar un programa en consola de C# que permita la manipulación de palabras en una frase. La frase
    debe ser ingresada por el usuario y luego se mostrarán diferentes salidas.

    Parte a) Escribir en el método Main un código que pregunte al usuario la cantidad de palabras que tendrá la frase y
    luego le pida que ingrese todas esas palabras, guardándolas en un arreglo de strings. Escribir un método que reciba
    la frase como parámetro y que la muestre en pantalla de forma de poder verificar lo ingresado. Se debe poder
    invocar a dicho método desde un menú del Main.

    Parte b) Escribir un método que cuente la cantidad de letras de la frase. Se debe poder invocar a dicho método
    desde un menú del Main.

    Parte c) Escribir un método que reciba la frase y devuelva la frase invertida (es decir con las palabras en el orden
    inverso al original). Se debe poder invocar a dicho método desde un menú del Main.

    Parte d) Escribir un método que reciba la frase y devuelva si la misma es un palíndromo o no. Un palíndromo es
    una frase que se lee igual de adelante hacia atrás y de atrás hacia delante. Por ejemplo la frase “hola Juan” no es un
    palíndromo, mientras que “hola Juan hola”. Se debe poder invocar a dicho método desde un menú del Main.

    Nota: el palíndromo que se hace referencia aquí es de a palabras, no de a letras como usualmente ocurre.
    El menú del programa deberá verse similar al siguiente (y se deberá mostrarse una y otra vez hasta que el usuario
    decida terminar el programa):
    Ingrese una Opción:

    1 – Ingresar una nueva frase.
    2 – Mostrar la frase actual.
    3 – Contar la cantidad de letras de la frase actual.
    4 – Invertir frase actual.
    5 – ¿Es la frase actual un palíndromo?
    6 – Terminar el programa.

    • junio 1, 2009 a las 4:37 pm

      Amigo Taio,

      Pudes encontrar lo que buscas en este post:

      [C#] Haciendo la tarea xD, string, palíndromo, invertir una cadena, etc.

      Espero que te sea de ayuda y gracias por escribir comentarios en el blog, te recomiendo que aunque no seas un experto en programar y estes iniciando siempre debes intentar una y otra vez hacerlo por tu cuenta si después de muchos intentos no lo consigues pide ayuda, tomalo como un consejo.

      Saludos!

  4. Jhonattan
    agosto 26, 2009 a las 10:37 pm

    He!!
    caballero!
    una ayuda!
    nesecito el codigo del calculo! del palindrome!
    pero de una forma dinamica!
    osea!
    con un ciclo for!
    dentreoo de una clase!
    graccias de antemano!

    • agosto 27, 2009 a las 5:34 pm

      Hola Jhonattan.

      Un tip, para hacer esto fácil, crea una clase con el nombre que quieras y solo copia el código sin el metodo Main, que es el que manda a llamara la función que necesitas y listo, creas el objeto de tu clase y mandas a llamar el método como lo haces en el Main :D.

      Solo cambia la clase Program por una nueva, sin el método main y ya

      Saludos

  5. noviembre 3, 2009 a las 5:03 am

    Oye seria bueno que utilizaras variables de tipo bool para que no te consuman la memoria de declarar dos int
    entonces manejas el valor de las variables para decir si es o no es palindrome esta bien tu code thnx!

  6. May 29, 2010 a las 3:22 am

    ola nesesito un programa q me diga si una palabra es polindroma o no
    #include
    #include
    #include

    main()
    {
    int x=0,lon=0,aux=0;
    char cad[20];

    printf(«Introduce una cadena:»); gets(cad);
    lon=strlen(cad);
    for(x=0;x<lon;x++)
    if(cad[x]==cad[(lon-1)-x])
    aux++;
    if (aux==lon)
    printf(" si es polindroma");
    else
    printf(" no es polindroma");
    getch();

    }
    tengo este pero en lugar de printf quiero un cout y no me sale
    ayudame porfavor

    • May 29, 2010 a las 3:55 pm

      hola!!

      para usar el cout necesitas una referencia, creo que se llama iostream.

  7. D@m!@n
    junio 22, 2010 a las 3:43 pm

    hola a todos, necesito un programa hacerca de un palindromo, xfa si ai alguien que pueda ayudar se lo agradeceria mucho , lo necesito lo mas pronto posible gracias.

  8. xhapaita
    May 23, 2011 a las 1:58 pm

    por favor pongan ejemplos pero con numeros porfis…..

  9. xhapaita
    May 23, 2011 a las 2:05 pm

    Dado un número n en base 10, escribe un programa que
    proporcione la menor base b tal que 2 ≤ b < 10, en la que este se puede representar
    como palíndromo, así como su representación r, en caso de no existir dicha base, la
    salida debe de ser b = -1 y r = 0.
    Entrada: La primera línea contiene el numero de casos de prueba y el resto un número
    entero n en decimal tal que 0 < n < 2,147,483,647.
    Salida: Un número entero b y un numero r representado en base b. (espacio entre b y r) es un problema de examen y no tengo ni idea de lo que tengo que hacer
    xfisssss… ayundenme
    graxxxx….

  10. memo
    octubre 4, 2011 a las 5:47 am

    tu codigo no funciona……

    • diciembre 1, 2011 a las 6:47 pm

      memo,

      gracias por la observación, la verdad es que el código no compila, solo es borrar una parte y funciona bien. ya esta solucionado.

      Saludos.

  11. febrero 20, 2012 a las 2:11 am

    hola necesito ayuda si es lo q necesito pero no imprime el resultado o lo imprime y desaparece rapido y intente poner el codigo
    console.readline(); pero no funciono me tira error q puedo hacer

    • febrero 20, 2012 a las 2:54 pm

      antes de cerrar la «{» del Main coloca esta linea: «Console.ReadLine();»

  1. No trackbacks yet.

Replica a Dami Alexander Portio Cancelar la respuesta