Bases de la programmation (trace de pseudo-code)
Une file d'attente utilise de façon circulaire le tableau de chaînes q de 4 éléments. head et tail valent 1 au départ. enq(v) exécute q[tail] ← v puis tail ← tail mod 4 + 1 ; deq() renvoie la valeur de q[head] puis exécute head ← head mod 4 + 1. Lors de l'exécution du programme suivant, dans quel élément de q « E » est-il stocké ?
enq("A")
enq("B")
enq("C")
deq()
deq()
enq("D")
enq("E")
- Aq[1]
- Bq[3]
- Cq[5]
Afficher la réponse et l'explication
Réponse : A. q[1]
mod est évalué avant + : tail ← tail mod 4 + 1 fait donc parcourir à tail le cycle 1 → 2 → 3 → 4 → 1. A, B et C vont dans q[1] à q[3], et tail = 4. Les deux appels deq() retirent A et B, et head = 3. D va dans q[4], et tail revient à 4 mod 4 + 1 = 1 : E va donc dans l'emplacement libéré q[1]. Une file d'attente circulaire (tampon circulaire) réutilise les emplacements libérés au lieu d'avancer les éléments.
Continuer : 9 autres questions sur Bases de la programmation (trace de pseudo-code)