Escolar Documentos
Profissional Documentos
Cultura Documentos
ISMEA
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.
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)
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.
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.
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.
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
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
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
8 SolAlgoPileFileListeChainee
Procdure multiplier : deuxime version
9 SolAlgoPileFileListeChainee