Soluciones para docentes

La pila y las funciones

Recoge cuatro tipos de evidencia: predicción del estado relevante; comportamiento en casos variados, incluidos los límites; explicación apoyada en la traza y el estado; y corrección razonada de una discrepancia. Valora cada aspecto como inicial, con apoyo o autónomo, en papel o mediante el proceso aprobado del centro. Superar un reto demuestra un comportamiento de la máquina, no la autoría ni un dominio completo. Acepta programas correctos equivalentes; las soluciones públicas son modelos, no las únicas respuestas posibles.

Material didáctico público. Las soluciones son ejemplos; otros programas correctos equivalentes pueden superar las comprobaciones.

19. La pila: último en entrar, primero en salir

Guarda valores en la pila de datos y recupéralos en orden inverso.

Abrir esta lección →

1. Predecir y trazar

Antes de ejecutar el programa de prueba, predice su salida y traza las tres primeras instrucciones ejecutadas. Sigue los registros, indicadores o memoria relevantes. Después avanza paso a paso para comparar.

LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT

Añadir entradas a la cola: Ninguno

Inicializar memoria: Todos los bytes empiezan en cero

Solución de la predicción

Salida: 22, 11

InstrucciónPC antesPC despuésR0 antesR0 despuésEstado relevanteSalida
LOAD01011{"registers":[11,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]}Ninguno
PUSH121111{"registers":[11,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":254,"stack":[11],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]}Ninguno
LOAD231122{"registers":[22,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":254,"stack":[11],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]}Ninguno

2. Construir y comprobar

Lee dos enteros, guarda ambos en la pila de datos e imprímelos en orden inverso. Usa PUSH y POP en lugar de valores fijos.

Tipos de instrucción requeridos: INPUT, PUSH, POP

Ejemplo de solución del reto

INPUT
PUSH
INPUT
PUSH
POP
PRINT
POP
PRINT
HALT

Casos reales del comprobador

Caso 1
Entrada
3, 8
Memoria inicial
Todos los bytes empiezan en cero
Salida esperada
8, 3
Caso 2
Entrada
-4, 0
Memoria inicial
Todos los bytes empiezan en cero
Salida esperada
0, -4
Caso 3
Entrada
9, 9
Memoria inicial
Todos los bytes empiezan en cero
Salida esperada
9, 9

3. Explicar la máquina

¿Por qué se imprime primero la segunda entrada?

Razonamiento y nota docente

PUSH/POP siguen LIFO. Con entradas 3, 8, la salida es 8, 3. Los marcos de llamada no son valores de datos.