Piles et Files : Modélisation et Algorithmes
Piles et Files : Modélisation et Algorithmes
G D
Exercice 3. (Editeur de texte) e
s
a e
B t
5. Rechercher la première occurrence d'un caractère donné C à partir e S
de la position courante, et positionner le curseur juste après cette d t
r
occurrence si elle existe, et en fin de texte sinon, e u
u c
Procédure Recherche (D, G : Pile, C : caractère) q t
Var i u
Début m r
Arret := faux h e
t s
Tant que Sommet(D) <> ‘$’ et NON Arret faire
i
x := Dépiler(D) r d
Empiler (G, x) o e
si x = C alors g
Arret vrai l D
fsi A $
Fait
Fin G D
Exercice 3. (Editeur de texte) e
s
a e
B t
6. Aller au début de la ligne (curseur devant le premier caractère de la e S
ligne), d t
r
e u
u c
q t
Procédure Debut_Ligne (D, G : Pile) i u
Var m r
h e
Début t s
Tant que NON pile_vide (G) faire i
r d
Empiler (D, Dépiler(G))
o e
Fait g
Fin l D
A $
G D
Exercice 3. (Editeur de texte) e
s
a e
B t
7. de plus, lorsqu'on utilise un éditeur de texte, on dispose d'une e S
touche qui permet d'effacer le caractère que l'on vient de frapper d t
r
(par exemple "BackSpace"). Notons '#' ce caractère. e u
u c
Une autre touche permet de tout effacer jusqu'au début de la ligne. q t
Notons '%' ce caractère. i u
m r
La fin d'une ligne sera indiquée par le caractère '$'. h e
t s
Exemple : "Jem# m'euh%Je m'#euh## suit#s trop#mp&#é$" i
r d
sera lu comme : "Je me suis trompé" o e
g
Ecrire un algorithme qui permet de lire une ligne de texte avec ce l D
mécanisme et affiche la ligne réelle (sans les caractères A $
d’effacement).
Indication : On utilisera une pile pour traiter la chaîne au fur et à D G
mesure de sa lecture,
Exercice 3. (Editeur de texte)
PROGRAMME Edit
Var P : Pile; C : caractère
Début
Lire (C)
Tant que C <> ‘$’ faire Procédure supp_car(P : Pile)
Si C = ‘#’ alors Début
supp_car(P) si NON pile_vide(P) alors
Sinon
Dépiler (P)
Si C = ‘%’ alors
supp_ligne(P) fsi
Sinon Fin
Empiler (P, C)
Fsi
Fsi
Lire (C)
Fait Procédure supp_ligne(P : Pile)
Tant que NON pile_vide(P) faire Début
Empiler (R, Dépiler(P))
tant que NON pile_vide(P) faire
Fait
Tant que NON pile_vide(R) faire Dépiler (P)
Ecrire (Dépiler(R)) fait
Fait Fin
Fin
Exercice 4
Evaluation d’une expression Arithmétique
Exercice 4. (Evaluation d’une expression Arithmétique)
Etant donnée une expression arithmétique représentée par une chaîne de caractères.
1) Ecrire une procédure qui permet le passage de la forme infixée à la forme postfixée.
Exemple : l'expression "3*7" → "3 7 *"
"3*7+2*(9-6)" → "3 7 * 2 9 6 - * +"
Indication : L’ordre des opérandes est le même dans les deux notations, donc on peut
les écrire directement. Tandis que pour les opérateurs et les parenthèses, il faudra les
stocker dans la pile jusqu’au moment opportun pour les dépiler et les afficher.
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
a+b-c ab+c-
A*b/c ab*c/
a+b*c abc*+
a+b*c-d abc*+d-
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g) *
/ -
- c + /
a b d e f g
a b - c / d e + f g / - *
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
+ - / *(opérateur)
1) Tant qu’il y a un opérateur sur le sommet de la pile et qu’il soit
prioritaire :
dépiler les opérateurs dans la Postfix
2) Empiler l’opérateur o2 de la Infixée dans la pile,
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
a, b, c, d, … (opérande)
1) Ajouter le caractère à la Postfix.
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
( [parenthèse ouvrante]
1) Ajouter le caractère ( sur la pile.
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
) [parenthèse fermante]
1) Tant qu’il y a un opérateur sur le sommet de la pile :
dépiler l’opérateur dans la Postfix
2) Si le sommet de la pile est une parenthèse ouvrante :
dépiler l’opérateur (non dans la Postfix)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé
parenthèses
ouvrantes
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé
parenthèses
ouvrantes
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé
parenthèses
ouvrantes
(
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
a (
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé - parenthèses
ouvrantes
a (
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab (
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé
parenthèses
ouvrantes
ab- /
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c /
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé
parenthèses
ouvrantes
ab-c/ *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé ( parenthèses
ouvrantes
ab-c/ *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c/d *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
+ opérateurs
+
Postfix chaîne de sortie post-fixé ( parenthèses
ouvrantes
ab-c/d *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c/de *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
- opérateurs
+
Postfix chaîne de sortie post-fixé ( parenthèses
ouvrantes
ab-c/de+ *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c/de+f *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c/de+f *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c/de+fg *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
ab-c/de+fg/- *
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
(a-b)/c*(d+e-f/g)
pile des
opérateurs
+
Postfix chaîne de sortie post-fixé
parenthèses
ouvrantes
ab-c/de+fg/-*
P
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Si top(pl) = ‘(‘ alors
Message erreur "mauvais parenthèsage"
Sinon
Ajouter_ch(Postfix, Dépiler(pl))
FinSi
FinTantque
Infix_Postfix := Postfix
FIN
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Si top(pl) = ‘(‘ alors
Message erreur "mauvais parenthèsage"
Sinon
Ajouter_ch(Postfix, Dépiler(pl))
FinSi
FinTantque
Infix_Postfix := Postfix
FIN
Infix_Postfix (Infix : Chaîne) : Chaîne
Vartmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage"
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Si top(pl) = ‘(‘ alors
Message erreur "mauvais parenthèsage"
Sinon
Ajouter_ch(Postfix, Dépiler(pl))
FinSi
FinTantque
Infix_Postfix := Postfix
FIN
Infix_Postfix (Infix : Chaîne) : Chaîne
Var tmp : caractère # tompon pour le dépilement de la pile
Postfix : chaîne # chaîne de sortie post-fixé
pl : pile # pile des opérateurs + parenthèses ouvrantes
i : entier # compteur : parcoure de la chaîne in-fixée
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
Tant que (non vide(pl) et top(pl) <> ‘(‘ et Prioritaire(top(pl), [Link][i])) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
Empiler(pl, [Link][i])
Sinon si Opérande([Link][i]) alors
Ajouter_ch(Postfix, [Link][i])
Sinon si [Link][i] = ‘(‘ alors
Empiler(pl, [Link][i])
Sinon si [Link][i] = ‘)‘ alors
Tant que (non vide(pl)) et (top(pl) <> ‘(‘) faire
Ajouter_ch(Postfix, Dépiler(pl))
FinTanque
(a-b)/c*(d+e-f/g)
Si top(pl) = ‘(‘ alors
tmp := Dépiler(pl)
sinon
Message erreur "mauvais parenthèsage" ab-c/de+fg/-*
FinSi
FinSi
FinPour
Tant que (non vide(pl)) faire
Si top(pl) = ‘(‘ alors
Message erreur "mauvais parenthèsage"
Sinon
Ajouter_ch(Postfix, Dépiler(pl))
FinSi
FinTantque
Infix_Postfix := Postfix
FIN
Exercice 4. (Evaluation d’une expression Arithmétique)
Etant donnée une expression arithmétique représentée par une chaîne de caractères.
1) Ecrire une procédure qui permet le passage de la forme infixée à la forme postfixée.
Exemple : l'expression "3*7" → "3 7 *"
"3*7+2*(9-6)" → "3 7 * 2 9 6 - * +"
2) Ecrire une procédure qui permet d’évaluer une expression postfixée
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
a, b, c, d, … (opérande)
1) ajout de l’expression a la pile des opérandes,
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
+ - / * (opérateur)
1) récupération des deux opérandes (x, y) sur la pile,
2) calcul de l’expression avec l’opérateur sur la chaîne post-fixée,
3) ajout du résultat a la pile des opérandes,
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
a b a – b = r1
opérande opérande expression
b pile des
a opérandes
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
r1 c r1 / c = r2
opérande opérande expression
c pile des
r1 opérandes
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
e
d e d + e = r3
opérande opérande expression
d pile des
r2 opérandes
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
f
opérande opérande expression
r3 pile des
r2 opérandes
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
r4
r3 r4 r3 - r4 = r5
opérande opérande expression
r3 pile des
r2 opérandes
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
r2 r5 r2 * r5 = r6
opérande opérande expression
r5 pile des
r2 opérandes
O1 O2 Calcul
P
Exercice 4. (Evaluation d’une expression Arithmétique)
Exemple :
ab-c/de+fg/-*
O1 O2 Calcul
P
Fonction Evaluer_Postfix (postfix : Chaîne) : Réel
Var pl : pile # pile d’opérande
i : entier # compteur : parcoure de la chaîne post-fixée
x, y, z : Réel # tmp. de calcul
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
x := Dépiler(pl)
y := Dépiler(pl)
z := Calcul([Link][i], x, y)
Empiler(pl, z)
Sinon si Opérande([Link][i]) alors
Empiler(pl, [Link][i])
FinSi
FinPour
Evaluer_Infix_Postfix := Dépiler(pl)
FIN
Fonction Evaluer_Postfix (postfix : Chaîne) : Réel
Var pl : pile # pile d’opérande
i : entier # compteur : parcoure de la chaîne post-fixée
x, y, z : Réel # tmp. de calcul
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
x := Dépiler(pl)
y := Dépiler(pl)
z := Calcul([Link][i], x, y)
Empiler(pl, z)
Sinon si Opérande([Link][i]) alors
Empiler(pl, [Link][i])
FinSi
FinPour
Evaluer_Infix_Postfix := Dépiler(pl)
FIN
Fonction Evaluer_Postfix (postfix : Chaîne) : Réel
Var pl : pile # pile d’opérande
i : entier # compteur : parcoure de la chaîne post-fixée
x, y, z : Réel # tmp. de calcul
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
x := Dépiler(pl)
y := Dépiler(pl)
z := Calcul([Link][i], x, y)
Empiler(pl, z)
Sinon si Opérande([Link][i]) alors
Empiler(pl, [Link][i])
FinSi
FinPour
Evaluer_Infix_Postfix := Dépiler(pl)
FIN
Fonction Evaluer_Postfix (postfix : Chaîne) : Réel
Var pl : pile # pile d’opérande
i : entier # compteur : parcoure de la chaîne post-fixée
x, y, z : Réel # tmp. de calcul
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
x := Dépiler(pl)
y := Dépiler(pl)
z := Calcul([Link][i], x, y)
Empiler(pl, z)
Sinon si Opérande([Link][i]) alors
Empiler(pl, [Link][i])
FinSi
FinPour
Evaluer_Infix_Postfix := Dépiler(pl)
FIN
Fonction Evaluer_Postfix (postfix : Chaîne) : Réel
Var pl : pile # pile d’opérande
i : entier # compteur : parcoure de la chaîne post-fixée
x, y, z : Réel # tmp. de calcul
Début
pour i de 1 à [Link] faire
si Opérateur([Link][i]) alors
x := Dépiler(pl)
y := Dépiler(pl)
z := Calcul([Link][i], x, y)
Empiler(pl, z)
Sinon si Opérande([Link][i]) alors
Empiler(pl, [Link][i])
FinSi
FinPour
Evaluer_Infix_Postfix := Dépiler(pl)
FIN
Exercice 5
Application File : Tri FIFO
Exercice 5. (Application File : Tri FIFO)
Etape 1 :
4 1 8 2 3 7 9 5 6
Etape 1 :
4 1 8 2 3 7 9 5 6
Etape 2 :
4 1 8 2 3 7 9 5 6
Etape 2 :
8 2 3 7 9 5 6
Etape 3 :
8 2 3 7 9 5 6 1
insérer la liste 4
fusionnée dans la file
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
8 2 3 7 9 5 6 1
Etape 2 :
3 7 9 5 6 1
Etape 3 :
3 7 9 5 6 1 2
insérer la liste 4 8
fusionnée dans la file
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
3 7 9 5 6 1 2
Etape 2 :
9 5 6 1 2
Etape 3 :
9 5 6 1 2 3
insérer la liste 4 8 7
fusionnée dans la file
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
9 5 6 1 2 3
Etape 2 :
6 1 2 3
Etape 3 :
6 1 2 3 5
insérer la liste 4 8 7 9
fusionnée dans la file
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
6 1 2 3 5
Etape 2 :
2 3 5
Etape 3 :
2 3 5 1
insérer la liste 8 7 9 4
fusionnée dans la file 6
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
2 3 5 1
Etape 2 :
5 1
Etape 3 :
5 1 2
insérer la liste 9 4 3
fusionnée dans la file 6 7
8
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
5 1 2
Etape 2 :
2
Etape 3 :
2 1
insérer la liste fusionnée 3 4
dans la file
7 5
8 6
9
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
2 1
9
Exercice 5. (Application File : Tri FIFO)
Etape 2 :
Etape 3 :
1
insérer la liste fusionnée 2
dans la file
3
9
Exercice 5. (Application File : Tri FIFO)