Des algorithmes avec un état · Leçon 17 sur 30 · environ 15 minutes
La suite de Fibonacci
Conservez deux valeurs précédentes et actualisez-les dans un ordre sûr.
01 / Expliquer
Comprendre l’idée
En partant de 1 et 1, chaque valeur de Fibonacci est la somme des deux précédentes. R1 contient la prochaine valeur à afficher et R2 celle qui la suit. Après l’affichage de R1, calculez leur somme et faites avancer la paire.
L’ordre des mises à jour compte. Remplacer R1 trop tôt peut faire perdre une valeur encore nécessaire à la somme. Un registre temporaire ou le résultat encore présent dans R0 sécurise cette transition. Utilisez un nombre borné de répétitions, pas un test d’égalité avec un nombre que la suite pourrait ne jamais atteindre.
02 / Essayer
Observer le fonctionnement
Les résultats attendus sont 1, 1, 2, 3, 5, 8, 13, 21. Huit itérations arrêtent la suite à un point connu.
LOAD 1 R1
LOAD 1 R2
LOOP 8
LOAD R1
PRINT
ADD R2
COPY R2 R1
COPY R0 R2
RETURN
HALTAvancez pas à pas pour suivre une instruction à la fois. Vous pouvez modifier l’exemple et le rejouer.
03 / Défi
Le faire fonctionner
Lisez N de 0 à 8. Affichez les N premières valeurs de Fibonacci en commençant par 1, 1. N’affichez rien pour N = 0.
Le vérificateur exécute votre programme actuel de l’éditeur sur une nouvelle machine pour chacun des 4 cas de test. Il fournit lui-même les entrées et la mémoire préparée ; la sortie et la mémoire actuelles du laboratoire ne décident pas du résultat.
INPUT
COPY R0 R4
LOAD 1 R1
LOAD 1 R2
LOOP R4
#
RETURN
HALTBesoin d’un indice ?
ADD R2 laisse la nouvelle somme dans R0 ; COPY R2 R1 peut donc d’abord préserver l’ancienne deuxième valeur.
Afficher une solution expliquée
Lisez le programme, prévoyez l’effet de chaque instruction, puis suivez-le pas à pas dans le laboratoire.
INPUT
COPY R0 R4
LOAD 1 R1
LOAD 1 R2
LOOP R4
LOAD R1
PRINT
ADD R2
COPY R2 R1
COPY R0 R2
RETURN
HALTLaboratoire du processeur en émojis
Programme en émojis
Saisissez LOAD, ADD ou un autre nom d’instruction, puis Espace pour insérer l’émoji. Ctrl/⌘ + Entrée exécute ou suspend ; Échap suspend ; Ctrl/⌘ + ] indente. Tab déplace le focus. Les étiquettes utilisent deux-points. Les sauts utilisent des adresses d’instructions à partir de zéro.
Carte des instructions et points d’arrêt (0)
Un point d’arrêt suspend avant son instruction. Exécuter franchit une fois le point d’arrêt actuel ; Pas à pas exécute directement son instruction. Modifier le code efface les anciens points d’arrêt et l’état machine.
Registres du processeur
- R0
- 0
- R1
- 0
- R2
- 0
- R3
- 0
- R4
- 0
- R5
- 0
- R6
- 0
- R7
- 0
Piles et cadres de boucle
SP = 255 − profondeur des données − profondeur des appels. La pile est distincte de la mémoire.
Pile de données (bas → haut)
Vide
Adresses de retour des appels (bas → haut)
Vide
Cadres de boucle
Vide
Sorties et entrées
Exécutez une instruction PRINT pour voir une sortie.
Entrées en attente: Vide
Mémoire · 256 octets · 0 non nuls
Chaque case indique adresse:valeur. R = lecture à ce pas ; W = écriture à ce pas. Sélectionnez une case pour l’examiner ou l’initialiser avant l’exécution. Les flèches déplacent la sélection, Début/Fin visent les extrémités de la ligne et Ctrl/⌘ + Début/Fin celles de toute la mémoire.
Trace d’exécution · 0 entrées
Les entrées récentes sont ci-dessous. Examinez n’importe quel indice à partir de zéro pour voir les états complets et indépendants avant et après.
Vérifier votre défi
Vous pouvez lancer cette vérification à tout moment. Tous les cas doivent réussir pour enregistrer la leçon comme terminée.
La progression utilise seulement localStorage. Elle reste dans ce navigateur et n’est jamais envoyée à un serveur.