Repetición y contadores · Lección 15 de 30 · unos 12 minutos
Sumar de uno a N
Mantén el acumulador separado del contador del bucle.
01 / Comprende
Comprender la idea
Un algoritmo es un método repetible para resolver un problema. Para sumar de 1 a N, empieza con total cero y añade el contador actual en cada iteración. El total y el contador tienen papeles diferentes y necesitan registros separados.
Una invariante es una afirmación que sigue siendo cierta mientras se ejecuta el algoritmo. Después de k iteraciones, el total es 1 + … + k. Con cero iteraciones es cero. Examina esta relación en la traza en lugar de deducirla solo de la respuesta final.
02 / Prueba
Observar qué ocurre
Los totales sucesivos son 1, 3, 6 y 10. Solo se imprime el total final.
LOAD 1 R1
LOAD 0 R2
LOOP 4
LOAD R2
ADD R1
COPY R0 R2
LOAD R1
ADD 1
COPY R0 R1
RETURN
LOAD R2
PRINT
HALTUsa Avanzar un paso para seguir una instrucción cada vez. Puedes modificar el ejemplo y repetirlo.
03 / Reto
Hacerlo funcionar
Lee N entre 0 y 10. Usa un bucle para imprimir la suma 1 + 2 + … + N. Imprime 0 si N = 0.
El comprobador ejecuta el programa actual del editor en una máquina nueva para cada uno de 3 casos. Suministra entradas y memoria inicial; la salida y memoria actuales del laboratorio no deciden el resultado.
INPUT
COPY R0 R3
LOAD 1 R1
LOAD 0 R2
LOOP R3
#
RETURN
LOAD R2
PRINT
HALT¿Necesitas una pista?
Vuelve a cargar R2 antes de sumar R1 y guarda el nuevo total en R2.
Mostrar una solución resuelta
Lee el programa, predice el efecto de cada instrucción y después avanza paso a paso en el laboratorio.
INPUT
COPY R0 R3
LOAD 1 R1
LOAD 0 R2
LOOP R3
LOAD R2
ADD R1
COPY R0 R2
LOAD R1
ADD 1
COPY R0 R1
RETURN
LOAD R2
PRINT
HALTLaboratorio de CPU con emojis
Programa con emojis
Escribe LOAD, ADD u otro código de operación y pulsa Espacio para insertar su emoji. Ctrl/⌘ + Intro ejecuta o pausa; Escape pausa; Ctrl/⌘ + ] añade sangría. Tab mueve el foco. Las etiquetas terminan en dos puntos. Los saltos usan direcciones de instrucción que empiezan en cero.
Mapa de instrucciones y puntos de interrupción (0)
Los puntos de interrupción detienen la ejecución antes de una instrucción. Ejecutar permite pasar una vez por el punto en el que se ha detenido; Avanzar un paso ejecuta esa instrucción directamente. Editar el código borra los puntos de interrupción anteriores y el estado de la máquina.
Registros de la CPU
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
Pilas y marcos de bucle
SP = 255 − profundidad de datos − profundidad de llamadas. La pila está separada de la memoria.
Pila de datos (fondo → cima)
Vacío
Direcciones de retorno de llamadas (fondo → cima)
Vacío
Marcos de bucle
Vacío
Salida y entrada
Ejecuta una instrucción PRINT para ver la salida.
Entrada en la cola: Vacío
Memoria · 256 bytes · 0 distintos de cero
Cada celda muestra dirección:valor. R = leído en este paso; W = escrito en este paso. Selecciona una celda para inspeccionarla o inicializarla antes de ejecutar. Usa las flechas para desplazarte, Inicio/Fin para la fila y Ctrl/⌘ + Inicio/Fin para toda la memoria.
Traza de ejecución · 0 entradas
Abajo aparecen las entradas recientes. Inspecciona cualquier índice, empezando por cero, para ver una copia completa e independiente del estado anterior y posterior.
Comprobar tu reto
Puedes comprobarlo en cualquier momento. Todos los casos deben superar la prueba para registrar la finalización.
El progreso usa solo almacenamiento local. Permanece en este navegador y nunca se envía a un servidor.