SolAlgoPileFileListeChainees.pdf

May 23, 2018 | Author: Abdirazack zaking | Category: Natural Number, Chess, Mathematics, Computing And Information Technology, Science


Comments



Description

EMSE-CMPISMEA Piles & Files à l’aide de listes chaînées Exercice I : Pile (LIFO : last in, first out) On désire réaliser la notion de pile à l'aide des 2 structures de données définies ci-après. 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 l’élément 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 élément de la pile. Il doit être nul si la pile est vide. Proposez un jeu d'algorithmes pour les opérations suivantes : • procédure initialiser (résultat Tpile pile) • procédure empiler (résultat Tpile pile, valeur Tobj E) • procédure depiler (résultat Tpile pile, résultat Tobj E) • fonction pilevide (valeur Tpile pile) retour booléen • fonction pilepleine (valeur Tpile pile) retour booléen Procédure initialiser 1. Procédure initialiser (résultat Tpile pile) 2. début 3. pile.premier ← nul 4. fin Procédure empiler 1. Procédure empiler (résultat Tpile pile, valeur Tobj E) 2. Telmt *pelmt 3. début 4. pelmt ← allouer(taille(Telmt)) 5. si pelmt = nul alors 6. Ecrire("erreur allocation mémoire : pile pleine ") 7. sinon 8. (*pelmt).obj ← E 9. (*pelmt).suiv ← pile.premier 10. pile.premier ← pelmt 11. finsi 12. fin 1 SolAlgoPileFileListeChainee pile. fonction pilepleine (valeur Tpile pile) retour booléen 2. début 4.suiv 10. Telmt *pelmt 3. fin Fonction pilevide 1. libérer(pelmt) 11. retour pile. Ecrire("pile vide") 6. fonction pilevide (valeur Tpile pile) retour booléen 2. pelmt ← pile. fin Fonction pilepleine 1.premier ← (*pelmt). si pilevide(pile) alors 5.premier 8. E ← (*pelmt).Procédure depiler 1. finsi 12.premier = nul 4. Procédure depiler (résultat Tpile pile. retour faux /* en toute rigueur. début 3. la pile sera pleine s'il n'y a plus de mémoire disponible */ 4. fin 2 SolAlgoPileFileListeChainee . sinon 7.obj 9. début 3. résultat Tobj E) 2. file. file. Telmt *pelmt 3.dernier ).suiv ← nul 10. début 3. si pelmt = nul alors 6. pelmt ← allouer(taille(Telmt)) 5. Il doit être nul si la file est vide. (*pelmt). first out) On désire réaliser la notion de file à l'aide de la structure de données définie ci-dessous : enreg Tfile Telmt *premier Telmt *dernier finenreg Les 2 champs du type Tfile ont pour signification : • premier : pointeur sur le premier élément de la file.dernier ← nul 5. sinon 8. valeur Tobj E) • procédure retirer (résultat Tfile file.Exercice II : File (FIFO: first in. Il doit être nul si la file est vide . finsi 15. résultat Tobj E) • fonction filevide (valeur Tfile file) retour booleen Procédure initialiser 1.premier ← nul 4. sinon 13. • dernier : pointeur sur le dernier élément de la file. si filevide(file) alors 11. Proposez un jeu d’algorithmes pour les opérations suivantes : • procédure initialiser (résultat Tfile file) • procédure ajouter (résultat Tfile file. valeur Tobj E) 2.suiv ← pelmt 14. file.premier ← pelmt 12.obj ← E 9. finsi 17.dernier ← pelmt 16. (*file. début 4. fin Procédure ajouter 1. fin 3 SolAlgoPileFileListeChainee . Procédure ajouter (résultat Tfile file. (*pelmt). file. Procédure initialiser (résultat Tfile file) 2. Ecrire(" erreur allocation mémoire " ) 7. file. fin 4 SolAlgoPileFileListeChainee .dernier ← nul 12. fonction filevide (valeur file pile) retour booléen 2. sinon 7. Ecrire(" file vide ") 6.Procédure retirer 1. Telmt *pelmt 3. si file.obj 9. pelmt ← file. finsi Fonction filevide 1.premier ← (*pelmt).premier = nul alors 11. finsi 13. début 3. E ← (*pelmt). la file sera pleine s'il n'y a plus de mémoire disponible */ 4. libérer(pelmt) 14. retour faux /* en toute rigueur. file. résultat Tobj E) 2. début 4. si filevide(file) alors 5. début 3.premier 8. Procédure retirer (résultat Tfile file. retour file.premier = nul 4. fin Fonction filepleine 1. fonction filepleine (valeur Tfile pile) retour booléen 2.suiv 10. le polynôme correspondant sera le polynôme zéro .8 -9 réel coef Tmonome *suiv finenreg Chaque monôme est décrit par un enregistrement de type Tmonome comportant les 3 champs suivants : • deg : entier représentant le degré du monôme . • suiv : pointeur sur le monôme suivant. enreg Tmonome 1280 1 P 0 entier deg 5. il est toujours placé à la fin puisque les monômes sont rangés dans un ordre décroissant 5 SolAlgoPileFileListeChainee . résultat Tpolynome1 pol3) Proposez des algorithmes pour les opérations additionner et multiplier utilisant la procédure ajouter de la question précédente. enreg Tpolynome Tmonome *prem finenreg Un polynôme sera décrit par une structure Tpolynome contenant un seul champ prem : • Si prem est nul. Les monômes de coefficient non nuls sont chaînés par ordre de degré décroissant. valeur Tpolynome1 pol2. résultat Tpolynome1 pol3) • procédure multiplier (valeur Tpolynome1 pol1.Exercice III : polynôme creux Dans cet exercice. On s’intéresse maintenant à l’implémentation des opérations additionner et multiplier dont les déclarations sont données ci-dessous. il pointera sur le monôme de plus haut degré dont le coefficient est non nul. • coef : réel représentant le coefficient du monôme . Ces opérations construisent le polynôme résultat somme (respectivement produit) de deux polynômes : • procédure additionner (valeur Tpolynome1 pol1. • Si prem est non nul.6 0. Proposez un autre algorithme pour l’opération additionner sans utiliser la procédure ajouter.8 x – 9 contient 1281 termes dont 3 seulement sont non nuls. en remarquant que chaque fois que l’on ajoute un monôme au polynôme résultat.6 x1280 + 0. valeur entier deg. Proposez un algorithme pour la procédure ajouter : • Procédure ajouter (résultat Tpolynome pol. valeur réel coef) qui ajoute à un polynôme (pol) la valeur d’un monôme défini par son degré (deg) et son coefficient (coef). Un polynôme creux est un polynôme contenant très peu de monômes non nuls. on se propose de développer un module permettant de manipuler des polynômes creux. valeur Tpolynome1 pol2. Exemple : P(x) = 5. (*pmon1). *pmon2 5.deg <> deg alors 15. 3.deg ← deg 20. valeur entier deg.suiv ← pmon_apres 22. tantque pmon_apres <> nul et (*pmon_apres). finsi 27. sinon 19. finsi 36. libérer(pmon_apres) 37. finsi 38. début 6. pmon_avant ← pmon_apres 11.coef + (*pmon2).coef ← (*pmon_ apres).premier 8.coef ← coef 21.suiv 12. si pmon = nul alors Ecrire(" erreur allocation mémoire ") 18. résultat Tpolynome pol3) 4. pmon_apres ← (*pmon_apres). fintantque 13.coef + coef 30. (*pmon).suiv ← (*pmon_ apres). pmon1 ← pol1. /* on a soit pmon_apres = nul soit (*pmon_ apres).prem 8. pmon_avant ← nul 9. (*pmon1).prem ← nul 7.deg < deg */ 16. si coef <> nul alors 7. si (*pmon_ apres). sinon 25.deg = deg */ 29. Procédure additionner ( valeur Tpolynome pol1. (*pmon). tantque pmon1 <> nul et pmon2 <> nul faire 10.prem 9. pmon ← allouer(taille(Tmonome)) 17. si pmon_avant <> nul alors 23. si pmon_avant <> nul alors 32.prem ← pmon 26.deg > deg faire 10. début 6.coef) 6 SolAlgoPileFileListeChainee . Tmonome *pmon1. pol3. (*pmon_avant).Procédure ajouter 1.suiv 35.prem ← (*pmon_ apres). si (pmon_apres = nul) ou (*pmon_apres). finsi 39.suiv ← pmon 24. 2. (*pmon_ apres). (*pmon_ avant). valeur Tpolynome pol2. on utilise la procédure ajouter de la question précédente.deg = (*pmon2). pmon_apres ← pol. finsi 28. Tmonome *pmon_apres 5. (*pmon). sinon 34. fin Procédure additionner : solution 1 Dans cette version. finsi 40.deg. Tmonome *pmon_avant 4. pol.coef = 0 alors /* il faut le supprimer */ 31. /* Cas pmon_apres = nul ou bien (*pmon_ apres).deg <= deg */ 14. ajouter (pol3. Tmonome *pmon 3. valeur réel coef) 2. si (*pmon1). Procédure ajouter (résultat Tpolynome pol. pmon2 ← pol2. pol. 1.deg alors 11.suiv 33. sinon /* on a (*pmon_ apres). deg alors 14. sinon 19.coef) 20. réel coef 6.coef) 15.coef) 30. 3. 2. pmon ← allouer(taille(Tmonome)) 31.coef 22. sinon 7 SolAlgoPileFileListeChainee . pmon1 ← (*pmon1).suiv 18.deg alors 16. pmon2 ← (*pmon2). deg ← (*pmon1). 12.suiv 31. si (*pmon1).deg = (*pmon2). fintantque 24.suiv 21. (*pmon1). Tmonome *pmon1.prem ← nul 9.suiv 27. ajouter (pol3. (*pmon2). /* Cas pmon1 = nul ou pmon2 = nul */ 25. *pmon2. si (*pmon1).coef 26. pmon1 ← (*pmon1). (*pmon2). finsi 23. pmon1 ← (*pmon1).suiv 17. pmon2 ← (*pmon2). Procédure additionner ( valeur Tpolynome pol1.deg alors 20. si coef <> 0 alors 30. pol3. pmon2 ← pol2.deg 16. coef ← (*pmon1).deg > (*pmon2).coef) 17. fin Procédure additionner : solution 2 Dans cette version. si (*pmon1). pmon1 ← (*pmon1). pmon2 ← (*pmon2). pmon1 ← pol1. valeur Tpolynome pol2.suiv 13. entier deg 7. pmon1← pmon2 27. sinon 19.prem 11.deg.coef + (*pmon2).prem 10. pmon3 ← nul 12. *pmon3.deg > (*pmon2). ajouter (pol3. résultat Tpolynome pol3) 4. finsi 29. sinon 15. si pmon1 = nul alors 26.suiv 14.deg. si pmon = nul alors Ecrire("erreur allocation mémoire") 32. début 8. on n'utilise pas la procédure ajouter 1. tantque pmon1 <> nul et pmon2 <> nul faire 13. deg ← (*pmon2).deg 25.suiv 18.deg. coef ← (*pmon2). deg ← (*pmon1). coef ← (*pmon1). fintantque 32. sinon 24. finsi 22. (*pmon1). *pmon 5. finsi 28. pmon2 ← (*pmon2).suiv 23. (*pmon1). ajouter (pol3. (*pmon1). tantque pmon1 <> nul faire 29. pmon1 ← (*pmon1). finsi 28.deg 21. finsi 60. (*pmon1). pmon1 ← (*pmon2). pmon ← allouer(taille(Tmonome)) 50.suiv 15. 3. (*pmon). si pmon3 <> nul alors 37.suiv 63. pmon1 ← (*pmon1). (*pmon).prem ← pmon 59.suiv ← nul 55. (*pmon1). pmon3 ← pmon 61. tantque pmon1 <> nul faire 9. (*pmon). sinon 52. Procédure multiplier ( valeur Tpolynome pol1. finsi 48. début 6. si pmon3 <> nul alors 56. sinon 58.deg ← deg 34. tantque pmon2 <> nul faire 11.deg.coef ← coef 54. fintantque 64. ajouter (pol3. pmon2 ← pol2. finsi 62. pol3. (*pmon).prem ← pmon 40. fin 8 SolAlgoPileFileListeChainee .deg ← deg 53. pmon1 ← pmon2 47. pmon3 ← pmon 42. fin Procédure multiplier : première version 1. fintantque 16. tantque pmon1 <> nul faire 49.prem 8.coef) 12.deg.prem ← nul 7. finsi 41. (*pmon3). *pmon2 5. si pmon = nul alors Ecrire("erreur allocation mémoire") 51. (*pmon2). (*pmon). pol3. fintantque 14. finsi 43. 33. pmon1 ← pol1. Tmonome *pmon1.suiv ← nul 36. (*pmon).suiv ← pmon 57.coef * (*pmon2).prem 10. pmon2 ← (*pmon2). résultat Tpolynome pol3) 4. si pmon1 = nul alors 46. valeur Tpolynome pol2. 2. finsi 44. pol3. (*pmon3).suiv ← pmon 38.coef ← coef 35.suiv 13. sinon 39. fintantque 45. fintantque 29. coef ← (*pmon). pmon3 ← nul 13. booléen fini 6. (*pmon3). si (*pmon_apres). tantque pmon_apres <> nul et (*pmon_apres). pmon2 ← pol2. libérer(pmon_apres) 50. tantque pmon2 <> nul et fini = faux faire 22. sinon 34. (*pmon).prem ← nul 10. (*pmon).suiv ← pmon_apres 42. pmon3 ← pol3. sinon 45. pmon3 ← pmon 38. fintantque 54. *pmon2. début 9. entier deg 7. Procédure multiplier ( valeur Tpolynome pol1. si pmon = nul alors Ecrire("erreur allocation mémoire") 32. deg ← (*pmon1).coef ← (*pmon_apres). pmon ← allouer(taille(Tmonome)) 31.suiv 28. pol3. fin 9 SolAlgoPileFileListeChainee .suiv ← pmon 43. finsi 44. finsi 18. pmon2 ← (*pmon2). *pmon. 2. sinon 41. pmon_apres ← pmon3 25.coef 24.suiv 53.deg > deg faire 26. finsi 52. réel coef 8. pmon1 ← pol1. pol3. Tmonome *pmon1. si pmon3 = nul alors 37.deg ← deg 35. /* Cas (*pmon_apres). fintantque 56. tantque pmon1 <> nul et fini = faux faire 19. *pmon3. fini ← faux 15.prem 11. fini ← vrai 17.coef ← coef 36. si pmon2 <> nul alors 14. pmon2 ← pol2.deg <> deg alors 30. fini ← vrai 33. pmon1 ← (*pol1).deg + (*pmon2).coef + coef 47. sinon 16. (*pmon).suiv ← (*pmon_apres). résultat Tpolynome pol3) 4.suiv 55. (*pmon_apres).prem 12.coef = 0 alors 48.deg = deg */ 46. pmon3 ← pmon_apres 27.premier 21. *pmon_apres 5. finsi 51. 3. pmon_apres ← (*pmon_apres). (*pmon3).coef * (*pmon).suiv 49.prem ← pmon 39.suiv ← nul 40.Procédure multiplier : deuxième version 1. valeur Tpolynome pol2.prem 20. si pmon_apres = nul ou (*pmon_apres). (*pmon).deg 23.
Copyright © 2024 DOKUMEN.SITE Inc.