16. Factorial e invariantes de bucle
Usa un acumulador multiplicativo y explica por qué 0! es 1.
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 4 R1
LOAD 1 R2
LOOP 4
LOAD R2
MUL R1
COPY R0 R2
LOAD R1
SUB 1
COPY R0 R1
RETURN
LOAD R2
PRINT
HALT
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
Solución de la predicción
Salida: 24
2. Construir y comprobar
Lee N entre 0 y 6 e imprime N!. Usa un bucle y un acumulador de multiplicación.
Tipos de instrucción requeridos: INPUT, LOOP, MUL
Ejemplo de solución del reto
INPUT
COPY R0 R1
COPY R0 R3
LOAD 1 R2
LOOP R3
LOAD R2
MUL R1
COPY R0 R2
LOAD R1
SUB 1
COPY R0 R1
RETURN
LOAD R2
PRINT
HALT
Casos reales del comprobador
Caso 1
- Entrada
0- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
1
Caso 2
- Entrada
4- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
24
Caso 3
- Entrada
6- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
720
3. Explicar la máquina
¿Por qué empieza el acumulador de producto en 1?
Razonamiento y nota docente
1 es el elemento neutro multiplicativo; cero iteraciones dan 0! = 1. Empezar en 0 anularía todos los productos.
17. La sucesión de Fibonacci
Conserva dos valores anteriores y actualízalos en un orden seguro.
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 1 R1
LOAD 1 R2
LOOP 8
LOAD R1
PRINT
ADD R2
COPY R2 R1
COPY R0 R2
RETURN
HALT
Añadir entradas a la cola: Ninguno
Inicializar memoria: Todos los bytes empiezan en cero
Solución de la predicción
Salida: 1, 1, 2, 3, 5, 8, 13, 21
2. Construir y comprobar
Lee N entre 0 y 8. Imprime los primeros N valores de Fibonacci, empezando por 1, 1. No imprimas nada si N = 0.
Tipos de instrucción requeridos: INPUT, LOOP, ADD, COPY
Ejemplo de solución del reto
INPUT
COPY R0 R4
LOAD 1 R1
LOAD 1 R2
LOOP R4
LOAD R1
PRINT
ADD R2
COPY R2 R1
COPY R0 R2
RETURN
HALT
Casos reales del comprobador
Caso 1
- Entrada
0- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
Ninguno
Caso 2
- Entrada
1- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
1
Caso 3
- Entrada
6- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
1, 1, 2, 3, 5, 8
Caso 4
- Entrada
8- Memoria inicial
Todos los bytes empiezan en cero- Salida esperada
1, 1, 2, 3, 5, 8, 13, 21
3. Explicar la máquina
¿Por qué puede romper Fibonacci reemplazar demasiado pronto el primer valor anterior?
Razonamiento y nota docente
Se pierde un operando aún necesario. Usa un temporal o resultado disponible antes de desplazar la pareja. El inicio correcto es 1, 1.
18. Invertir un búfer de memoria
Copia un búfer al revés con punteros de origen y destino.
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.
STORE 1 0
STORE 2 1
STORE 3 2
STORE 4 3
LOAD 3 R1
LOAD 16 R2
LOOP 4
LOAD [R1]
STORE R2
LOAD R1
SUB 1
COPY R0 R1
LOAD R2
ADD 1
COPY R0 R2
RETURN
HALT
Añadir entradas a la cola: Ninguno
Inicializar memoria: 0: 1, 1: 2, 2: 3, 3: 4
Solución de la predicción
Salida: Ninguno
2. Construir y comprobar
Hay cuatro bytes inicializados en las direcciones 0–3. Cópialos en orden inverso a las direcciones 16–19 y deja los originales sin cambios. Usa un bucle y direcciones en registros; no se requiere salida.
Tipos de instrucción requeridos: LOOP, LOAD, STORE
Ejemplo de solución del reto
LOAD 3 R1
LOAD 16 R2
LOOP 4
LOAD [R1]
STORE R2
LOAD R1
SUB 1
COPY R0 R1
LOAD R2
ADD 1
COPY R0 R2
RETURN
HALT
Casos reales del comprobador
Caso 1
- Entrada
Ninguno- Memoria inicial
0: 1, 1: 2, 2: 3, 3: 4- Salida esperada
Ninguno- Memoria final esperada
0: 1, 1: 2, 2: 3, 3: 4, 16: 4, 17: 3, 18: 2, 19: 1- Lecturas de memoria requeridas
0, 1, 2, 3
Caso 2
- Entrada
Ninguno- Memoria inicial
0: 8, 1: 0, 2: 255, 3: 2- Salida esperada
Ninguno- Memoria final esperada
0: 8, 1: 0, 2: 255, 3: 2, 16: 2, 17: 255, 18: 0, 19: 8- Lecturas de memoria requeridas
0, 1, 2, 3
Caso 3
- Entrada
Ninguno- Memoria inicial
0: 7, 1: 7, 2: 9, 3: 9- Salida esperada
Ninguno- Memoria final esperada
0: 7, 1: 7, 2: 9, 3: 9, 16: 9, 17: 9, 18: 7, 19: 7- Lecturas de memoria requeridas
0, 1, 2, 3
3. Explicar la máquina
¿Es una inversión en el mismo lugar? ¿Qué debe conservarse?
Razonamiento y nota docente
No: copia al revés de 0..3 a 16..19. El origen conserva 1, 2, 3, 4 y el destino recibe 4, 3, 2, 1.