Árboles de expresiones aritméticas La forma habitual de escribir operaciones aritméticas es situar el operador entre sus dos operandos con la citada notación infija. Esta forma de notación obliga en muchas ocasiones a utilizar paréntesis para indicar el orden de la evaluación A*B/(A+C) A*B/A+C La notación en la que el operador se coloca delante de los operadores, notación prefija, se conoce como notación polaca (En honor del matemático polaco que la estudió). A*B/(A+C) (infija) A*B/+AC *AB/+AC /*AB+AC (polaca) Podemos observar que no es necesaria la utilización de paréntesis al escribir la expresión en notación polaca. La propiedad fundamental de la notación polaca es que el orden en que se van a realizar las operaciones está determinado por las posiciones de los operadores y los operandos en la expresión. Otra forma de escribir las operaciones es mediante la notación postfija o polaca inversa que coloca el operador a continuación de sus operandos A*B/(A+C) (infija) A*B/AC+ AB*/AC+ AB*AC+/ (polaca inversa) Su tarea es escribir un programa que a partir de la notación infija, polaca y polaca inversa dibuje el árbol binario correspondiente a la expresión utilizando btreepic (8pts). Ejemplo: Dada la expresión:
Infija = (3*x^2+2*x*y^2+8*y^3)/(8*x^3+3*x^2*y^2) Polaca = /++*3^x2**2x^y2*8^y3+*8^x3**3^x2^y2 Polaca inversa = 3x2^*2x*y2^*+8y3^*+8x3^*3y2^*y2^*+/ El árbol binario correspondiente es:
Al dibujar el árbol se debe mostrar por consola la altura del árbol, la longitud del camino interno y la cardinalidad (4pts). Una vez que se halla construido el árbol binario a partir de el genere un archivo de texto con la notación de Deway para el árbol m-ario correspondiente a la expresión aritmética (8pts). Ejemplo: para el árbol anterior, el correspondiente m-ario es:
Obs: para llevar de el binario al m-ario, basta con ignorar hijos que sean operadores y que tengan el mismo valor que el padre, en cuanto al descenso de nivel. Formato de la entrada Ejemplo:
Formato de la salida: Aparte del dibujo utilizando btreepic y las salidas por consola, se debe generar un archivo de salida que contenga la notación de Deway del árbol m-ario correspondiente: Ejemplo
Reto:
pero si comparten las subexpresiones comunes, se tendría algo como:
Desarrolle una función que modifique la estructura de la representación de un árbol de expresiones, utilizando la idea anunciada anteriormente. |
||
|