Corrigé pour l’enseignant

Construire de petits programmes

Recueillez quatre types d’indices : prédiction de l’état pertinent ; comportement dans des cas variés, y compris aux limites ; explication fondée sur la trace et l’état ; correction justifiée d’un écart. Évaluez chacun comme en développement, avec soutien ou autonome, sur papier ou selon la procédure approuvée de votre école. Réussir un défi prouve un comportement de la machine, pas la paternité du code ni une maîtrise complète. Acceptez les programmes équivalents corrects : le corrigé public est un modèle, pas l’unique réponse possible.

Matériel pédagogique public. Les solutions sont des exemples ; des programmes équivalents corrects peuvent aussi réussir les vérifications réelles.

28. Un petit jeu de cible

Construisez un jeu de trois tours avec un état enregistré et un score.

Ouvrir cette leçon →

1. Prévoir et tracer

Avant d’exécuter le programme d’essai, prévoyez sa sortie et tracez les trois premières instructions exécutées. Suivez les registres, les indicateurs ou la mémoire pertinents, selon le besoin. Avancez ensuite pas à pas pour comparer.

STORE 5 200
LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALT

Ajouter les entrées à la file: 5, 2, 5

Initialiser la mémoire: 200: 5

Corrigé de la prédiction d’essai

Sortie: 2

InstructionPC avantPC aprèsR0 avantR0 aprèsÉtat pertinentSortie
STORE0100{"registers":[0,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[200]}Aucune
LOAD1200{"registers":[0,5,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[200],"memoryWrites":[]}Aucune
LOAD2300{"registers":[0,5,0,0,0,0,0,0],"flags":{"zero":true,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]}Aucune

2. Construire et vérifier

La mémoire 200 contient un octet cible. Lisez exactement trois propositions. Comptez celles qui correspondent à la cible, enregistrez le score en mémoire 201 et affichez-le une fois.

Types d’instructions requis: INPUT, CMP, LOOP, STORE, JUMP_IF_ZERO

Exemple de solution du défi

LOAD [200] R1
LOAD 0 R2
LOOP 3
INPUT
CMP R1
JUMP_IF_ZERO hit
JUMP next
hit: LOAD R2
ADD 1
COPY R0 R2
next: NOP
RETURN
LOAD R2
STORE 201
PRINT
HALT

Cas réels du vérificateur

Cas 1
Entrée
5, 2, 5
Mémoire initiale
200: 5
Sortie attendue
2
Mémoire finale attendue
200: 5, 201: 2
Lectures mémoire requises
200
Cas 2
Entrée
1, 2, 3
Mémoire initiale
200: 9
Sortie attendue
0
Mémoire finale attendue
200: 9, 201: 0
Lectures mémoire requises
200
Cas 3
Entrée
0, 0, 0
Mémoire initiale
200: 0
Sortie attendue
3
Mémoire finale attendue
200: 0, 201: 3
Lectures mémoire requises
200
Cas 4
Entrée
17, 1, 2
Mémoire initiale
200: 17
Sortie attendue
1
Mémoire finale attendue
200: 17, 201: 1
Lectures mémoire requises
200

3. Expliquer la machine

Quel état change en cas de proposition correcte ou incorrecte ?

Raisonnement et note pédagogique

Le score augmente seulement en cas d’égalité ; la cible reste une donnée enregistrée de la règle. Trois propositions produisent un score numérique.