calculadora por jerarquia ()*/+- ...C#...

Iniciado por clipto, 30 Julio 2009, 05:41 AM

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

h0oke

CitarUna pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Se aplica en multitud de ocasiones en informática debido a su simplicidad y ordenación implícita en la propia estructura.
Representación gráfica de una pila

Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.

A eso me refería.

Citares un reto??? xD

Yo también lo vi de esa manera.

Este tema, lo había analizado en VB, y cobein me recomendó lo de la pila.

Un saludo!

raul338

Cita de: Seu¥ en 31 Julio 2009, 01:46 AM
CitarUna pila (stack en inglés) es una lista ordinal o estructura de datos en la que el modo de acceso a sus elementos es de tipo LIFO (del inglés Last In First Out, último en entrar, primero en salir) que permite almacenar y recuperar datos. Se aplica en multitud de ocasiones en informática debido a su simplicidad y ordenación implícita en la propia estructura.
Representación gráfica de una pila

Para el manejo de los datos se cuenta con dos operaciones básicas: apilar (push), que coloca un objeto en la pila, y su operación inversa, retirar (o desapilar, pop), que retira el último elemento apilado.


A eso me refería.

Entonces si, es la clase generica xD

Cita de: Seu¥ en 31 Julio 2009, 01:46 AM
Citares un reto??? xD

Yo también lo vi de esa manera.

Este tema, lo había analizado en VB, y cobein me recomendó lo de la pila.

Un saludo!
Yo tengo que hacerlo en vb.net (que es en donde lo necesito para el proyecto que estoy haciendo). Pensaba hacerlo de esta manera

1- Dividir por terminos (a travez de una o tres expresiones regulares) dividir llaves, corchetes, parentesis; multiplicacion y division; suma y resta

2 - Analizar las ecuaciones ( yo lo necesito, pero no ecuaciones con X, sino con palabras claves, ej: A200 seria un valor que ya tengo en una tabla)

3 - Resolver la ecuacion mas "baja" (la que se debe resolver primero xD) y de ahi ir subiendo...


se entiende??? xD despues planteo codigo

h0oke

CitarDividir por terminos (a travez de una o tres expresiones regulares) dividir llaves, corchetes, parentesis; multiplicacion y division; suma y resta

Exacto, solo hace falta saber matemáticas. Comienzas a recorrer la pila, ten en cuenta que el primero es el último, {} luego []  () ... / * ... + y - , y mientras recorres lo resuelves.

Ahora con respecto a lo de ecucaciones, si unicamente son valores que están en una tabla, no es muy difícil, si en realidad son ecuaciones, tendrás que recurrir a métodos para averigurar la complejidad de dicha ecucación y utilizar algún método de algebra avanzada para hacer eficiente tu programa, hace un tiempo hice un programa en Pascal para resolver ecuaciones por el método de Gauss, pero luego perdí el código.

Un saludo!

raul338

Cita de: Seu¥ en 31 Julio 2009, 01:58 AM
CitarDividir por terminos (a travez de una o tres expresiones regulares) dividir llaves, corchetes, parentesis; multiplicacion y division; suma y resta

Exacto, solo hace falta saber matemáticas. Comienzas a recorrer la pila, ten en cuenta que el primero es el último, {} luego []  () ... / * ... + y - , y mientras recorres lo resuelves.

No entiendo como lo harias con una pila  :-\

h0oke

Una pila, es simplemente una lista o array.

Es como si tendrías esto:

{'(','1','+','3',')'};

El primer dato a analizar será ')'.

Espero no estar equivocado.

raul338

Cita de: Seu¥ en 31 Julio 2009, 02:36 AM
Una pila, es simplemente una lista o array.

Es como si tendrías esto:

{'(','1','+','3',')'};

El primer dato a analizar será ')'.

Espero no estar equivocado.

estas bien, y si eso lo se, pero no entiendo la logica de analizar una pila xD

h0oke

Que en la pila no tendrás una limitación de compilación, sino la tendrás cuando estés dentro del programa; por algo es una ventaja del programador trabajar con memoria dinámica. No se trata de lógica, sino de aprovechar los recursos de una pc, es simplemente un "array dinámico".

fuenteRea

pila, lista, cola, arboles etc, son lo mismo.

pila--> El ultimo elemento que entra es el primero en salir. Ejemplo

apliar(2);
apliar(3);
apliar(4);
en la pila tenemos 4-3-2
si quieremos mostrar los elementos de la pila mostraremos el 4 luego el 3 y luego el 2.

lista es lista y punto jaja

cola--> El ultumo que entra es el ultimo en salir (como en la cola del cine, por orden de entrada).

encolar(2);
encolar(3);
encolar(4);
en la cola la tenemos 2-3-4
si quieremos mostrar los elementos de la pila mostraremos el 4 luego el 3 y luego el 2.

Lo bueno de las pilas es que te permite usar recusividad muy facilmente. Al contrario que la cola.

un saludo!!º
Una rosa es una rosa...

h0oke

Cita a wikipedia:

CitarEn programas de aplicación escrito en un lenguaje de alto nivel, una pila puede ser implementada de manera eficiente, ya sea usando vectores o listas enlazadas.

CitarExpresión de evaluación y análisis sintáctico sintaxis

Se calcula empleando la notación polaca inversa utilizando una estructura de pila para los posibles valores. Las expresiones pueden ser representadas en prefijo, infijo, postfijo. La conversión de una forma de la expresión a otra forma necesita de una pila. Muchos compiladores utilizan una pila para analizar la sintaxis de las expresiones, bloques de programa, etc. Antes de traducir el código de bajo nivel. La mayoría de los lenguajes de programación son de contexto libre de los idiomas que les permite ser analizados con máquinas basadas en la pila.

Por ejemplo, el cálculo: ((1 + 2) * 4) + 3, puede ser anotado como en notación postfija con la ventaja de no prevalecer las normas y los paréntesis necesarios:

1 2 + 4 * 3 +

La expresión es evaluada de izquierda a derecha utilizando una pila:

    * Apilar cuando se enfrentan a un operando y
    * Desafilar dos operandos y evaluar el valor cuando se enfrentan a una operación.
    * Apilar el resultado.

Espero que eso aclare las dudas  ;)

raul338

thedoctor77 se usar estructuras de datos.


Lo que no entendia la logica de las pilas. Pero hay un error jeje..... que pasa si yo meto para calcular 6 + (8 + 3) - [6 * (3 + 2) + 5] * (2 * 10 / 5) + (5 * ((2 * 6) + 2)

habria que ordenarlos, xq de la forma que emplea Seu¥ creo que no funcionaria porque no esta ordenada