Bases de la programmation (trace de pseudo-code)

∧ désigne le ET bit à bit. Quelle est la valeur de c après l'exécution du programme suivant ?

integer: x ← 200, c ← 0
while (x ≠ 0)
  x ← x ∧ (x − 1)
  c ← c + 1
endwhile
  1. A3
  2. B5
  3. C8
Afficher la réponse et l'explication

Réponse : A. 3

L'opération bit à bit x ∧ (x − 1) met à 0 le bit à 1 de plus faible poids de x. Dans x − 1, ce 1 de plus faible poids devient 0 et tous les 0 situés en dessous deviennent des 1 : le ET efface donc exactement cette partie. 200 = 11001000 devient 11000000 = 192, puis 10000000 = 128, puis 0 : la boucle s'exécute 3 fois. c vaut finalement le nombre de bits à 1 dans l'écriture binaire de x.

S'entraîner sur ce thème Retour au thème

Autres questions sur Bases de la programmation (trace de pseudo-code)

  1. x et y sont des entiers non signés sur 8 bits. << et >> sont des décalages logiques : les bits libérés sont remplis par 0, et les bits qui sortent des 8 bits sont perdus. ∨ désigne le OU bit à bit. Avec x = 75, quelle est la valeur de y après l'affectation suivante ?
  2. La procédure bubble suivante est un tri à bulles qui trie le tableau d'entiers data par ordre croissant. swap(data, j, k) est une procédure qui échange les valeurs de data[j] et data[k]. Les indices du tableau commencent à 1. Que faut-il écrire à la place de 【a】 dans le programme ?
  3. ÷ est la division ; quand le résultat est affecté à une variable entière (y compris un argument de fonction), la partie fractionnaire est supprimée. Le programme suivant place dans lo l'indice de la première valeur supérieure ou égale à x dans le tableau d'entiers data, trié par ordre croissant (les indices commencent à 1). x n'est pas supérieur au dernier élément de data. Que faut-il écrire à la place de 【a】 dans le programme ?
  4. Une pile est représentée par le tableau d'entiers st de 5 éléments et la variable entière top. Tous les éléments de st valent 0 au départ, et top vaut 0. push(v) ajoute 1 à top puis exécute st[top] ← v ; pop() renvoie la valeur de st[top] puis soustrait 1 de top (les éléments de st ne sont pas modifiés). Quelles sont les valeurs de top et st après l'exécution du programme suivant ?
  5. 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é ?