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

1 06 2009

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í:

http://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.


Acciones

Información

5 respuestas

1 06 2009
Taio

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

2 06 2009
norber

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!

12 06 2009
Rodrigo

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.!

13 06 2009
norber

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.

1 07 2009
TAIO

Exactamente estimado Norber, esa es la razòn:

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

Un saludo desde Uruguay.

Deja un comentario