Professional Documents
Culture Documents
PRCTICA N 6: 2 sesiones
(del 12 de mayo al 23 de mayo de 2003)
2. 3. 4. 5. 6.
Visualizar la expresin introducida en notacin prefija. Ejemplo: + * 2 3 / 9 3 Visualizar la expresin introducida en notacin infija. Ejemplo: 2 * 3 + 9 / 3 Visualizar la expresin introducida en notacin postfija. Ejemplo: 2 3 * 9 3 / + Evaluar la expresin y mostrar el resultado en pantalla. Ejemplo: 2 * 3 + 9 / 3 = 9 Generar cdigo ensamblador por pantalla. Por ejemplo para la expresin: 42 * 7 + 2 / 3 se visualizar el siguiente cdigo: div 2 3 tmp2 mul 42 7 tmp3 add tmp3 tmp2 tmp1 Mostrar informacin del rbol binario:
7.
Altura del rbol. Si un rbol est vaco su altura es cero, y si no est vaco su altura es uno ms el mximo de las alturas de cada uno de sus hijos. Ejemplo: 3 Nmero de hojas del rbol. Si un rbol est vaco su nmero de hojas es cero. Si no est vaco, hay dos posibilidades, que el rbol sea una hoja en cuyo caso vale 1, o que no lo sea por lo que se sumarn las hojas que tenga el hijo izquierdo y el hijo derecho. Ejemplo: 4 Nmero de nodos del rbol. Si un rbol est vaco el nmero de nodos que tiene es cero, y si no lo est el nmero de nodos es 1 ms la suma de nodos del hijo izquierdo ms los del hijo derecho. Nmero de nodos internos del rbol. Se calcula restando al nmero de nodos el nmero de hojas. Indica si el rbol est lleno o no. Un rbol est lleno si el nmero de nodos es igual a 2^altura-1. 2. REALIZACIN DE LA PRCTICA En esta prctica se debe implementar la clase rbol binario mediante punteros, que se ha visto en clase de teora, y la clase pila utilizada en la tercera prctica. La informacin que almacenen ambas sern cadenas.
1/2
typedef string Valor; class Arbol { private: typedef Arbol *PunteroArbol; bool esvacio; Valor info; PunteroArbol izdo; PunteroArbol dcho; public: Arbol (void); /*Constructor*/ Arbol (const Arbol &); /*Constructor de copia*/ ~Arbol(void); /*Destructor */ void HacerArbol(Arbol &, Valor, Arbol &); bool ArbolVacio(void); bool Informacion (Valor &); Arbol &HijoIzdo(void); Arbol &HijoDcho(void);
};
class Pila { private: ... public: Pila bool bool bool bool };
La generacin del rbol binario se realizar en dos pasos como se indica en los apuntes: 1. Primero se traduce la expresin a notacin postfija mediante dos pilas, quedando la expresin algebraica en una de ellas. 2. Posteriormente se genera el rbol binario. Se realizar un programa ##Expresiones.cpp que permita evaluar expresiones introducidas por teclado y el resto de opciones indicadas en el men. Este programa trabajar con objetos de la clase ArbolBinario y Pila. La generacin de cdigo ensamblador se puede hacer mediante una funcin recursiva que en el caso de ser un operador visualiza: la operacin, la variable temporal obtenida al generar cdigo para la rama izquierda y la variable temporal obtenida al generar cdigo para la rama derecha y la variable temporal, y finalmente retorna la variable temporal. Si no es un operador retorna la informacin que contiene el nodo. 3. ENTREGA DE PROGRAMAS Los siguientes ficheros se podrn entregar al profesor hasta el comienzo de la siguiente sesin de prcticas: 1. Ficheros de la clase Pila (##Pila.cpp y ##Pila.h). 2. Ficheros de la clase ArbolBinario (##ArbolBinario.cpp y ##ArbolBinario.h). 3. Fichero con el programa principal (##Expresiones.cpp).