Bases de la programmation (trace de pseudo-code)

÷ 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 ?

integer: lo ← 1, hi ← length(data), mid
while (lo < hi)
  mid ← (lo + hi) ÷ 2
  if (data[mid] < x)
    lo ← 【a】
  else
    hi ← mid
  endif
endwhile
  1. Amid
  2. Bmid − 1
  3. Cmid + 1
Afficher la réponse et l'explication

Réponse : C. mid + 1

Si data[mid] < x, data[mid] et tous les éléments qui le précèdent sont inférieurs à x : la réponse se trouve en mid + 1 ou après. Sinon, data[mid] ≧ x et la réponse se trouve en mid ou avant, d'où hi ← mid. Avec lo ← mid + 1, la plage se réduit à chaque fois, et la réponse est la position où lo = hi. Avec lo ← mid, quand lo et hi sont voisins, mid = lo, et si data[mid] < x la plage ne se réduit plus et la boucle ne se termine jamais.

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

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

  1. 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 ?
  2. 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é ?
  3. Le programme suivant affiche une liste chaînée, dont les éléments sont reliés par le tableau next, en la parcourant à partir de l'élément d'indice 1. Les indices du tableau commencent à 1. Une valeur 0 dans next marque la fin de la liste. Quelle suite de valeurs est affichée ?
  4. Le programme suivant insère « F », placé en val[6], juste après « C » (indice 3) dans la liste chaînée A → C → E → D → B, reliée par le tableau next, puis affiche la liste à partir de l'élément d'indice 1. Les indices du tableau commencent à 1. Une valeur 0 dans next marque la fin de la liste. Que faut-il écrire à la place de 【a】 pour que l'affichage soit A, C, F, E, D, B ?
  5. La boucle for suivante augmente sa variable de boucle de 5 à chaque passage. Quelle est la valeur de c après son exécution ?