Vous êtes sur la page 1sur 6

MSC.

Adalid Acevedo Martnez

PILAS: PROGRAMA DE LA CALCULADORA.

Explicacin General

Una pila es una lista de elementos en la cual un elemento solo puede ser insertado o eliminado por un extremo, llamado la cima de la pila. En particular, esto significa que los elementos se sacan de la pila en orden inverso al que se insertaron en el. Se utiliza una terminologa especial para las dos operaciones bsicas asociadas a las pilas: (a) <<Meter>> es el termino utilizado para insertar un elemento en la pila. (b) <<Sacar>> es el termino utilizado para eliminar un elemento de la pila. Procedimiento: METER(pila, cima, maxpila, item) Este procedimiento mete un item en una pila. 1. [pila ya llena?] Si cima =maxpila, entonces:imprimir : desbordamiento y volver. 2. Hacer cima:=cima+1.[incrementar en 1 cima]. 3. Hacer pila[cima]:=item.[insertar item en la nueva posicion de cima]. 4. Volver. Procedimiento SACAR(pila, cima, item) Este procedimiento elimina el elemento en la cima de pila y lo asigna a la variable item. 1.[la pila tiene un elemento para eliminar?] Si top=0, entonces: imprimir: subdesbordamiento y volver. 2.Hacer item:=pila[cima]. [asignar el lemento cima a item]. 3.hacer cima:=cima-1.[decrementar en 1 cima]. 4.volver.

MSC. Adalid Acevedo Martnez

Algoritmo

1.- Pedir los datos (numero y operadores incluyendo parntesis ) // se almacena en un arreglo Q [limite]. 2.- Convertir arreglo a postfijo // se almacena en otro arreglo P [limite]. POLACA (Q, P). Suponemos que Q es una expresin aritmtica escrita en notacin infija. Este algoritmo encuentra la expresin postfija P equivalente. 2.1Meter <<)>> al final de Q. Meter (a la Pila 2.2Examinar Q de izquierda a derecha y repetir paso 3 a 6 para cada elemento de Q hasta que PILA este vaca: 2.3Si se encuentra un operando, aadir a P. 2.4Si se encuentra un parntesis izquierdo, meterlo en PILA. 2.5Si se encuentra un operador , entonces: (a) Repetidamente sacar de PILA y aadir a P cada operador (de lo alto de PILA) que tenga la misma precedencia o mayor que . (b) Aadir a PILA. [Fin del condicional]. 2.6Si se encuentra un parntesis derecho, entonces: (a) Repetidamente sacar de PILA y aadir a P cada operador (de lo alto de PILA) hasta que se encuentre un parntesis izquierdo. (b) Eliminar el parntesis izquierdo. [No aadir el parntesis izquierdo a P]. [fin del condicional]. [fin del bucle del paso 2]. 2.7Salir.

MSC. Adalid Acevedo Martnez 3.- Evaluar expresin postfija. Este algoritmo encuentra el VALOR de una expresin aritmtica P escrita en notacin postfija. 3.1 Aadir un parntesis derecho <<)>> al final de P. [Acta como centinela]. 3.2Examinar P de izquierda a derecha y repetir pasos 3 y 4 para cada elemento de P hasta que se encuentra el centinela <<)>>. 3.3Si se encuentra un operando, ponerlo en PILA. 3.4Si se encuentra un operador , entonces: (a) Sacar los dos elementos superiores de PILA, donde A sea el elemento superior y B el siguiente. (b) Evaluar B A. (c) Poner el resultado de (b) en PILA. [fin del condicional]. [fin del bucle del paso 2]. 3.5Hacer VALOR igual al elemento superior de PILA. 3.6Salir. 4.- Desplegar resultado. 5.- Fin.

MSC. Adalid Acevedo Martnez

Diagrama de Flujo

Modulo polaca: 3 inicio

Q, P

Puhs(pila,)) Q=(

tope!=NULO && Q!=NULO

V F

Isdigit

(Q[conti])!=F

V
Q[contp]=Q[conti];contp+

+;

P[conti]=='('

F V push(&tope,'(') ; 1

MSC. Adalid Acevedo Martnez

Q[conti]!=')'

F V F 6

tope!=NULO && Q!

V P[contp]=pop(&tope); contp++;

F push(&tope,Q[conti]);

P[conti]=='('

F V F

dato=pop(tope) !='('

V
expr_posf[contp]=dato; contp++;

F 5

MSC. Adalid Acevedo Martnez

6 4

conti++ ;
longi=strlen(P);

P[longi]=Tierra ; 3 fin

Vous aimerez peut-être aussi