Documenti di Didattica
Documenti di Professioni
Documenti di Cultura
Ejercicios
20.6 Escriba un programa para concatenar dos objetos de lista enlazada de caracteres. El programa deberá incluir la función
concatenar, que reciba referencias a ambos objetos lista como argumentos y que concatene la segunda lista con la primera.
20.7 Escriba un programa para combinar dos objetos de lista ordenada de enteros en un solo objeto de lista ordenada de
enteros. La función combinar debe recibir referencias a cada uno de los objetos lista que se van a combinar, y debe devolver una
referencia a objeto lista en el que se colocarán los elementos combinados.
20.8 Escriba un programa para insertar 25 enteros aleatorios de 0 a 100 en orden, en un objeto lista enlazada. El programa
deberá calcular la suma de los elementos y el promedio de punto f lotante de los elementos.
20.9 Escriba un programa para crear un objeto lista enlazada de 10 caracteres, y que luego cree un segundo objeto lista que
contenga una copia de la primera lista, pero en orden inverso.
20.10 Escriba un programa que reciba una línea de texto como entrada y que utilice un objeto pila para imprimir la línea en
orden inverso.
20.11 Escriba un programa que utilice un objeto pila para determinar si una cadena es una palíndroma (es decir, que la cade-
na se deletree en forma idéntica, tanto al revés como al derecho). El programa debe ignorar espacios y puntuación.
20.12 Los compiladores utilizan pilas para ayudar en el proceso de evaluar expresiones y generar código en lenguaje máquina.
En este ejercicio y en el siguiente, investigaremos cómo los compiladores evalúan expresiones aritméticas que consisten sola-
mente de constantes, operadores y paréntesis.
Los humanos generalmente escriben expresiones como 3 + 4 y 7 / 9, en donde el operador (+ o / aquí) se escribe entre sus
operandos; a esta notación se le conoce como notación infijo. Las computadoras “prefieren” la notación postfijo, en donde el
operador se escribe a la derecha de sus dos operandos. Las anteriores expresiones infijo aparecerían en notación postfijo como
3 4 + y 7 9 /, respectivamente.
www.FreeLibros.me
El programa debe leer la expresión y colocarla en el arreglo de caracteres infijo, y utilizar las versiones modificadas de las
funciones de la clase pila, implementadas en este capítulo para ayudar a crear la expresión postfijo en el arreglo de caracteres
postfijo. El algoritmo para crear una expresión postfijo es el siguiente:
1) Meter un paréntesis izquierdo '(' en la pila.
2) Agregar un paréntesis derecho ')' al final de infijo.
3) Mientras que la pila no esté vacía, leer infijo de izquierda a derecha y hacer lo siguiente:
Si el carácter actual en infijo es un dígito, copiarlo al siguiente elemento de postfijo.
Si el carácter actual en infijo es un paréntesis izquierdo, meterlo a la pila.
Si el carácter actual en infijo es un operador,
Sacar los operadores (si los hay) de la parte superior de la pila, mientras tengan igual o mayor precedencia
que el operador actual, e insertar en postfijo los operadores que se sacaron.
Meter en la pila el carácter actual en infijo.
Si el carácter actual en infijo es un paréntesis derecho:
Sacar operadores de la parte superior de la pila e insertarlos en postfijo, hasta que haya un paréntesis
izquierdo en la parte superior de la pila.
Sacar (y descartar) el paréntesis izquierdo de la pila.
Las siguientes operaciones aritméticas se permiten en una expresión:
+ suma
- resta
* multiplicación
/ división
^ exponenciación
% módulo
[Nota: asumimos la asociatividad de izquierda a derecha para todos los operadores, para los fines de este ejercicio]. La pila debe
mantenerse con nodos de pila que contengan, cada uno, un miembro de datos y un apuntador al siguiente nodo de la pila.
Algunas de las herramientas funcionales que puede ser conveniente proporcionar son:
a) la función convertirAPostfijo, que convierte la expresión infijo a notación postfijo
b) la función esOperador, el cual determina si c es un operador
c) la función precedencia, que determina si la precedencia de operador1 es menor, igual o mayor que la precedencia
de operador2 (la función devuelve -1, 0 y 1, respectivamente)
d) la función push, que mete un valor en la pila
e) la función pop, que saca un valor de la pila
f ) la función parteSuperiorPila, que devuelve el valor de la parte superior de la pila sin sacarlo de la misma
g) la función estaVacia, que determina si la pila está vacía
h) la función imprimirPila, que imprime la pila
20.13 Escriba un programa para evaluar una expresión postfijo (asuma que es válida) tal como:
6 2 + 5 * 8 4 / -
El programa debe leer una expresión postfijo que consista de dígitos y operadores, para después colocarla en un arreglo de
caracteres. Utilizando versiones modificadas de las funciones de la clase pila implementadas anteriormente en este capítulo, el
programa deberá explorar la expresión y evaluarla. El algoritmo es el siguiente:
1) Adjuntar el carácter nulo ('\0') al final de la expresión postfijo. Al encontrar el carácter nulo, ya no habrá nada más
qué procesar.
www.FreeLibros.me
www.FreeLibros.me