Vous êtes sur la page 1sur 3

Ejercicio 1 Pilas

Una aplicacin muy tpica es verificar que una expresin matemtica


contiene parntesis emparejados.

Por ejemplo, los parntesis de la siguiente expresin:

2 (3 * (8 - (7 - 5)) 4 * (5 + 1))

estn emparejados, porque cada parntesis abierto tiene un parntesis de


cierre correspondiente y posterior a l, y adems no existen parntesis
abiertos o cerrados sin pareja correspondiente.

El modo de comprobar cundo una expresin contiene los parntesis


correctos es recorrerla de izquierda a derecha: segn se encuentran
parntesis de cierre ), se encajan con el ultimo parntesis abierto (
encontrado en la expresin y an no emparejado. Los parntesis estn
bien emparejados si:

a) Cada vez que se encuentra un ), hay an un ( no emparejado


previo.
b) Cuando alcanza el final de la expresin, se han emparejado
todos los (.

La solucin requiere memorizar los parntesis de apertura y descartar


uno cada vez que se encuentra uno de cierre. De este modo es muy fcil
hacerlo utilizando una pila.

Disear el programa teniendo en cuenta que la expresin matemtica que


hay que comprobar si es o no correcta con respecto a sus parntesis es
introducida por teclado como un dato de tipo String.

Para la solucin del ejercicio podeis usar los mtodos:

char charAt( int posicion)

public String substring(int inicio, int fin)


Ejercicio 2 Pilas
Otra aplicacin muy tpica es la de calcular el valor de una expresin
matemtica, pero esta aplicacin en la notacin habitual (notacin infija)
tiene sus complicaciones por lo que en este ejercicio vamos a utilizar
otra de las notaciones de las expresiones matemticas que es ms
sencilla de aplicar que es la notacin postfija que tiene la ventaja de no
necesitar parntesis y de que su evaluacin es ms sencilla que la de las
expresiones en la notacin infija.

Se pide disear un programa que lea una expresin matemtica en


notacin postfija desde el teclado y donde los operandos introducidos
sern valores enteros de un solo digito del 1 al 9 y los operadores
cualquiera de los que poseen las expresiones matemticas (+ - * /).

El mtodo que deberemos aplicar para resolver el problema de evaluar


dicha expresin consistir en utilizar una pila siguiendo las indicaciones
que se especifican a continuacin:

Se lee la expresin de izquierda a derecha. Si se encuentra un operando este se


introduce en la pila. Si es un operador se extraen de la pila los operandos necesarios y se
evala dicha operacin, almacenndose el valor resultante en la pila. Si la expresin es
correcta el valor de la expresin matemtica aparecer como nico elemento de la pila al
terminar el proceso de la expresin en notacin postfija introducida por el teclado.

Ejemplo:
Suponiendo que la expresin a evaluar fuese

(1 + 4 / 2) * (3 1 * 6)

su notacin postfija introducida en el programa seria:

142 /+316*-*

public char charAt(int indice)


public String substring(int inicio, int fin)
public class EvaluarExpresion
{
public static void main(String[] args)
{
String expresion;
char smbolo;
Integer operando, op1, op2;
int resultado;

System.out.println("Introduzca una expresin: ");


expresion = Utilidades.leerCadena();

Pila pOperandos = new Pila();

for (int i=0; i < expresion.length(); i++)


{
simbolo = expresion. charAt(i);
if ( simbolo >= 1 && simbolo <= 9)
{
operando = Integer.valueOf(expresion.substring(i, i));
pOperandos.push(operando);
}
else
{
op2 = (Integer) pOperandos.pop();
op1 = (Integer) pOperandos.pop();

switch(simbolo)
{
case + : resultado = op1.intValue() + op2.intValue();
break;
case - : resultado = op1.intValue() - op2.intValue();
break;
case * : resultado = op1.intValue() * op2.intValue();
break;
case / : resultado = op1.intValue() / op2.intValue();
break;
}
operando = new Integer.(resultado);
pOperandos.push(operando);
}
}
operando = (Integer) pOperandos.pop();
resultado = operando.intValue();
System.out.println("El valor de la expresin es : " + resultado);
}

Vous aimerez peut-être aussi