• Aucun résultat trouvé

. Exercice 1 : Fonctions de bases pour les piles Dans toute la suite, nous allons manipuler des listes pour modéliser des piles

N/A
N/A
Protected

Academic year: 2022

Partager ". Exercice 1 : Fonctions de bases pour les piles Dans toute la suite, nous allons manipuler des listes pour modéliser des piles"

Copied!
3
0
0

Texte intégral

(1)

Dans toute la suite, nous allons manipuler des listes pour modéliser des piles.

Exercice 1 : Fonctions de bases pour les piles

a) Ecrire une fonction empile(p,e) permettant de rajouter l’élément e à la fin de la pile p en utilisant la méthode append (rien n’est renvoyé) b) Ecrire la définition de la fonction desempile(p) en utilisant la méthode

p.pop() qui enlève le dernier élément à la liste p et qui retourne la valeur enlevée.

c) Ecrire une fonction PileVide(p)qui renvoie True si la liste p est vide et False dans le cas contraire.

Exercice 2 : Effet de bord, copie par référence, copie d’une liste sans effet de bord 1) On considère :

- la liste 𝐿1= [0,1,2,3,4],

- la liste 𝐿2 obtenue par l’instruction 𝐿2= 𝐿1 - la liste 𝐿3 = 𝐿1[: ]

On rappelle que la syntaxe 𝑑𝑒𝑙 𝐿[𝑖: 𝑗] permet de supprimer les éléments de l’indice 𝑖 à l’indice 𝑗 exclu de la liste 𝐿 et que 𝑑𝑒𝑙 𝐿[𝑖] permet de supprimer le seul élément d’index 𝑖. Après avoir créé la liste 𝐿1 sous python puis créer les listes 𝐿2

et 𝐿3, enlever le dernier élément de la liste 𝐿1. Que constatez-vous sur 𝐿2 et 𝐿3 ? 2) Commenter les lignes de codes ci-dessous :

a=1

def G(entier):

entier=entier+1 return entier print(a)# = a =1 print(G(a))# 2 print(a)# a=1 L=[0,1,2,3,4]

def F(liste):

del liste[0]

return liste print(L)#[0,1,2,3,4]

print(F(L))#[1,2,3,4]

print(L)#[1,2,3,4]

3) En utilisant les fonctions 𝑒𝑚𝑝𝑙𝑖𝑙𝑒( ) et 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ) de l’exercice 1 (et éventuellement 𝑃𝑖𝑙𝑒_𝑣𝑖𝑑𝑒()), proposer une fonction 𝑐𝑜𝑝𝑖𝑒𝑟_𝑙𝑖𝑠𝑡𝑒( ) qui prend pour argument une liste 𝐿 et qui renvoie une copie de cette liste en évitant les effets de bord (la liste 𝐿 ne sera également pas affectée par cette copie).

Exercice 3 : Inversion pile

En utilisant les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) et 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ) de l’exercice 1, proposer une fonction 𝑖𝑛𝑣𝑒𝑟𝑠𝑒𝑟_𝑝𝑖𝑙𝑒( ) qui prend pour argument une pile 𝑝 et qui renvoie une autre pile dont les éléments sont les éléments de 𝑝 dans l’ordre inverse, 𝑝 n’est pas modifiée.

Exercice 4 : Dépiler plusieurs éléments

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) pour élaborer la fonction demandée : Ecrire une fonction 𝑑𝑒𝑝𝑖𝑙𝑒𝐾( ) qui prend pour argument une pile 𝑝 et un entier 𝐾 et qui désempile 𝑝 des 𝐾 derniers éléments de 𝑝 s’ils existent ou qui désempile entièrement 𝑝 si 𝑙𝑒𝑛(𝑝) < 𝐾. La fonction retourne la pile dépilée (en partie ou en totalité).

Exercice 5 : Dépiler jusqu’à un élément 𝐸

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) pour élaborer la fonction demandée : Ecrire une fonction 𝑑𝑒𝑝𝑖𝑙𝑒𝐸( ) qui prend pour argument une pile 𝑝 et un élément 𝐸 et qui désempile 𝑝 tant que l’élément 𝐸 n’est pas rencontré ou que 𝑝 n’est pas vide. La fonction retourne la pile dépilée (en partie ou en totalité).

(2)

Exercice 6 : Permutation

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ) (éventuellement 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) )pour élaborer la fonction demandée :

Ecrire une fonction 𝑝𝑒𝑟𝑚𝑢𝑡( ) qui prend pour argument une pile 𝑝 et qui permute le dernier élément avec l’avant dernier s’ils existent. La fonction retourne la pile ainsi modifiée.

Exercice 7 : Permutation circulaire

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) pour élaborer la fonction demandée : Ecrire une fonction 𝑝𝑒𝑟𝑚𝑢𝑡_𝑐𝑖𝑟𝑐(𝑝) qui réalise une permutation circulaire sur les 𝑘 dernier éléments d’une pile 𝑝.

Exercice 8 : Test de la mise en

parenthèse d’une expression

mathématique

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) pour élaborer la fonction demandée :

Ecrire un algorithme utilisant une pile et permettant de savoir si le nombre de parenthèses ouvrantes est égale au nombre de parenthèses fermantes. L’expression mathématique à tester est donnée dans une liste de chaîne de caractères. Par exemple, l’expression 3 × (4 + 2) sera donnée sous la forme ["3","*", "(","4"," + ","2", ")"]. L’algorithme renvoie 𝑇𝑟𝑢𝑒, si la mise en paranthèse est correcte, 𝐹𝑎𝑙𝑠𝑒, sinon.

L’idée est donc d’empiler à chaque parenthèse ouvrante rencontrée et de dépiler si une parenthèse fermante est rencontrée (en lisant l’expression de gauche à droite). Si l’écriture est bonne la pile est vide.

Exercice 9 : Calculette polonaise

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) pour élaborer la fonction demandée :

L’écriture polonaise inversée ne nécessite pas de parenthèse pour l’écriture d’un calcul, elle a été autrefois utilisée dans certaines calculatrices.

Principe :

-

Quand on rencontre un nombre, on ne fait rien

-

Quand on rencontre un opérateur (+,-,*,/), on l’applique aux deux précédents nombres

7 + 6 → 7 6 + (10 + 5) ∗ 3 → 10 5 + 3 ∗

10 + 2 ∗ 3 → 10 2 3 ∗ + (2 + 8) ∗ (6 + 11) → 8 2 + 6 11 + ∗ Ecrire une fonction :

-

qui prend en argument une liste contenant les éléments d’un calcul en écriture polonaise inversée. Par exemple [2,3, "+", 4, " ∗ "]

pour (2 + 3) ∗ 4

-

qui utilise une pile initialement vide (une liste vide).

-

qui, pour chaque élément lue de la liste de gauche à droite :

si l’élément est un nombre, alors ce nombre est rajouter à la pile avec la fonction empile( )

si l’élément est une opération (*,/,+,-,), alors la pile est dépilée deux fois pour réaliser cette opération

-

A la fin la pile ne contient plus qu’un seul élément, c’est le résultat

du calcul

(3)

Exercice 10 : Conversion binaire

Dans cet exercice, vous devez utiliser les fonctions 𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑑𝑒𝑠𝑒𝑚𝑝𝑖𝑙𝑒( ), 𝑃𝑖𝑙𝑒𝑉𝑖𝑑𝑒( ) pour élaborer les fonctions demandées :

Soit un nombre 𝑛 écrit en base décimale. On peut remarquer que le reste de la division de 𝑛 par 2 (jusqu’à ce que 𝑛 = 1). donne accès à sa conversion en base binaire. Par exemple (du LSB au MSB) :

11 => (1101) 11

2 = 5 + 1 => 5

2 = 2 + 1 => 2

2 = 1 + 0 => 1

2 = 0 + 1

1) Programmer une fonction 𝑐𝑜𝑛𝑣_𝑏𝑖𝑛( ) qui prend un nombre en base décimale et qui renvoie une pile donnant sa conversion binaire.

Question supplémentaire ne faisant pas appel à des piles

2) Ecrire une fonction 𝑐𝑜𝑛𝑣_𝑑𝑒𝑐( ) qui prend en argument une chaîne

de « 0 » et « 1 » et retourne l’entier dont 𝑛 est la représentation en

base décimale.

Références

Documents relatifs

[r]

Pour chacune des propositions suivantes, dire si elle est vraie ou fausse et justifier la réponse donnée. Une réponse non justifiée ne sera pas prise

Coder la fonction copier renvoyant une copie d’une liste (proposer deux solutions).. Coder la fonction concatener renvoyant la concaténation de

// Resultat : indice de l'élément, ou INDICE_INVALIDE en cas d'échec int liste_ajouter(LISTE_TABLEAU* liste, ELEMENT e);}. int liste_inserer(LISTE_TABLEAU* liste, int indice,

Dans cet exercice, vous allez devoir retrouver des fonctions sur lesquelles on a mis des conditions sur la dérivée.. Les 3 questions pourront se traiter de la même manière mais

[r]

Pour chacune des fonctions suivantes, calculer la dérivée, la mettre sur un seul dénominateur, étudier son signe et en déduire les variations de la fonction initiale.. Tracer le

Donner une valeur approchée au dixième de ce maximum.. Par lecture graphique compléter