Inicio > .NET, C#, Ejemplos, Tips, Visual Studio, Visual Studio Express > [C#] Haciendo la tarea xD, string, palíndromo, invertir una cadena, etc.

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

Este post en respuesta aun comentario en el post de palindrome en C# – explicación. Tengo que mencionar que cualquier otro día (es decir; un fin de semana o un día que no sea lunes xD) no hubiera contestado este comentario con un post, solo hubiera dicho, amigo piénsale un poco y seguro encuentras la respuestas, pero esta vez he llegado al trabajo y como no tengo mucho que hacer aquí rápido la solución a su tarea, solo espero que su profesor no vea este post xD.

El comentario lo pueden revisar aquí:

https://mspnor.wordpress.com/2008/08/10/palindrome-en-c-explicacin/#comment-330

Y aquí la mi pequeño programa que espero que funcione y les sirva (lo pongo por partes para que se entienda):

Main:

static void Main(string[] args)
{
    //variables
    StringBuilder frase = new StringBuilder();

    //Menú
Menu:
    Menu();
    int opcion = int.Parse(Console.ReadLine());
    switch (opcion)
    {
        case 1:
            Console.Clear();
            goto Leer;                   
        case 2:
            Console.Clear();
            MostrarFrase(frase);
            Console.ReadLine();
            goto Menu;
          
        case 3:
            Console.Clear();
            MostrarTotalLetras(frase);
            Console.ReadLine();
            goto Menu;
         
        case 4:
            Console.Clear();
            FraseInvertida(frase);
            Console.ReadLine();
            goto Menu;
           
        case 5:
            Console.Clear();
            EsPalindrome(frase);
            Console.ReadLine();
            goto Menu;
          
        default:
            break;
    }



Leer:
    try
    {
        Console.WriteLine("Cantidad de Palabras que tendrá la frase?");
        int totalPalabras = int.Parse(Console.ReadLine());


    Repetir:
        Console.Clear();
        Console.WriteLine("Introduce Frase: ");


        string[] frase1 = Console.ReadLine().Split(' ');


        for (int i = 0; i < frase1.Length; i++)
        {
            if (totalPalabras == frase1.Length)
            {
                if (i == (frase1.Length - 1))
                    frase.Append(frase1[i]);
                else
                    frase.Append(frase1[i] + " ");
            }
            else if (totalPalabras < frase1.Length)
            {
                Console.Clear();
                Console.WriteLine("Te excediste en el total de palabras!");
                Console.WriteLine("Solo se aceptan {0} palabras para esta frase y escribiste {1}", totalPalabras, frase1.Length);
                Console.WriteLine("Inténtalo de nuevo..");
                Console.ReadLine();
                goto Repetir;
            }
            else
            {
                break;
            }
        }
        Console.ReadLine();
        goto Menu;
    }
    catch (Exception ex)
    {
        Console.Clear();
        Console.WriteLine("Debes seleccionar una opción, escribe un número");
        Console.ReadLine();
        goto Leer;
    }
      
}

Menú:

private static void Menu()
{
    Console.Clear();
    Console.WriteLine("");
    Console.WriteLine("1 – Ingresar una nueva frase.");
    Console.WriteLine("2 – Mostrar la frase actual.");
    Console.WriteLine("3 – Contar la cantidad de letras de la frase actual.");
    Console.WriteLine("4 – Invertir frase actual.");
    Console.WriteLine("5 – ¿Es la frase actual un palíndromo?");
    Console.WriteLine("6 – Terminar el programa.");
    Console.WriteLine("");
    Console.Write("Elige una Opción: ");
}

Mostrar Totales Letras:

private static void MostrarTotalLetras(StringBuilder frase)
        {
            Console.WriteLine("El total de letras en la frase es: {0}",frase.ToString().Length);           
        }

Frase Invertida:

private static void FraseInvertida(StringBuilder frase)
{
    Console.WriteLine("Frase Invertida: {0} ",invertir(frase.ToString()));
}

Función Invertir:

private static string invertir(string frase)  
{  
    string invertido = "";
    for (int i = frase.Length - 1; i >= 0; i--)
        invertido = invertido + frase.Substring(i, 1);  
    return invertido;  
}

Determinar si es Palíndromo la frase:

 

private static void EsPalindrome(StringBuilder frase)
{
    
    string[] palabras = frase.ToString().Split(' ');
    if(verificar(0,palabras, palabras.Length) == 1)
        Console.WriteLine("la frase es palindrome...");
    else if(verificar(0,palabras, palabras.Length) == 3)
        Console.WriteLine("Inténtalo de nuevo...");
    else
        Console.WriteLine("La frase no es palindrome...");

}

Función Verificar:

public static int verificar(int pos, string[] palabra, int largo)
{
    try
    {
        //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 (1);
        }
        //si no entra al if en donde se comaparan los caracteres
        return (0);
    }
    catch (Exception ex)
    {
        Console.WriteLine("Aun no existe una frase para verificar. Primero debes ingresar una frase");
        return 3;
    }
    
}

Creo que la explicación esta de más, ademas se pueden dar una idea de que hace cada función o método si revisan el comentario del otro post.

Aquí pueden descargar el código fuente:

image

Saludos!

Nota: no hago tareas de los lectores del blog, esta ves es porque no tengo otra cosa que hacer y el asunto es relativamente sencillo.

  1. Taio
    junio 1, 2009 a las 9:49 pm

    QUE GRAAANDE!!

    Yo al final de razonarlo lo hice a mi manera… aqui te dejo mi homework!!
    Muchisimas gracias por estar!!

    using System;

    namespace OBLIGATORIO
    {
    class Program
    {

    public static void Main(string[] args)
    {

    string[] Frase={«»};
    int num = 0;
    bool palindromo=true;
    bool seguir = true;
    while (seguir)
    {
    Console.WriteLine();
    Console.WriteLine(» MENU PRINCIPAL»);
    Console.WriteLine();
    Console.WriteLine(«****************************************************»);
    Console.WriteLine(«1 – Ingresar una nueva frase»);
    Console.WriteLine(«2 – Mostrar la frase actual»);
    Console.WriteLine(«3 – Contar la cantidad de letras de la frase actual.»);
    Console.WriteLine(«4 – Invertir frase actual.»);
    Console.WriteLine(«5 – ¿Es la frase actual un palíndromo?»);
    Console.WriteLine(«6 – Terminar»);
    Console.WriteLine(«****************************************************»);
    Console.WriteLine();
    Console.Write(«Ingrese su opción: «);
    Console.WriteLine();
    int menu = Convert.ToInt32(Console.ReadLine());
    switch (menu)
    {
    case 6:
    seguir = false;
    Console.WriteLine(«Gracias por usar el programa!»);
    Console.WriteLine(«Pulsa INTRO,para salir»);
    Console.Read();
    break;
    case 1:

    Console.Write(«Escriba el Nùmero de palabras que desea introducir : «);
    num = Convert.ToInt32(Console.ReadLine());
    if (num == 0)
    {
    Console.WriteLine(«Ingrese un nùmero diferente a cero»);
    Console.ReadLine();
    }

    else
    while (num == 0) ;

    Frase = new string[num];

    for (int i = 0; i < num; i++)
    {

    Console.Write("Escribe una palabra para elemento {0}: ", i);
    Frase[i] = Console.ReadLine();

    }
    Console.Clear();
    break;
    case 2:

    Mostrar(Frase);

    break;
    case 3:
    Contar(Frase);

    break;
    case 4:
    Invertir(Frase);
    string[] Fraseinvertida = Invertir(Frase);
    for (int i = 0; i < Fraseinvertida.Length; i++)
    {
    Console.WriteLine(Fraseinvertida[i]);
    }
    Console.ReadLine();
    Console.Clear();

    break;
    case 5:
    Palindromo(Frase);
    palindromo = Palindromo(Frase);
    if (palindromo == true)
    {
    Console.WriteLine("La Frase es un Palindromo");
    Console.ReadLine();
    Console.Clear();
    }

    else
    Console.WriteLine("La Frase No es un Palindromo");
    Console.ReadLine();
    Console.Clear();
    break;

    default:
    Console.WriteLine("ERROR: ingrese opciòn del 1 al 6");
    break;

    }
    }
    }
    static void Mostrar(string[] a)
    {
    for (int i = 0; i < a.Length; i++)
    {
    Console.Write(a[i]+" ");

    }
    Console.ReadLine();
    Console.Clear();
    }

    static string[] Invertir(string[]cadena)
    {
    string[] invertido = new string [cadena.Length];
    for (int i = 0; i primero)
    {
    if (array[primero] == array[ultimo])
    {
    primero++;
    ultimo–;
    }
    else
    {
    return false;
    }
    }
    return true;
    }
    static void Contar(string[] array)
    {
    int numCaracteres = 0;
    for (int i = 0; i < array.Length; i++)
    {
    numCaracteres += array[i].Length;
    }
    Console.WriteLine("Total de caracteres es: " + numCaracteres);
    Console.ReadLine();
    Console.Clear();
    }
    }
    }

    • junio 2, 2009 a las 1:35 pm

      Taio,

      de nada amigo, ya sabes que mientras pueda estare ayudando a los lectores del blog, gracias por comentar y espero que sigas escribiendo.

      Saludos!

    • darwin
      May 3, 2010 a las 8:33 pm

      hi.. por fa me puedes ayudar explicandome linea por linea este codigo??
      #include
      #include
      #include
      #include
      void main()
      {
      clrscr();
      char num[10000],num2[10000];
      int n,x,a=0,p=0,e=0;
      char b=’ ‘;

      printf(«\ningrese un numero:»);
      gets(num);

      n=strlen(num);

      for(int u=0; u=0; x–)

      printf(«\n num:%c»,num[x]);

      x=0;

      n=strlen(num2);

      for(x=n-1; x>=0; x–)

      {
      if(num2[x]==num2[a])
      p++;
      a++;
      }

      if(p==n)

      printf(«\nel numero ingresado es un palindromo»);
      else
      printf(«\nel numero ingresado no es palindromo»);

      getche();
      }

  2. Rodrigo
    junio 12, 2009 a las 5:58 pm

    Hola, disculpa un consulta que tengo sobre esta publicacion. En la funcion invertir cuando dice primero ++ y ultimo -, que significa? Tengo dudas con esa parte. Despues todo ok. gracias saludos.!

    • junio 13, 2009 a las 1:29 pm

      Buen día Rodrigo,

      Esta es la función invertir:

      private static string invertir(string frase)
      {
      string invertido = «»;
      for (int i = frase.Length – 1; i >= 0; i–)
      invertido = invertido + frase.Substring(i, 1);
      return invertido;
      }
      me imagino que te refieres a: i–, esto es un decremento, primero pones ++ para incrementer en uno al contador, en este caso i, pero en la función invertir, comienzo el conteo desde el final de la frase al inicio por eso es i–. Espero se entiendo y sino es así no dudes en escribir.

  3. TAIO
    julio 1, 2009 a las 9:53 pm

    Exactamente estimado Norber, esa es la razòn:

    con ++, incremento dentro del array
    con — lo contrario.

    Un saludo desde Uruguay.

  4. lother
    marzo 5, 2010 a las 3:46 pm

    hola, pos nuevo en todo esto¡¡¡¡ pero me pidieron que haga lo mismo en visual basic.net netooooo en el mas facil , AUXILIO ME PUEDEN AYUDAR

    • marzo 6, 2010 a las 12:56 am

      Amigo…
      te paso un tip puedes usar el código que tengo pero conviertelo en esta página http://converter.telerik.com/
      en donde pudes convertir código de C# a VB.NET

      Saludos.!!!

  5. andrea
    enero 13, 2011 a las 1:57 am

    hola!! sera q me pueden ayudar con este programa! por faa lo necesito urgente =S .. es hacer un programa con archivos en c.. q me diga si una palabra es palindrome o no … es decir yo voy a crear un archivo con una palabra cualqiera y luego cuando yo corra el programa q me diga si la palabra q yo escribi en el archivo es palindrome o no…

    PD: las palabras palindrome son aqellas q se lean al derecho y al reves de la misma manera ejemplo radar

    gracias se lo agradezcoo por faa!!

  6. andrea
    enero 13, 2011 a las 1:59 am

    hola!! sera q me pueden ayudar con este programa! por faa lo necesito urgente =S .. es hacer un programa con archivos en c.. q me diga si una palabra es palindrome o no … es decir yo voy a crear un archivo con una palabra cualqiera y luego cuando yo corra el programa q me diga si la palabra q yo escribi en el archivo es palindrome o no…

    PD: las palabras palindrome son aqellas q se lean al derecho y al reves de la misma manera ejemplo radar

    gracias se lo agradezcoo por faa!!!!

  1. No trackbacks yet.

Deja un comentario