exercices chapitre 5

TERMINALE NSI

exercice 5.1

Soit la suite d'instructions suivantes :

L = vide()
L = cons(2, cons(15, cons (23, L)))
L1 = cdr(L)
a = car(L1)
L1 = cons(4, cons(3, L1))

Donnez le contenu des listes L et L1 et la valeur de a.

exercice 5.2

Soit une pile P initialement vide. Soit les instructions suivantes :

push(P,4)
push(P,7)
a = pop(P)
b = taille(P)
c = pop(P)
push(P,3)
push(P,2)
d = taille(P)

Donnez le contenu de la pile P, la valeur de a, la valeur de b, la valeur de c et la valeur de d.

exercice 5.3

Soit une file F initialement vide. Soit les instructions suivantes :

enqueue(F,6)
enqueue(F,3)
a = dequeue(F)
enqueue(F,9)
b = taille(F)
enqueue(F,17)
c = dequeue(F)
enqueue(F,2)
d = taille(F)

Donnez le contenu de la file F, la valeur de a, la valeur de b, la valeur de c et la valeur de d.

exercice 5.4

Soit le programme Python suivant :

pile = []
tab = [5,8,6,1,3,7]
pile.append(5)
pile.append(10)
pile.append(8)
pile.append(15)
for i in tab:
    if i > 5:
        pile.pop()

Donnez l’état de la pile pile après l’exécution de ce programme.

exercice 5.5

Soit le programme Python suivant :

from collections import deque
file = deque([])
tab = [2,78,6,89,3,17]
file.append(5)
file.append(10)
file.append(8)
file.append(15)
for i in tab:
    if i > 50:
        file.popleft()

Donnez l’état de la file file après l’exécution de ce programme

exercice 5.6

Cet exercice est tiré du sujet 0 du bac NSI.

Dans cet exercice nous avons à notre disposition 4 fonctions :

1) On suppose dans cette question que le contenu de la pile P est le suivant (les éléments étant empilés par le haut) :

Quel sera le contenu de la pile Q après exécution de la suite d’instructions suivante ?

Q = pileVide ()
while not estVide ( P ):
    empiler (Q , depiler ( P ))

2) a) On appelle hauteur d’une pile le nombre d’éléments qu’elle contient. La fonction hauteur_pile prend en paramètre une pile P et renvoie sa hauteur. Après appel de cette fonction, la pile P doit avoir retrouvé son état d’origine.

Exemple : si P est la pile de la question 1 : hauteur_pile(P) = 4.

Recopier et compléter sur votre feuille le programme Python suivant implémentant la fonction hauteur_pile en remplaçant les ??? par les bonnes instructions.

def hauteur_pile ( P ):
Q = pileVide ()
n = 0
while not ( estVide ( P )):
    ???
    x = depiler ( P )
    empiler (Q , x )
while not ( estVide ( Q )):
    ???
    empiler (P , x )
return ???

2) b) Créer une fonction max_pile ayant pour paramètres une pile P et un entier i. Cette fonction renvoie la position j de l’élément maximum parmi les i derniers éléments empilés de la pile P. Après appel de cette fonction, la pile P devra avoir retrouvé son état d’origine. La position du sommet de la pile est 1.

Exemple : si P est la pile de la question 1 : max_pile(P, 2) = 1

3) Créer une fonction retourner ayant pour paramètres une pile P et un entier j. Cette fonction inverse l’ordre des j derniers éléments empilés et ne renvoie rien. On pourra utiliser deux piles auxiliaires.

Exemple : si P est la pile de la question 1, après l’appel de retourner(P, 3), l’état de la pile P sera :

4) L’objectif de cette question est de trier une pile de crêpes.

On modélise une pile de crêpes par une pile d’entiers représentant le diamètre de chaque crêpe. On souhaite réordonner les crêpes de la plus grande (placée en bas de la pile) à la plus petite (placée en haut de la pile).

On dispose uniquement d’une spatule que l’on peut insérer dans la pile de crêpes de façon à retourner l’ensemble des crêpes qui lui sont au-dessus.

Le principe est le suivant :

Exemple :

Créer la fonction tri_crepes ayant pour paramètre une pile P. Cette fonction trie la pile P selon la méthode du tri crêpes et ne renvoie rien. On utilisera les fonctions créées dans les questions précédentes.

Exemple : Si la pile P est :

après l’appel de tri_crepes(P), la pile P devient :