Você está na página 1de 9

EMSE-CMP

ISMEA

Piles & Files laide de listes chanes

Exercice I : Pile (LIFO : last in, first out)

On dsire raliser la notion de pile l'aide des 2 structures de donnes dfinies ci-aprs.

enreg Telmt
Tobj obj
Telmt *suiv
finenreg
Le type Telmt est un enregistrement comportant 2 champs :
obj : contient un objet de type Tobj ;
suiv : pointeur sur llment suivant de la liste.

et
enreg Tpile
Telmt *premier
finenreg
Le type Tpile est un enregistrement comportant 1 seul champ :
premier : pointeur sur le premier lment de la pile. Il doit tre nul si la pile est vide.

Proposez un jeu d'algorithmes pour les oprations suivantes :


procdure initialiser (rsultat Tpile pile)
procdure empiler (rsultat Tpile pile, valeur Tobj E)
procdure depiler (rsultat Tpile pile, rsultat Tobj E)
fonction pilevide (valeur Tpile pile) retour boolen
fonction pilepleine (valeur Tpile pile) retour boolen

Procdure initialiser
1. Procdure initialiser (rsultat Tpile pile)
2. dbut
3. pile.premier nul
4. fin

Procdure empiler
1. Procdure empiler (rsultat Tpile pile, valeur Tobj E)
2. Telmt *pelmt
3. dbut
4. pelmt allouer(taille(Telmt))
5. si pelmt = nul alors
6. Ecrire("erreur allocation mmoire : pile pleine ")
7. sinon
8. (*pelmt).obj E
9. (*pelmt).suiv pile.premier
10. pile.premier pelmt
11. finsi
12. fin

1 SolAlgoPileFileListeChainee
Procdure depiler
1. Procdure depiler (rsultat Tpile pile, rsultat Tobj E)
2. Telmt *pelmt
3. dbut
4. si pilevide(pile) alors
5. Ecrire("pile vide")
6. sinon
7. pelmt pile.premier
8. E (*pelmt).obj
9. pile.premier (*pelmt).suiv
10. librer(pelmt)
11. finsi
12. fin

Fonction pilevide
1. fonction pilevide (valeur Tpile pile) retour boolen
2. dbut
3. retour pile.premier = nul
4. fin

Fonction pilepleine
1. fonction pilepleine (valeur Tpile pile) retour boolen
2. dbut
3. retour faux /* en toute rigueur, la pile sera pleine s'il n'y a plus de mmoire disponible */
4. fin

2 SolAlgoPileFileListeChainee
Exercice II : File (FIFO: first in, first out)

On dsire raliser la notion de file l'aide de la structure de donnes dfinie ci-dessous :

enreg Tfile
Telmt *premier
Telmt *dernier
finenreg
Les 2 champs du type Tfile ont pour signification :
premier : pointeur sur le premier lment de la file. Il doit tre nul si la file est vide ;
dernier : pointeur sur le dernier lment de la file. Il doit tre nul si la file est vide.

Proposez un jeu dalgorithmes pour les oprations suivantes :


procdure initialiser (rsultat Tfile file)
procdure ajouter (rsultat Tfile file, valeur Tobj E)
procdure retirer (rsultat Tfile file, rsultat Tobj E)
fonction filevide (valeur Tfile file) retour booleen

Procdure initialiser
1. Procdure initialiser (rsultat Tfile file)
2. dbut
3. file.premier nul
4. file.dernier nul
5. fin

Procdure ajouter
1. Procdure ajouter (rsultat Tfile file, valeur Tobj E)
2. Telmt *pelmt
3. dbut
4. pelmt allouer(taille(Telmt))
5. si pelmt = nul alors
6. Ecrire(" erreur allocation mmoire " )
7. sinon
8. (*pelmt).obj E
9. (*pelmt).suiv nul
10. si filevide(file) alors
11. file.premier pelmt
12. sinon
13. (*file.dernier ).suiv pelmt
14. finsi
15. file.dernier pelmt
16. finsi
17. fin

3 SolAlgoPileFileListeChainee
Procdure retirer
1. Procdure retirer (rsultat Tfile file, rsultat Tobj E)
2. Telmt *pelmt
3. dbut
4. si filevide(file) alors
5. Ecrire(" file vide ")
6. sinon
7. pelmt file.premier
8. E (*pelmt).obj
9. file.premier (*pelmt).suiv
10. si file.premier = nul alors
11. file.dernier nul
12. finsi
13. librer(pelmt)
14. finsi

Fonction filevide
1. fonction filevide (valeur file pile) retour boolen
2. dbut
3. retour file.premier = nul
4. fin

Fonction filepleine
1. fonction filepleine (valeur Tfile pile) retour boolen
2. dbut
3. retour faux /* en toute rigueur, la file sera pleine s'il n'y a plus de mmoire disponible */
4. fin

4 SolAlgoPileFileListeChainee
Exercice III : polynme creux
Dans cet exercice, on se propose de dvelopper un module permettant de manipuler des polynmes creux. Un
polynme creux est un polynme contenant trs peu de monmes non nuls.

Exemple : P(x) = 5.6 x1280 + 0.8 x 9 contient 1281 termes dont 3 seulement sont non nuls.

enreg Tmonome 1280 1


P 0
entier deg 5.6 0.8 -9
rel coef
Tmonome *suiv
finenreg

Chaque monme est dcrit par un enregistrement de type Tmonome comportant les 3 champs suivants :
deg : entier reprsentant le degr du monme ;
coef : rel reprsentant le coefficient du monme ;
suiv : pointeur sur le monme suivant.

enreg Tpolynome
Tmonome *prem
finenreg

Un polynme sera dcrit par une structure Tpolynome contenant un seul champ prem :
Si prem est nul, le polynme correspondant sera le polynme zro ;
Si prem est non nul, il pointera sur le monme de plus haut degr dont le coefficient est non nul. Les
monmes de coefficient non nuls sont chans par ordre de degr dcroissant.

Proposez un algorithme pour la procdure ajouter :


Procdure ajouter (rsultat Tpolynome pol, valeur entier deg, valeur rel coef)
qui ajoute un polynme (pol) la valeur dun monme dfini par son degr (deg) et son coefficient (coef).

On sintresse maintenant limplmentation des oprations additionner et multiplier dont les dclarations sont
donnes ci-dessous. Ces oprations construisent le polynme rsultat somme (respectivement produit) de deux
polynmes :
procdure additionner (valeur Tpolynome1 pol1, valeur Tpolynome1 pol2, rsultat Tpolynome1 pol3)
procdure multiplier (valeur Tpolynome1 pol1, valeur Tpolynome1 pol2, rsultat Tpolynome1 pol3)

Proposez des algorithmes pour les oprations additionner et multiplier utilisant la procdure ajouter de la
question prcdente.

Proposez un autre algorithme pour lopration additionner sans utiliser la procdure ajouter, en remarquant que
chaque fois que lon ajoute un monme au polynme rsultat, il est toujours plac la fin puisque les monmes
sont rangs dans un ordre dcroissant

5 SolAlgoPileFileListeChainee
Procdure ajouter

1. Procdure ajouter (rsultat Tpolynome pol, valeur entier deg, valeur rel coef)
2. Tmonome *pmon
3. Tmonome *pmon_avant
4. Tmonome *pmon_apres
5. dbut
6. si coef <> nul alors
7. pmon_apres pol.premier
8. pmon_avant nul
9. tantque pmon_apres <> nul et (*pmon_apres).deg > deg faire
10. pmon_avant pmon_apres
11. pmon_apres (*pmon_apres).suiv
12. fintantque
13. /* Cas pmon_apres = nul ou bien (*pmon_ apres).deg <= deg */
14. si (pmon_apres = nul) ou (*pmon_apres).deg <> deg alors
15. /* on a soit pmon_apres = nul soit (*pmon_ apres).deg < deg */
16. pmon allouer(taille(Tmonome))
17. si pmon = nul alors Ecrire(" erreur allocation mmoire ")
18. sinon
19. (*pmon).deg deg
20. (*pmon).coef coef
21. (*pmon).suiv pmon_apres
22. si pmon_avant <> nul alors
23. (*pmon_avant).suiv pmon
24. sinon
25. pol.prem pmon
26. finsi
27. finsi
28. sinon /* on a (*pmon_ apres).deg = deg */
29. (*pmon_ apres).coef (*pmon_ apres).coef + coef
30. si (*pmon_ apres).coef = 0 alors /* il faut le supprimer */
31. si pmon_avant <> nul alors
32. (*pmon_ avant).suiv (*pmon_ apres).suiv
33. sinon
34. pol.prem (*pmon_ apres).suiv
35. finsi
36. librer(pmon_apres)
37. finsi
38. finsi
39. finsi
40. fin

Procdure additionner : solution 1


Dans cette version, on utilise la procdure ajouter de la question prcdente.

1. Procdure additionner ( valeur Tpolynome pol1,


2. valeur Tpolynome pol2,
3. rsultat Tpolynome pol3)
4. Tmonome *pmon1, *pmon2
5. dbut
6. pol3.prem nul
7. pmon1 pol1.prem
8. pmon2 pol2.prem
9. tantque pmon1 <> nul et pmon2 <> nul faire
10. si (*pmon1).deg = (*pmon2).deg alors
11. ajouter (pol3, (*pmon1).deg, (*pmon1).coef + (*pmon2).coef)

6 SolAlgoPileFileListeChainee
12. pmon1 (*pmon1).suiv
13. pmon2 (*pmon2).suiv
14. sinon
15. si (*pmon1).deg > (*pmon2).deg alors
16. ajouter (pol3, (*pmon1).deg, (*pmon1).coef)
17. pmon1 (*pmon1).suiv
18. sinon
19. ajouter (pol3, (*pmon2).deg, (*pmon2).coef)
20. pmon2 (*pmon2).suiv
21. finsi
22. finsi
23. fintantque
24. /* Cas pmon1 = nul ou pmon2 = nul */
25. si pmon1 = nul alors
26. pmon1 pmon2
27. finsi
28. tantque pmon1 <> nul faire
29. ajouter (pol3, (*pmon1).deg, (*pmon1).coef)
30. pmon1 (*pmon1).suiv
31. fintantque
32. fin

Procdure additionner : solution 2


Dans cette version, on n'utilise pas la procdure ajouter

1. Procdure additionner ( valeur Tpolynome pol1,


2. valeur Tpolynome pol2,
3. rsultat Tpolynome pol3)
4. Tmonome *pmon1, *pmon2, *pmon3, *pmon
5. rel coef
6. entier deg
7. dbut
8. pol3.prem nul
9. pmon1 pol1.prem
10. pmon2 pol2.prem
11. pmon3 nul
12. tantque pmon1 <> nul et pmon2 <> nul faire
13. si (*pmon1).deg = (*pmon2).deg alors
14. coef (*pmon1).coef + (*pmon2).coef)
15. deg (*pmon1).deg
16. pmon1 (*pmon1).suiv
17. pmon2 (*pmon2).suiv
18. sinon
19. si (*pmon1).deg > (*pmon2).deg alors
20. deg (*pmon1).deg
21. coef (*pmon1).coef
22. pmon1 (*pmon1).suiv
23. sinon
24. deg (*pmon2).deg
25. coef (*pmon2).coef
26. pmon2 (*pmon2).suiv
27. finsi
28. finsi
29. si coef <> 0 alors
30. pmon allouer(taille(Tmonome))
31. si pmon = nul alors Ecrire("erreur allocation mmoire")
32. sinon

7 SolAlgoPileFileListeChainee
33. (*pmon).deg deg
34. (*pmon).coef coef
35. (*pmon).suiv nul
36. si pmon3 <> nul alors
37. (*pmon3).suiv pmon
38. sinon
39. pol3.prem pmon
40. finsi
41. pmon3 pmon
42. finsi
43. finsi
44. fintantque
45. si pmon1 = nul alors
46. pmon1 pmon2
47. finsi
48. tantque pmon1 <> nul faire
49. pmon allouer(taille(Tmonome))
50. si pmon = nul alors Ecrire("erreur allocation mmoire")
51. sinon
52. (*pmon).deg deg
53. (*pmon).coef coef
54. (*pmon).suiv nul
55. si pmon3 <> nul alors
56. (*pmon3).suiv pmon
57. sinon
58. pol3.prem pmon
59. finsi
60. pmon3 pmon
61. finsi
62. pmon1 (*pmon1).suiv
63. fintantque
64. fin

Procdure multiplier : premire version

1. Procdure multiplier ( valeur Tpolynome pol1,


2. valeur Tpolynome pol2,
3. rsultat Tpolynome pol3)
4. Tmonome *pmon1, *pmon2
5. dbut
6. pol3.prem nul
7. pmon1 pol1.prem
8. tantque pmon1 <> nul faire
9. pmon2 pol2.prem
10. tantque pmon2 <> nul faire
11. ajouter (pol3, (*pmon1).deg, (*pmon2).deg, (*pmon1).coef * (*pmon2).coef)
12. pmon2 (*pmon2).suiv
13. fintantque
14. pmon1 (*pmon2).suiv
15. fintantque
16. fin

8 SolAlgoPileFileListeChainee
Procdure multiplier : deuxime version

1. Procdure multiplier ( valeur Tpolynome pol1,


2. valeur Tpolynome pol2,
3. rsultat Tpolynome pol3)
4. Tmonome *pmon1, *pmon2, *pmon3, *pmon, *pmon_apres
5. boolen fini
6. entier deg
7. rel coef
8. dbut
9. pol3.prem nul
10. pmon1 pol1.prem
11. pmon2 pol2.prem
12. pmon3 nul
13. si pmon2 <> nul alors
14. fini faux
15. sinon
16. fini vrai
17. finsi
18. tantque pmon1 <> nul et fini = faux faire
19. pmon2 pol2.prem
20. pmon3 pol3.premier
21. tantque pmon2 <> nul et fini = faux faire
22. deg (*pmon1).deg + (*pmon2).deg
23. coef (*pmon).coef * (*pmon).coef
24. pmon_apres pmon3
25. tantque pmon_apres <> nul et (*pmon_apres).deg > deg faire
26. pmon3 pmon_apres
27. pmon_apres (*pmon_apres).suiv
28. fintantque
29. si pmon_apres = nul ou (*pmon_apres).deg <> deg alors
30. pmon allouer(taille(Tmonome))
31. si pmon = nul alors Ecrire("erreur allocation mmoire")
32. fini vrai
33. sinon
34. (*pmon).deg deg
35. (*pmon).coef coef
36. si pmon3 = nul alors
37. pmon3 pmon
38. pol3.prem pmon
39. (*pmon).suiv nul
40. sinon
41. (*pmon).suiv pmon_apres
42. (*pmon3).suiv pmon
43. finsi
44. sinon
45. /* Cas (*pmon_apres).deg = deg */
46. (*pmon_apres).coef (*pmon_apres).coef + coef
47. si (*pmon_apres).coef = 0 alors
48. (*pmon3).suiv (*pmon_apres).suiv
49. librer(pmon_apres)
50. finsi
51. finsi
52. pmon2 (*pmon2).suiv
53. fintantque
54. pmon1 (*pol1).suiv
55. fintantque
56. fin

9 SolAlgoPileFileListeChainee

Você também pode gostar