Aplicacion de Consola C# - Programa Pilas

Iniciado por Castiel, 8 Febrero 2015, 04:08 AM

0 Miembros y 1 Visitante están viendo este tema.

Castiel

Buenas noches solicito su ayuda con la siguiente compilación, soy nuevo y me trabe en la solución del siguiente código, alguien que guste ayudar a este servidor.

Necesito modificar el siguiente código para que haga lo siguiente, no se que sintaxis seria la mas adecuada para modificar el código necesario para que, al ejecutarse el programa, solicite continuamente la captura de un valor que será insertado en la pila hasta que el usuario ya no desee continuar con dicho registro segun yo este es mi avance, saludos.

Código (C#) [Seleccionar]
using System;
using System.Collections;
using System.Text;

namespace Pilas
{
   class Program
   {
       static void Main(string[] args)
       {
           // Variables necesarias
           int opcion = 0;
           string valor = "";
           int numero = 0;
           bool encontrado = false;

           // Creamos el stack
           Stack miPila = new Stack();
           do
           {
               // Mostramos menu
               Console.WriteLine("1- Push");
               Console.WriteLine("2- Pop");
               Console.WriteLine("3- Clear");
               Console.WriteLine("4- Contains");
               Console.WriteLine("5- Salir");
               Console.WriteLine("Dame tu opcion");
               valor = Console.ReadLine();
               opcion = Convert.ToInt32(valor);
               switch (opcion)
               {
                   case 1:
                       // Pedimos el valor a introducir
                       Console.WriteLine("Dame el valor a introducir");
                       valor = Console.ReadLine();
                       numero = Convert.ToInt32(valor);
                       // Adicionamos el valor en el stack
                       miPila.Push(numero);
                       break;
                   case 2:
                       // Obtnemos el elemento
                       numero = (int)miPila.Pop();
                       // Mostramos el elemento
                       Console.WriteLine("El valor obtenido es: {0}", numero);
                       break;
                   case 3:
                       // Limpiamos todos los contenidos del stack
                       miPila.Clear();
                       break;
                   case 4:
                       // Pedimos el valor a encontrar
                       Console.WriteLine("Dame el valor a encontrar");
                       valor = Console.ReadLine();
                       numero = Convert.ToInt32(valor);
                       // Vemos si el elemento esta
                       encontrado = miPila.Contains(numero);
                       // Mostramos el resultado
                       Console.WriteLine("Encontrado - {0}", encontrado);
                       break;
                   default:
                       Console.WriteLine("No existe opción intente de nuevo");
                       break;
               }
               // Mostramos la informacion del stack
               Console.WriteLine("La pila tiene {0} elementos", miPila.Count);
               foreach (int n in miPila)
                   Console.Write(" {0},", n);

               Console.WriteLine("");
               Console.WriteLine("————");
           } while (opcion != 5);
       }
   }
}


Espero su Valiosa y Pronta Ayuda

El Benjo

¿Exactamente en qué estás atorado o qué parte de tu código no funciona?

Echando un vsitazo rápido al código te puedo decir que así como lo tienes, cuando elijas la opción número 5 te va salir el mensaje diciendo que ese comando no existe. Para evitar eso coloca un case: 5 que no haga nada.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Castiel

Hola mi estimado, buenos días.

Bueno creo que no me explique bien sorry, mi código funciona y corre bien pero solo esta limitado que debería modificar o agregar a la compilación para que solicite continuamente la captura de un valor que sera insertado en la pila hasta que el usuario ya no desee continuar.

Espero me apoyes saludos.

El Benjo

Veamos, me tardé tiempo en entender lo que quieres y tuve que leer varias veces el emnsaje, pero creo que ya sé lo que es.

Lo que quieres es que cuando el usuario seleccione la primera opción se capturen datos hasta que el usuario introduzca el presione cierta tecla (como una tecla de control) para no capturar más, ¿cierto? Si es así entonces creo que tu primer case quedaría algo así como:

Código (csharp) [Seleccionar]
case 1:
                        // Pedimos el valor a introducir
                        Console.WriteLine("Dame el valor a introducir");
  do{
valor = Console.ReadLine();
if(Int32.TryParse(valor, out numero))
// Adicionamos el valor en el stack si es un número.
   miPila.Push(numero);
   } while(valor != "a");
                        break;


En este caso si el usuario introduce el caracter 'a' entonces deja de capturar los datos. También te dejé la conversión mediante el TryParse() de esta manera no te dará excepciones cuando el usuario ingrese un dato que no puede ser convertido a int32.

Espero que sea eso lo que querías. Saludos
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Castiel

Que tal mi estimado Benjo, ya aplique la parte correspondiente que me comentas sobre el caso 1, deje intactos los demás casos solo modifique el 1er. caso pero al depurarlo y elegir una opción por ejemplo la de introducir un valor del caso 1, no me permite hacer nada mas  y no me pregunta si deseo introducir mas valores a la pila, que estaría fallando entonces.

Quedo al pendiente de tus comentarios.

El Benjo

Eso es porque (como te explico en el comentario anterior) lo que ese código hace es un bucle donde se ingresan valores hasta que el usuario ingrese únicamente la letra 'a'. Es decir que cada que ingresas un valor y das 'Enter' ese valor se va guardando en la pila (o sea que sigue capturando) si ya no quieres que se guarden valores en la pila entonces en vez de introducir un número introduces la letra 'a'. Cuando haces esto, de nuevo aparece el menú. ¿No es eso lo que querías que hiciera? ¿Qué es entonces? La tecla o combinación de teclas para que salga la puedes modificar en la parte del while(). Venga que no es nada complicada la parte del código que te modifiqué. Échale un vistazo y tú mismo verás por qué hace lo que hace. Saludos, y si todavía no funciona como esperas, dinos que para eso andamos por aquí, pero intenta explicar bien qué es lo que quieres.
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

Castiel

Ok Gracias Benjo, lo revisare, olvide revisar detalladamente lo de la letra, sorry.
Los demás casos se integran como tal verdad, solo es modificar el case 1, estoy en ello checando la compilación.

Nuevamente muchas grax, saludos.

Castiel

Hola mi estimado Benjo

Nuevamente yo dando lata, te comento lo siguiente en cuanto a la compilación, ahora si para rectificar lo que se solicita hacer en el código, por aquello de si no me supe explicar, te comento lo que se requiere y me comentas si es así es como se tiene que dar solución a las respectivas modificaciones:

Se requiere modificar el código para dar solución a el requerimiento de permitir ingresar más datos a la pila incluyendo la funcionalidad de permitir al usuario que indique en que momento terminar de agregar datos a la pila, Osea lo que se pide es que el usuario ingrese datos a la pila indefinidamente, hasta que llegue el momento en donde decida que ya no desea ingresar, mas datos.

Ahora si con objeto de rectificar si se esta llegando a la solución esperada, por medio de dicha sintaxis.

Saludos cordiales.

El Benjo

Hola, para es es el foro (para dar lata XD). Me supongo que los datos se ingresarán indefinidamente cuando se presione la opción 1. Si es así, entonces el código que te puse en el segundo comentario que hice te funciona para eso. Fíjate bien en la manera en que pide datos de forma indefinida y cuál es la condición que hace que deje de pedirlos. De esta manera tú podrás modificar el código para adaptarlo y hacer que el usuario deje de ingresar datos de acuerdo a la condición que tú pongas.

Un saludo, y la próxima vez postea el código que tienes modificado. (Para comprobar que estás haciendo algo por tu cuenta. Recuerda que el foro no es para hacerle la tarea a nadie)
www.es.neftis-ai.com

Sí hay un mejor lenguaje de programación y es ese con el que puedes desarrollar tus objetivos.

bOrregOtheDemon

Buenas Tardes Amigos
Yo tengo otro tipo de codigo.........., y se supone que debe de hacer #Solicite continuamente la captura de un valor que será insertado en la pila hasta que el usuario ya no desee continuar con dicho registro y Extraiga elementos de la Pila en la medida que el usuario indique y que proporcione retroalimentación para cuando no existan #
Me podrian indicar en donde esta mal
Gracias Saludos
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

namespace Pila
{
    class Pila
    {
        class Nodo
        {
            public int info;
            public Nodo sig;
        }

        private Nodo raiz;

        public Pila()
        {
            raiz = null;
        }

        public void Insertar(int x)
        {
            Nodo nuevo;
            nuevo = new Nodo();
            nuevo.info = x;
            if (raiz == null)
            {
                nuevo.sig = null;
                raiz = nuevo;
            }
            else
            {
                nuevo.sig = raiz;
                raiz = nuevo;
            }
        }

        public int Extraer()
        {
            if (raiz != null)
            {
                int informacion = raiz.info;
                raiz = raiz.sig;
                return informacion;
            }
            else
            {
                return int.MaxValue;
            }
        }

        public void Imprimir()
        {
            Nodo reco = raiz;
            Console.WriteLine("Listado de todos los elementos de la pila.");
            while (reco != null)
            {
                Console.Write(reco.info + "-");
                reco = reco.sig;
            }
            Console.WriteLine();
        }

        static void Main(string[] args)
        {
            Pila pila1 = new Pila();
            pila1.Insertar(10);
            pila1.Insertar(40);
            pila1.Insertar(3);
            pila1.Imprimir();
            Console.WriteLine("Extraemos de la pila:" + pila1.Extraer());
            pila1.Imprimir();
            Console.ReadKey();
        }
    }
}