• Aucun résultat trouvé

Lycée Berthollet MP/MP* 2021-22 TP sur les piles NOTA BENE :

N/A
N/A
Protected

Academic year: 2022

Partager "Lycée Berthollet MP/MP* 2021-22 TP sur les piles NOTA BENE :"

Copied!
2
0
0

Texte intégral

(1)

Lycée Berthollet MP/MP* 2021-22

TP sur les piles

NOTA BENE :On conseille de tester individuellement chaque fonction avec plusieurs cas particuliers bien choisis (qui doivent être inclus dans le fichier) pour faciliter l’éventuel déboguage.

Exercice 1 (Théorie). Lire la section 1 du chapitre 2 consacrée aux piles du cours d’Arnaud BÉGHYN.

Compléter votre lecture par la page intituléePiles (Informatique)de Wikipédia. À l’issue de ces lectures, mettre en commun votre compréhension des choses en expliquant votre point de vue au groupe et en dé- taillant des exemples concrets d’utilisation des piles.

Exercice 2 (Primitives). Nous décidons ici d’implémenter des piles de taillea priorinon bornée mais dont la taille est stockée et mise à jour à chaque opération sur la pile concernée, pour pouvoir permettre dans certains cas de stopper un algorithme si la pile dépasse une certaine taille.

On représente une pile par une liste Python dont le premier élément (indice0) est un entier représentant lahauteurde la pile, c’est-à-dire le nombre d’objets empilés, et dont les éléments suivants sont les objets empilés, dans l’ordre d’empilement. Par exemple, la liste[5,’p’,’e’,’e’,’h’,’S’] représente la pile de taille 5 obtenue en empilant d’abord l’objet’p’(ici, une chaîne de caractère), puis l’objet ’e’,etc. Le dernier objet empilé (haut de pile) est la chaîne’S’.

On utilisera pour l’implémentation certaines fonctionnalités des listes Pythonet seulement celles-là:

— l’assignement à la liste vide ;

— la méthodeappendqui permet de rajouter un élément en fin de liste ;

— la consultation et la modification de l’élément d’indice0d’une liste ;

— la méthodepopqui retourne, s’il existe, l’objet de fin de liste tout en l’enlevant de la liste.

Des exemples d’utilisation des méthodesappendetpopfigurent dans la première suggestion de lecture de l’exercice précédent ou sur la documentation en ligne du langage Python.

On demande ici de coder les primitives suivantes qui permettront d’oublierl’implémentation spécifique à base de liste et de travailler directementet uniquementen termes de piles :

1. la fonctioncreePile()qui crée et retourne une pile vide : 2. la fonctionPUSH(p,o)qui empile l’objetosur la pilep;

3. la fonctionestVide(p)qui retourneTruesi la pilepest vide etFalsesinon ;

4. la fonctionPOP(p)qui retourne, s’il existe, l’objet en haut de la pileptout en le dépilant, et produit un message d’erreur sinon ;

5. la fonctionhauteur(p)qui retourne un entier représentant la hauteur de la pilep;

6. la fonctionaffiche(p)qui produise un affichage minimal mais lisible de la pile, quitte à l’améliorer par la suite.

Les étudiants les plus aguerris pourront décider de coder ces primitives en programmation orientée objet, en s’aidant du chapitre7du cours de Bob Cordeau et Laurent Pointal.

Exercice 3 (Fonctions supplémentaires). À l’aide des primitives précédentes (et seulement elles), coder les fonctions suivantes :

1. la fonctionCLEAR(p)qui vide la pilep;

2. la fonctionPEEK(p)qui retourne l’objet en haut de la pilepsans le dépiler ;

3. la fonction SWAP(p) qui échange, s’ils existent, les deux objets du haut de la pile, et produit un message d’erreur sinon ;

(2)

4. la fonctionretourne(p)qui inverse l’ordre des objets de la pilep;

5. la fonction egal(p1,p2) qui retourne True si les deux piles p1 et p2 sont formées des mêmes objets, dans le même ordre, etFalsesinon ;

6. la fonction coupe(p,i) qui retourne la pile desi objets les plus hauts de la pilep, dans le même ordre que dans la liste initialep, et dépile ces objets de la listep;

7. la fonctionlire(p,i)qui retourne l’objet de hauteuride la listep, sans modifierp; 8. la fonctionechange(p,i,j)qui échange dans la listeples deux objets de hauteursietj.

Dans toute la suite, les manipulations de piles se feront à l’aide des primitives et fonctions codées ci-dessus, ou d’autres fonctions que vous définirez qui les utilisent.

Exercice 4 (Palindromes.) Un palidrome est un mot, commeADA, dont la lecture de droite à gauche est identique à la lecture de gauche à droite.

1. Écrire une fonction qui teste si la chaîne de carcatère passée en argument est unmot palindrome.

2. Modifier cette fonction pour tester si une chaîne est unephrase palindromecomme par exemple celle-ci, de Jérémie Elskens :

Tu l’as trop écrasé, César, ce Port-Salut.

Exercice 5 (Parenthèses, accolades et autres crochets.) Un chaîne de caractère bien parenthésée est une chaîne formée des seuls caractères’(’et’)’, telle que toute parenthèse fermante corresponde à une paren- thèse ouvrante et toute parenthèse ouvrante soit refermée. Par exemple’((())())’est bien parenthésée, mais’((())))((())’ne l’est pas.

1. Écrire une fonction prenant en argument une chaîne de caractères et retournant Truesi elle est bien parenthésée etFalsesinon.

2. Étendre cette fonction au cas où on ait plusieurs types de délimiteurs (parenthèses, accolades, crochets, etc.), les différents couples de délimiteurs étant passés en argument à la fonction sous la forme d’une liste de couples.

Exercice 6 (Notation polonaise inverse.) Construire un évaluateur arithmétique d’expressions données en

“notation polonaise inverse” par des listes de chaînes de caractères de la manière suivante : l’expression (10−2) +34×(56−(78+9))

est codée [’10’,’2’,’-’,’34’,’56’,’78’,’9’,’+’,’-’,’*’,’+’].

Pour simplifier, on supposera que tous les nombres sont entiers et qu’on n’utilise que les opérations à résultat entier :’+’,’-’,’*’,’//’,’%’.

Beaucoup plus délicat : comment feriez-vous avec l’expression parenthésée classique ? Exercice 7 (Labyrinthes.)

Dans la “grille” dessinée sur[[0,n]]2(n≥2) en reliant les points voisins horizontalement et verticalement par des “cloisons”, qui délimitent alors des cases, on veut construire un labyrinthe en abattant successive- ment des cloisons de la manière suivante : on part d’une case quelconque (par exemple un coin), et à chaque étape,

— soit il existe des cases adjacentes par le côté non encore visitées ; dans ce cas, on en choisit une au hasard, on abat la cloison, on se déplace sur la nouvelle case et on recommence le processus ;

— soit toutes les cases adjacentes ont déjà été visitées ; dans ce cas, on revient à la case précédemment visitée et on recommence le processus.

On s’arrête une fois revenu sur la case de départ.

Pour faire une représentation graphique, on ne dessine pas les cloisons, mais les déplacements, et cela par un trait blanc épais sur fond noir. On pourra employer la fonctionplotdu modulematplotlib.pyplot.

2

Références

Documents relatifs

L’algorithme suivant, qui est incomplet, doit permettre de v´ erifier si le nombre de Mersenne M n est premier, en utilisant le test de Lucas-Lehmer.. Recopier et compl´ eter

(Indication : on construira un premier point I de cette droite puis un deuxième point J)... Exercice

[r]

La nature d’une isom´ etrie fait r´ ef´ erence ` a la classification des isom´ etries de l’espace donn´ ee en cours.. Soient deux points A et B de C, distincts et non

Pour cela, on travaille avec l’hypoth` ese que les donn´ ees sont issues d’un mod` ele de m´ elange de distributions de Poisson2. Ecrire le mod` ele de m´ elange

[r]

Waar ben je geboren ? Dat weet ik niet !.. r) Mademoiselle, je voudrais un petit pain au jambon parce que j'ai faim. Juffrouw, ik zou graag een broodje met ham hebben omdat ik

Un [bon N= ADJECTIF/F= EPITHETE] feu flambait dans la grille, et une bouilloire en cuivre sifflait sur la plaque à côté.. Un [épais N=ADJECTIF/F= EPITHETE] tapis d’un beau