Corrigé pour l’enseignant

La pile et les fonctions

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.

19. La pile : dernier entré, premier sorti

Sauvegardez des valeurs sur la pile de données et récupérez-les dans l’ordre inverse.

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.

LOAD 11
PUSH
LOAD 22
PUSH
POP
PRINT
POP
PRINT
HALT

Ajouter les entrées à la file: Aucune

Initialiser la mémoire: Tous les octets sont initialement nuls

Corrigé de la prédiction d’essai

Sortie: 22, 11

InstructionPC avantPC aprèsR0 avantR0 aprèsÉtat pertinentSortie
LOAD01011{"registers":[11,0,0,0,0,0,0,0],"flags":{"zero":false,"negative":false,"overflow":false},"sp":255,"stack":[],"callStack":[],"loopStack":[],"memoryReads":[],"memoryWrites":[]}Aucune
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":[]}Aucune
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":[]}Aucune

2. Construire et vérifier

Lisez deux entiers, sauvegardez-les tous deux sur la pile de données, puis affichez-les dans l’ordre inverse. Utilisez PUSH et POP plutôt que des valeurs fixes.

Types d’instructions requis: INPUT, PUSH, POP

Exemple de solution du défi

INPUT
PUSH
INPUT
PUSH
POP
PRINT
POP
PRINT
HALT

Cas réels du vérificateur

Cas 1
Entrée
3, 8
Mémoire initiale
Tous les octets sont initialement nuls
Sortie attendue
8, 3
Cas 2
Entrée
-4, 0
Mémoire initiale
Tous les octets sont initialement nuls
Sortie attendue
0, -4
Cas 3
Entrée
9, 9
Mémoire initiale
Tous les octets sont initialement nuls
Sortie attendue
9, 9

3. Expliquer la machine

Pourquoi la deuxième valeur fournie s’affiche-t-elle en premier ?

Raisonnement et note pédagogique

PUSH et POP suivent l’ordre dernier entré/premier sorti ; avec 3, 8 en entrée, la sortie vaut 8, 3 ; les cadres d’appel ne sont pas des données.