Underc0de

Foros Generales => Dudas y pedidos generales => Mensaje iniciado por: Noporfavor en Julio 03, 2016, 04:29:02 PM

Título: Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 03, 2016, 04:29:02 PM
Hola,
en Form1.cs [Diseno]* hice esto:

(http://i.imgur.com/y7COHUJ.png)


en Pila.cs puse este codigo:


Pila pila1;
            pila1 = new Pila();
            string cadena = textBox1.Text;
            for (int f = 0; f < cadena.Length; f++)
            {
                if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')
                {
                    pila1.Insertar(cadena.ElementAt(f));
                }
                else
                {
                    if (cadena.ElementAt(f) == ')')
                    {
                        if (pila1.Extraer() != '(')
                        {
                            Text = "Incorrecta";
                            return;
                        }
                    }
                    else
                    {
                        if (cadena.ElementAt(f) == ']')
                        {
                            if (pila1.Extraer() != '[')
                            {
                                Text = "Incorrecta";
                                return;
                            }
                        }
                        else
                        {
                            if (cadena.ElementAt(f) == '}')
                            {
                                if (pila1.Extraer() != '{')
                                {
                                    Text = "Incorrecta";
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if (pila1.Vacia())
            {
                Text = "Correcta";
            }
            else
            {
                Text = "Incorrecta";
            }
        }
    }
}


en Form1.cs* puse este codigo:


using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Pila pila1;
            pila1 = new Pila();
            string cadena = textBox1.Text;
            for (int f = 0; f < cadena.Length; f++)
            {
                if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')
                {
                    pila1.Insertar(cadena.ElementAt(f));
                }
                else
                {
                    if (cadena.ElementAt(f) == ')')
                    {
                        if (pila1.Extraer() != '(')
                        {
                            Text = "Incorrecta";
                            return;
                        }
                    }
                    else
                    {
                        if (cadena.ElementAt(f) == ']')
                        {
                            if (pila1.Extraer() != '[')
                            {
                                Text = "Incorrecta";
                                return;
                            }
                        }
                        else
                        {
                            if (cadena.ElementAt(f) == '}')
                            {
                                if (pila1.Extraer() != '{')
                                {
                                    Text = "Incorrecta";
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if (pila1.Vacia())
            {
                Text = "Correcta";
            }
            else
            {
                Text = "Incorrecta";
            }
        }
    }
}


Pero cuando quiero iniciar el programa me aparecen los siguientes errores:

(http://i.imgur.com/pWdZTqz.png)


Luego me voy a Form1.cs* en la linea 22 y adonde dice Pila le doy a mostrar posibles correcciones.
Luego le doy click a Formul.Pila.

Y me aparece este error que no lo puedo sacar:

(http://i.imgur.com/jc46HL1.png)


Alguien me puedo ayudar?

Gracias y saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: blackdrake en Julio 03, 2016, 04:51:42 PM
Las imágenes están caidas, puedes resubirlas?

Un saludo.
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 03, 2016, 05:23:42 PM
Además no creo que el código de Pila.cs sea el que has subido. Ese es el código para manejar el evento click de button1.
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 04, 2016, 08:09:52 AM
Listo; ahi las resubi
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 04, 2016, 10:01:36 AM
¿Qué procedimiento has seguido para crear el proyecto?

El primer error me dice que NO has creado un proyecto "Windows Forms Application".

Cuando creas un proyecto tipo "Windows Forms Application", la plantilla crea, entre otras cosas, un archivo Program.cs que contiene este código:

Código (csharp) [Seleccionar]

using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using System.Windows.Forms;

namespace WindowsFormsApplication1
{
    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
        }
    }
}


Toda aplicación C# tiene un método static void Main, y el primer error señala esto.

Se supone que en Pila.cs tienes una clase. No tienes definida ninguna clase Pila. Eso son los dos últimos errores.
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 04, 2016, 05:22:45 PM
Hola grep,

gracias por avisarme esto. Debi hacer primero una clase para Pila.cs.

Pero ya que estas tengo una duda en este programa. En el codigo Form1.cs esta escrito:


using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Windows.Forms;

namespace Formula
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Pila pila1;
            pila1 = new Pila();
            string cadena = textBox1.Text;
            for (int f = 0; f < cadena.Length; f++)
            {
                if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')
                {
                    pila1.Insertar(cadena.ElementAt(f));
                }
                else
                {
                    if (cadena.ElementAt(f) == ')')
                    {
                        if (pila1.Extraer() != '(')
                        {
                            Text = "Incorrecta";
                            return;
                        }
                    }
                    else
                    {
                        if (cadena.ElementAt(f) == ']')
                        {
                            if (pila1.Extraer() != '[')
                            {
                                Text = "Incorrecta";
                                return;
                            }
                        }
                        else
                        {
                            if (cadena.ElementAt(f) == '}')
                            {
                                if (pila1.Extraer() != '{')
                                {
                                    Text = "Incorrecta";
                                    return;
                                }
                            }
                        }
                    }
                }
            }
            if (pila1.Vacia())
            {
                Text = "Correcta";
            }
            else
            {
                Text = "Incorrecta";
            }
        }
    }
}


Y mi duda estaba a donde dice:

if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')


De donde viene el ElementAt? Y que significa esto junto con (f)?

Gracias y saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 05, 2016, 01:27:53 AM
No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
De donde viene el ElementAt?

ElementAt es un método que se puede llamar en cualquier objeto tipo string.

Como la variable cadena referencia a un string, entonces puedes hacer cadena.ElementAt(<posición>)

No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Y que significa esto junto con (f)?

Como ElementAt es un método, la forma de llamar a este método es <objeto>.ElementAt(<algo que el método necesite como entrada>).

ElementAt devuelve un caracter tipo char, este caracter es el que se encuentra en la posición indicada por parámetro. Entonces, como el parámetro es el valor de la variable f, si suponemos que f es igual a 0 y cadena es igual a "(Hola Mundo)", cadena.ElementAt(f) == '(' es como decir: ¿El caracter que se encuentra en la posición 0 del string "(Hola Mundo)" es igual al caracter '(' ?.

En un string las posiciones de los elementos comienzan en cero. El caracter de la posición cero de "(Hola Mundo)" es '(', y el caracter de la posición cuatro es 'a', etc.

Saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 05, 2016, 08:57:36 AM
Citar
ElementAt devuelve un caracter tipo char, este caracter es el que se encuentra en la posición indicada por parámetro. Entonces, como el parámetro es el valor de la variable f, si suponemos que f es igual a 0 y cadena es igual a "(Hola Mundo)", cadena.ElementAt(f) == '(' es como decir: ¿El caracter que se encuentra en la posición 0 del string "(Hola Mundo)" es igual al caracter '(' ?.

Ok, ( se encuentra en la posicion 0. Pero no se puede decir lo mismo de [ y {. Sin embargo se pregunta lo mismo. Tiene sentido? Cual?

Gracias y saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 05, 2016, 01:24:40 PM
La condición es la siguiente:

cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{'

|| es un operador lógico que se lee como un OR u O. El mismo determina si el resultado final es True o False.

Si alguna de las tres comparaciones retorna True, entonces el resultado final es True. Pero si las tres comparaciones retornan False, el resultado final es False.


No tienes permitido ver los links. Registrarse o Entrar a mi cuenta
Tiene sentido? Cual?

El sentido lo tiene el programador, esto es algo subjetivo.

En este caso el programa hará lo que se encuentra en el cuerpo del if (la sentencia pila1.Insertar(cadena.ElementAt(f)); ) si en una determinada posición existe un símbolo ( o un [ o un {.
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 05, 2016, 02:36:49 PM
Ok grep,
pero visto esto, que funcion cumple (f) en esta linea?:
if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')

Eso me cuesta entender.

Gracias y saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 05, 2016, 02:48:48 PM
La variable f contiene un valor. Este valor es un entero.

El método ElementAt requiere un entero como parámetro. Este valor es copiado desde f al hacer ElementAt(f).

Como tienes un for (int f = 0; f < cadena.Length; f++) entonces tienes varias iteraciones con f igual a 0, 1, 2, 3, 4, etc.. hasta cadena.Length.
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 05, 2016, 03:31:13 PM
Ahhhhh
Y en esta formula por ejemplo: (2+[3-12]*{8/3})
Aqui cadena.Lenght es igual a 16?

Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 05, 2016, 03:45:13 PM
Correcto,

pero como la condición del for es f < cadena.Length, cuando f sea 16, ya no se ejecutará el bloque.

Saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 05, 2016, 03:59:02 PM
Pero hay una cosa que no entiendo. Mira:
for (int f = 0; f < cadena.Length; f++)

f ya empieza con 0. No es, entonces, imposible que ( este en la posicion 0?

Saludos
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: grep en Julio 05, 2016, 04:10:12 PM
Lee atentamente,

las posiciones en un string comienzan en cero.

"HOLA" tiene 'H' en su posicion cero, y 'A' en su posición tres. Pero "HOLA".Length es igual a 4.
Título: Re:Estructuras dinámicas: Listas tipo Pila - Problema de aplicación - C# - Error
Publicado por: Noporfavor en Julio 06, 2016, 06:41:48 AM
Ahhh, osea que por ejemplo en esta formula: (2+[3-12]*{8/3})

La primera vuelta de la estructura repititiva for; el ( pasa por esta linea:
if (cadena.ElementAt(f) == '(' || cadena.ElementAt(f) == '[' || cadena.ElementAt(f) == '{')

Correcto?