INSIA – ING 1 Algorithmique – série d`exercices n°2

publicité
INSIA – ING 1
Algorithmique – série d’exercices n°2
TAD : chaînes de caractères, piles et files
Les chaînes de caractères
Présentation
Une chaîne de caractères est un nouveau type : « Chaîne »
Primitives d’utilisation des chaînes de caractères :
•
Longueur (ch) : entier // renvoie la longueur d’une chaîne.
•
Concat (ch1, ch2) : chaîne // renvoie la concatenation de deux chaînes (ou plus).
•
Substr (ch, debut, lgr) : chaîne // renvoie le morceau de chaîne commençant en « début » et de longueur
« lgr ».
Quand on affecte une chaîne dans un caractère, le caractère prend la valeur du premier caractère de la chaîne.
On peut appliquer les primitives de chaînes aux caractères.
Exercice 1
Écrire un algorithme qui détermine si une chaîne est un palindrome.
Exercice 2
Ecrire un algorithme qui détermine si une chaîne est un anagramme d’une autre.
Exercice 3
Ecrire un algorithme qui compte les occurrences d’un mot dans un texte.
Piles
Présentation
Une pile est une structure de données permettant de gérer des collections d’éléments de même type, le principe
d’utilisation étant que le dernier entré sera le premier sorti : LIFO (Last In, First Out, principe de la pile
d’assiettes).
Une pile est un nouveau type : typPile.
Les primitives permettant d’utiliser une pile sont les suivantes :
•
initPile (p) // permet d’initialiser une pile.
•
pileVide (p) : booleen // dit si la pile est vide
•
pilePleine (p) : booleen // dit si la pile est pleine
•
dépiler (p, val, ok) // dépile la valeur val de la pile p. Ok vaut faux si la pile était vide. ES :p :typPile.
S:val:typeAuChoix. S:ok:booleen.
•
empiler (p, val, ok) // empile une valeur val dans la pile p. Ok vaut faut si la pile était pleine. ES :p :typPile.
E:val:typAuChoix. S :ok :booleen.
Exercice 1
INSIA – ALGORITHMIQUE – ING 1 – Série d’exercices n°1 - 2008-2009 - page 1/2 - Bertrand LIAUDET
La notation algébrique classique est la suivante : 5* ( (9 + 8)*(4 + 6) + 7 )
Elle peut être transformée par une écriture dite en « polonaise inversée » : 5 9 8 + 4 6 + * 7 + *
Ou encore : 9 8 + 4 6 + * 7 + 5 *
En notation polonaise inversée (notation post-fixée), l’opérateur figure après les opérandes sur lesquels il agit.
La notation est gérée comme une pile : on empile les opérandes, et on en dépile deux dès qu’on tombe sur un
opérateur, on fait l’opération et on empile le résultat. Par exemple : on empile 9, puis 8, puis on les dépile, on fait
l’opération 9+8 et on empile le résultat 17. Puis on empile 4, puis 6 et on les dépile, etc.
Ecrire un algorithme qui gère avec une pile une calculette en polonaise inversée. On considèrera que la calculette
ne contient les touches suivantes :
Chiffres : 10 touches pour constituer les opérandes : 0 à 9. (On ne gère pas la virgule, on ne gère la saisie que de
chiffres <10).
Opérateurs binaires : 4 touches d’opérateur : +, -, *, / . (On ne gère pas les opérateurs unaires).
Annuler : 1 touche « ESC » pour tout annuler.
Ecrire l’algorithme de la calculette en utilisant une pile et les primitives de pile. En cas d’erreur, on annulera
tout le calcul en cours.
Exercice 2
•
Définir la structure de donnée statique nécessaire pour gérer une pile (structure avec un tableau).
•
Ecrire les algorithmes des primitives de gestion des piles.
Files
Présentation
Une file est une structure de données permettant de gérer des collections d’éléments de même type, le principe
d’utilisation étant que le premier entré sera le premier sorti : FIFO (FIRST In, First Out, principe de la file
d’attente).
Une pile est un nouveau type : typFile.
Les primitives permettant d’utiliser une pile sont les suivantes :
•
initFile (p) // permet d’initialiser une pile.
•
fileVide (p) : booleen // dit si la file est vide
•
filePleine (p) : booleen // dit si la file est pleine
•
défiler (f, val, ok) // défile la valeur val de la file f. Ok vaut faux si la file était vide. ES :p :typFile.
S:val:typeAuChoix. S:ok:booleen.
•
enfiler (f, val, ok) // emfile une valeur val dans la file f. Ok vaut faut si la file était pleine. ES :p :typFile.
E:val:typAuChoix. S :ok :booleen.
Exercice 1
Ecrire un algorithme qui permette de d’afficher tous les éléments d’une file en conservant la file et en n’utilisant
que les primitives de file.
Exercice 2
•
Définir la structure de donnée statique nécessaire pour gérer une file (structure avec un tableau circulaire).
•
Ecrire les algorithmes des primitives de gestion des files.
INSIA – ALGORITHMIQUE – ING 1 – Série d’exercices n°1 - 2008-2009 - page 2/2 - Bertrand LIAUDET
Téléchargement