! " #$%& '()&('* ( ( ()&+%, ! '!(- '!(- ( ()&+%,
Année Universitaire : 20082009
!"#" e fascicule des travaux dirigés d’algorithmique et structures de données II est l’intention des étudiants de la !remi"re année en #icence en Informatique A!!liquée la $estion de la %aculté des &ciences 'uridiques( )conomique et de $estion de 'endou*a+ Il a*orde *ri"vement les th"mes les !lus classiques et les !lus utilisés en informatique : les enregistrements( les fichiers( la récursivité( les listes chainées( les !iles( les les files et les ar*res *inaires de recherche+ #e fascicule com!orte , -. avec leurs l eurs corrections qui sont ré!arties comme suit : -./ : #es enregistrements et les fichiers -.2 : #a récursivité -. : #es listes chainées -.1 : #es !iles et les files -., : #es ar*res *inaires de recherche Une fois que l’étudiant o*tenue une connaissance suffisante sur la mani!ulation des t!es sim!les( dans ce fascicule nous dé*uterons !ar un -./ qui est consacré !our la mani!ulation des t!es com!lexes3les enregistrements4( et sur les fichiers séquentiels+ #’étudiant sera ca!a*le la fin du -./ mani!uler les fichiers+ .ans le -.2( nous traiterons les sous!rogrammes récursifs( nous allons voir de !lus !r"s le mécanisme de transformation d’un !rogramme itérative en un !rogramme récursif+ #’étudiant dans ce -. doit savoir exécuter la main en utilisant une !ile+ A!r"s avoir traiter les !rogrammes en version récursifs( le -. sera sur l’allocation dnamique a!r"s avoir vu au !art avant l’allocation statique+ .ans ce -. nous traiterons les listes l istes chaines que ce soit sim!le( dou*le ou circulaire+ #’étudiant doit a!!rendre créer une liste( la !arcourir et enfin savoir comment su!!rimer un élément+ #e -.1 est une suite du !récédent( vu qu’il s’agit d’une liste chainée avec des stratégies d’acc"s( !our les !iles( ils utilisent la stratégie 3#ast In %irst 5ut4 et !our les files 3%irst In %irst out4+ 6ous définirons les différents sous!rogrammes qui seront utiles !our mani!uler ces derniers+ A la fin nous entamerons le -., qui sera consacré !our la mani!ulation des ar*res *inaires de recherche+ 6ous allons traiter dans celuil les différents algorithmes avancés : la rotation( la fusion( la vérification d’un ar*re s’il est !arfait( dégénéré(7 nfin( nous es!érons que le !résent ouvrage aura le mérite d’tre un *on su!!ort !édagogique !our l’enseignant et un document document !ermettant une concrétisation ex!érimentale ex!érimentale !our l’étudiant+
!$ %" $ !$ &'()%
Page 1 sur 53
!"#" e fascicule des travaux dirigés d’algorithmique et structures de données II est l’intention des étudiants de la !remi"re année en #icence en Informatique A!!liquée la $estion de la %aculté des &ciences 'uridiques( )conomique et de $estion de 'endou*a+ Il a*orde *ri"vement les th"mes les !lus classiques et les !lus utilisés en informatique : les enregistrements( les fichiers( la récursivité( les listes chainées( les !iles( les les files et les ar*res *inaires de recherche+ #e fascicule com!orte , -. avec leurs l eurs corrections qui sont ré!arties comme suit : -./ : #es enregistrements et les fichiers -.2 : #a récursivité -. : #es listes chainées -.1 : #es !iles et les files -., : #es ar*res *inaires de recherche Une fois que l’étudiant o*tenue une connaissance suffisante sur la mani!ulation des t!es sim!les( dans ce fascicule nous dé*uterons !ar un -./ qui est consacré !our la mani!ulation des t!es com!lexes3les enregistrements4( et sur les fichiers séquentiels+ #’étudiant sera ca!a*le la fin du -./ mani!uler les fichiers+ .ans le -.2( nous traiterons les sous!rogrammes récursifs( nous allons voir de !lus !r"s le mécanisme de transformation d’un !rogramme itérative en un !rogramme récursif+ #’étudiant dans ce -. doit savoir exécuter la main en utilisant une !ile+ A!r"s avoir traiter les !rogrammes en version récursifs( le -. sera sur l’allocation dnamique a!r"s avoir vu au !art avant l’allocation statique+ .ans ce -. nous traiterons les listes l istes chaines que ce soit sim!le( dou*le ou circulaire+ #’étudiant doit a!!rendre créer une liste( la !arcourir et enfin savoir comment su!!rimer un élément+ #e -.1 est une suite du !récédent( vu qu’il s’agit d’une liste chainée avec des stratégies d’acc"s( !our les !iles( ils utilisent la stratégie 3#ast In %irst 5ut4 et !our les files 3%irst In %irst out4+ 6ous définirons les différents sous!rogrammes qui seront utiles !our mani!uler ces derniers+ A la fin nous entamerons le -., qui sera consacré !our la mani!ulation des ar*res *inaires de recherche+ 6ous allons traiter dans celuil les différents algorithmes avancés : la rotation( la fusion( la vérification d’un ar*re s’il est !arfait( dégénéré(7 nfin( nous es!érons que le !résent ouvrage aura le mérite d’tre un *on su!!ort !édagogique !our l’enseignant et un document document !ermettant une concrétisation ex!érimentale ex!érimentale !our l’étudiant+
!$ %" $ !$ &'()%
Page 1 sur 53
* + , $-........................................................................................ $-........................................................................................ / # +............................................................................................................................ +............................................................................................................................ 0 + 1,!-.................................................................. ............................................................................................................................ .......................................................... 1 # +1.......................................................................................................................... +1.......................................................................................................................... 2 + / , $-.............................................................................................................. $-.............................................................................................................. 13 # +/.......................................................................................................................... +/.......................................................................................................................... 11 + 2, - ................................................................. ............................................................................................................... .............................................. // # +2.......................................................................................................................... +2.......................................................................................................................... /2 + 0,* * $$-................................................... $$-................................................................................................. .............................................. /4 # +0.......................................................................................................................... +0.......................................................................................................................... 23 &&'!5" ............................................................................................................... ................................................................................................................................... ..................... 0/
Page 2 sur 53
( < 133=>133? @ ) 1 % < $ # < ) :; " #$ < !$ %" "!"5 :* #$ < !$ &'()%
+ , , $, $'*6
"7"!##" 8+ réer un enregistrement nommé ; " < qui est caractérisé !ar un ( un et et un un ++ 5n vous demande de saisir /0 étudiants( les ranger dans un ta*leau !uis les afficher+
"7"!##" 8+1 5n re!rend l’exercice !récédent mais on ra=oute en !lus !our chaque étudiant ses deux notes+ 5n vous demande de créer le nouvel enregistrement enregistrement nommé ; 8 < qui est NoteCc 36ote de contr>le continu4 et NoteEx NoteEx 36ote d’examen4+ caractérisé !ar NoteCc ?odifier l’enregistrement ; " < afin qu’elle !uisse tre en relation avec l’enregistrement ; 8 <+ 5n vous demande de créer :
Une !rocédure de saisi des étudiants ainsi leurs notes+ Une !rocédure d’affiche des étudiants avec leurs notes+ Une fonction qui renvoie l’étudiant qui a eu la meilleure note d’examen+ Une fonction qui renvoie la moenne générale de la classe+ ∗ 0.3 ∗ 0.7
Afficher la meilleure note d’examen et la moenne générale de la classe+
9crire le !rogramme !rinci!al faisant a!!el aux différents sous!rogrammes+ "7"!##" 8+/ 5n souhaite mémoriser des noms des !ersonnes dans un fichier nommé ; . <+ 5n vous demande alors de créer les sous!rogrammes qui suivent :
Une !rocédure de création du fichier qui contient les noms des !ersonnes+ Une !rocédure d’affichage des noms de !ersonnes+ Une fonction qui !ermet de chercher un nom !assé en argument et qui renvoie vrai si ce dernier est existant et faux sinon+ Une !rocédure qui co!ie les noms sans com!ter le nom !assé en !aram"tre+
9crire le !rogramme !rinci!al faisant a!!el aux différents sous!rogrammes+ Page 3 sur 53
"7"!##" 8+2 5n souhaite mémoriser les étudiants de la faculté ainsi que leurs notes dans un fichier nommé ; $. <+ Un étudiant est caractérisé !ar un ( un et un + + haque étudiant aura deux notes : une note de contr>le contenu et une note d’examen+
< . réer les enregistrements nécessaires !our éla*orer ce !rogramme+ 1. 9crire une !rocédure !ermettant de saisir les notes associées un étudiant donné en !aram"tre+ /. 9crire une !rocédure !ermettant de créer le fichier des étudiants+ 2. 9crire une !rocédure qui !ermet de co!ier les étudiants qui ont eu une moenne su!érieure ou égale /0 du fichier ; $. < dans un ta*leau des étudiants+ 0. 9crire une !rocédure qui !ermet de trier un ta*leau d’étudiants dans l’ordre décroissant selon leurs moennes+ A. 9crire une !rocédure qui !ermet de créer le fichier nommé B . < qui contiendra les étudiants qui sont réuss@t( trié dans l’ordre décroissant+ 4. 9crire une !rocédure qui !ermet d’afficher le contenu du fichier ; . <+ =. 9crire le !rogramme !rinci!al qui fait a!!el aux différents sous!rogrammes+
Page 4 sur 53
# + "7"!##" 8+ Algorithme GesEtud Type Etudiant : Enregistrement Ident : Entier Nom : chaine[30] Prénom : chaine[20] Fin Etudiant TAB : Tabeau de !0 Etudiant
Var ET : TAB n : Entier
Procédure Remplissage(m : Entier !ar T : TA"# Var i : Entier $é%ut Pour i de ! & m 'aire Ecrire"#Etudiant n$#%i%# :#& Ecrire"#Identi'iant : #&%(ire"T[i])Ident& Ecrire"#Nom : #&%(ire"T[i])Nom& Ecrire"#Prénom : #&%(ire"T[i])Prénom& in Pour in Procédure A''ichage(m : Entier !ar T : TA"# Var i : Entier $é%ut Ecrire"#Identi'iant Nom Prénom : #& Ecrire"#*************************************************#& Pour i de ! & n 'aire Ecrire"T[i])Ident%# #%(ire"T[i])Nom%# #%T[i])Prénom& in Pour in
$é%ut n !0 Remplissage( n%ET# A''ichage(n%ET#
in
Page 5 sur 53
"7"!##" 8+1 Algorithme GesEtud Type Notes : Enregistrement noteCc : Réel noteEx : Réel in Notes Etudiant : Enregistrement Ident : Entier Nom : chaine[30] Prénom : chaine[20] Note : Notes Fin Etudiant TAB : Tabeau de !0 Etudiant
Var ET : TAB n : Entier
Procédure )aisiNotes(!ar E : Etudiant# Var noteEntrer : Réel $é%ut Répéter Ecrire"#Note contr+e contenu : #&%(ire"noteEntrer& *us+u,& noteEntrer , 0 ET noteEntrer - 20 E)Note)Note.c noteEnter Répéter Ecrire"#Note e/amen : #&% (ire"noteEntrer& *us+u,& noteEntrer , 0 ET noteEntrer - 20 E)Note)NoteE/ noteEnter in Procédure Remplissage(m : Entier !ar T : TA"# Var i : Entier $é%ut Pour i de ! & m 'aire Ecrire"#Etudiant n$#%i%# :#& Ecrire"#Identi'iant : #&%(ire"T[i])Ident& Ecrire"#Nom : #&%(ire"T[i])Nom& Ecrire"#Prénom : #&%(ire"T[i])Prénom& )aisiNotes(T-i.# in Pour in
Page 6 sur 53
Procédure A''icheNotes(E : Etudiant# $é%ut Ecrire"#Note .ont+e .ontenu Note E/amen #& Ecrire"#************************************#& Ecrire"E)Note)Note.c%# #%E)Note)NoteE/& in Procédure A''ichage(m : Entier T : TA"# Var i : Entier $é%ut Ecrire"#Identi'iant Nom Prénom : #& Ecrire"#*************************************************#& Pour i de ! & n 'aire Ecrire"T[i])Ident%# #%(ire"T[i])Nom%# #%T[i])Prénom& A''icheNotes(T-i.# in Pour in onction /eilleureNote(m : Entier T : TA"# : Réel Var i : Entier Note/ax : Réel $é%ut Notea/ T[!])Note)NoteE/ Pour i de 2 & m aire )i T[i])Note)NoteE/ 1 Notea/ Alors Notea/ T[i])Note)NoteE/ in )i in Pour /eilleureNote Notea/ in onction /oyenneGénérale(m : Entier T : TA"# : Réel Var i : Entier som : Réel $é%ut som 0 Pour i de 2 & m aire som som 0)3 / T[i])Note)note.c 0) / T[i])Note)noteE/ in Pour /oyenneGénérale som 4 m in
$é%ut n !0 Remplissage( n%ET# A''ichage(n%ET# Ecrire"#eieur note e/amen :#% /eilleureNote(n0ET#0 # o5enne générae de a casse :#% /oyenneGénérale(n0ET##
in Page 7 sur 53
"7"!##" 8+/ Algorithme TraiTichNom Type Nom : chaine[30] FichNoms : Fichier de Nom Var F!%F2 : FichNoms Procédure Création(Var 'n : ichNoms# Var n : Nom re6 : caract7re $é%ut 1u!rir"'n%E& re6 898 Tant +ue /A*2)"re6& 898 aire Ecrire";Nom : ;&% (ire"n& Ecrire"'n%n& Ecrire";
ous a?outer un autre nom "94N& : ;& (ire"re6& in Tant +ue ermer"'n&
in Procédure A''ichage('n : ichNoms# !ar n : Nom $é%ut 1u!rir('n03# (ire"'n%n& Tant +ue N1N "in$eichier "'n&& aire Ecrire"n& (ire"'n%n& in Tant +ue ermer"'n& in onction Recherche(x : Nom 'n : ichNoms# : "ooléen !ar n : Nom Trou>e : Booéen $é%ut 1u!rir('n03# (ire"'n%n& Trou>e "n /& Tant +ue Trou>e'au/ ET N1N"in$eichier "'n&& aire (ire"'n%n& Trou>e "n /& in Tant +ue )i in$eichier('n# Alors Recherche 'au/ )inon Recherche >rai in )i ermer"'n& in Page 8 sur 53
Procédure Copier(x : Nom 'n : ichNoms !ar 't : ichNoms# !ar n : Nom $é%ut 1u!rir('n03# 1u!rir('t0E#
(ire"'n%n& Tant +ue n @ / ET N1N"in$eichier "'n&& aire Ecrire"'t%n& (ire"'n%n& in Tant +ue )i N1N(in$eichier('n## Alors 3ire('n0n#
Tant +ue N1N "in$eichier "'n&& aire Ecrire"'t%n& (ire"'n%n& in Tant +ue in )i ermer"'n& ermer('t# in
$é%ut Création(4# A''ichage(4# )i Recherche(5Riadh504# Alors Ecrire(5Riadh est existant dans le 'ichier5# )inon Ecrire(5Riadh est non existant dans le 'ichier5# in )i Copier(5Riadh50406# A''ichage(6# in
"7"!##" 8+2 Algorithme GesEtudichier Type Notes : Enregistrement note.c : ée noteE/ : ée Fin Notes Etudiant : Enregistrement Ident : Entier Nom : chaine[30] Prénom : chaine[20] Note : Notes Fin Etudiant TAB : Tabeau de !00 Etudiant FichEtud : Fichier de Etudiant
Page 9 sur 53
Var Fe%Fr : FichEtud
Procédure )aisiNotes(!ar E : Etudiant# Var noteEntrer : Réel $é%ut Répéter Ecrire"#Note contr+e contenu : #&%(ire"noteEntrer& *us+u,& noteEntrer , 0 ET noteEntrer - 20 E)Note)Note.c noteEnter Répéter Ecrire"#Note e/amen : #&% (ire"noteEntrer& *us+u,& noteEntrer , 0 ET noteEntrer - 20 E)Note)NoteE/ noteEnter in Procédure Création(!ar 'n : ichEtud # Var Et : Etudiant re6 : caract7re $é%ut 1u!rir"'n%E& re6 898 Tant +ue /A*2)"re6& 898 aire Ecrire"#Identi'iant : #&%(ire"Et)Ident& Ecrire"#Nom : #&%(ire"Et)Nom& Ecrire"#Prénom : #&%(ire"Et)Prénom& )aisiNotes(Et# Ecrire('n0Et# Ecrire";ous a?outer un autre nom "94N& : ;& (ire"re6& in Tant +ue ermer"'n&
in Procédure Copier$ansTa%('n :ichEtud !ar n:Entier !ar T : TA" # !ar Et : Etudiant o5 : ée $é%ut 1u!rir('n03# (ire"'n%Et& n 0 Tant +ue N1N "in$eichier "'n&& aire o5 0)3 / Et)Note)note.c 0) / Et)Note)noteE/ )i o5 , !0 Alors n n ! T[n] Et in )i (ire"'n%Et& in Tant +ue ermer"'n& in
Page 10 sur 53
Procédure Tri"ulle( n : Entier !ar T :TA"# Var i : Entier au/ : Etudiant re6 : Booéen mo5 !%mo52: ée $é%ut Répéter re6 'au/ Pour i de ! & n aire mo5! 0)3 / T[i])Note)note.c 0) / T[i] mo52 0)3 / T[i!])Note)note.c 0) / T[i!] )i mo5! mo52 Alors au/ T[i] T[i] T[i!] T[i!] au/ re6 >rai in )i in Pour n n ! *us+u,& re6 'au/ 12 n ! in Procédure Résultat('n :ichEtud !ar 'r : ichEtud# Var i%n : Entier T : TAB $é%ut Copier$ansTa%('n0n0T# Tri"ulle(n0T# 1u!rir"'r%E& Pour i de ! & n aire Ecrire('r0T-i.# in Pour ermer"'r& in Procédure A''ichage('r : ichNoms# !ar Et : Etudiant o5 : ée $é%ut 1u!rir('r03# (ire"'r%Et& Tant +ue N1N"in$eichier"'r&& aire o5 0)3 / Et)Note)note.c 0) / Et)Note)noteE/ Ecrire"Et)Ident% C C%Et)Nom% C C%Et)Prénom% C C%o5& (ire"'r%Et& in Tant +ue ermer"'r& in
$é%ut Création(n# A''ichage(n# Résultat(n0r# A''ichage(r# in
Page 11 sur 53
( < 133=>133? @ ) 1 % < $ # < ) :; " #$ < !$ %" "!"5 :* #$ < !$ &'()%
+ 1,!,!'*6
"7"!##" 8+ 9crire une fonction récursive qui retourné la somme des chiffres d’un entier 6 donné+ 3 /2 B / C 2 C D 4
"7"!##" 8+1 9crire une fonction récursive qui calcul la factorielle d’un entier 6 !ositif+ 3 , E , x 1 x x 2 x / /204
"7"!##" 8+/ 9crire une fonction récursive qui !ermet de déterminer si un entier 6 saisi au clavier est !remier ou !as+ 3Un nom*re !remier n’est divisi*le que !ar / ou luimme4+ "7"!##" 8+2 9crire une !rocédure récursive qui !ermet d’inverser une chaine de caract"res sans utiliser une chaine tem!oraire+ information noitamrofni
"7"!##" 8+0 9crire une fonction récursive qui !ermet de vérifier si deux chaines s/ et s2 sont anagrammes ou non+ s/ et s2 sont anagrammes s’ils se com!osent de mme lettre+ s/ FchienF G s2 FnicheF vrai
"7"!##" 8+A 9crire une fonction récursive qui !ermet de vérifier si un mot !lanché en !aram"tre est !alindrome ou non+ mot FaHiHaF vrai G
mot FalgaF faux
Page 12 sur 53
"7"!##" 8+4 9crire une fonction récursive nommée !$C qui !ermet de chercher un entier x dans un ta*leau - de n entiers selon le !rinci!e de la recherche séquentielle+ 9crire une fonction récursive nommée !$C qui !ermet de chercher un entier x dans un ta*leau - de n entiers selon le !rinci!e de la recherche dichotomique+
"7"!##" 8+= 9crire une !rocédure récursive indirecte nommé C& qui !ermet de trier un ta*leau - de n entiers+ Utiliser les deux !rocédures cidessous :
, ; D < " ,; <" E < & E <&-
8& : elle est utilisée !our renvoé s’il ’a eu une !ermutation au cours du !arcours du ta*leau+ "7"!##" 8+? 9crire une !rocédure récursive nommée Anagramme qui !ermet d’afficher tous les anagramme d’une chaine ch+ 6 : Utiliser une !ermutation circulaire !our résoudre ce !ro*l"me+ chFiagF
#es anagrammes de ; iag < sont : /4 24 4 14 ,4 D4
aig agi gai gia iga iag
"7"!##" 8+3 9crire un !rogramme récursif !ermettant de dessiner une !ramide d’étoiles selon un entier n donné( avec n un nom*re im!air+ n9
+
Page 13 sur 53
# +1 "7"!##" 8+ onction )omme(n :Entier# : Entier Var s : Entier $é%ut )i n10 Alors ss n 9D !0 )omme )omme"n DI< !0& in )i )omme s in
"7"!##" 8+1 onction actorielle (n :Entier# : Entier Var 'ac : Entier $é%ut )i n10 Alors 'ac 'ac n actorielle actorielle "n * !& in )i Factoriee'ac in
"7"!##" 8+/ onction Premier (d0 n :Entier# : Entier $é%ut )i d J""N DI< 2&!& Alors )i n 9D d @ 0 Alors Premier Premier"d!% n& )inon Premier >rai in )i )inon Premier 'au/ in )i in
Page 14 sur 53
"7"!##" 8+2 Procédure 7n!erse (!ar ch : chaine# Var c : caract8re $é%ut )i ch FF Alors In>erse ## )inon c ch-31NG(ch#. E''acer "ch%ong"ch&%!& 7n!erse "ch& ch c ch in )i in
!! "
!! !! # !! $ !!
"7"!##" 8+0 onction Anagramme (!ar s40 s6 : chaine# : "ooléen Var c : caract8re $é%ut )i 31NG"s!& @ 31NG"s2& Alors Anagramme 'au/ )inon )i 31NG"s!& 31NG"s2& 0 Alors Anagramme >rai )inon 6 P1)"s![!]%s2& !! % !! & !!
)i 6 0 Alors Anagramme 'au/ )inon "s!%!%!& !!# % % EACER "s2%6%!& !!# & EACER Anagramme Angramme"s!%s2& in )i in )i in )i in
Page 15 sur 53
"7"!##" 8+A unction Palindrome (mot : chaine# : "ooléen Var c : caract8re $é%ut !! " )i mot FF Alors Palindrome
"7"!##" 8+4 unction Rech9se+(i0 n0 x : Entier T : TA"# : "ooléen $é%ut )i iJ n Alors )i T[i] / Alors Rech9se+ Vrai )inon Rech9se+ Rech9se+(i40n0x0T# in )i )inon Rech9se+ aux in )i in unction Rech9dico(g0 d0 x : Entier T : TA"# : "ooléen Var m : Entier $é%ut )i g1d Alors Rech9dico 'au/ )inon m "d g& DI< 2 )i T[m] / Alors Rech9dico
"7"!##" 8+= Procédure Permuter(!ar x0 y : Entier# Var Au/ : Entier $é%ut aux x x y y aux in
Procédure Parcours(i0n :Entier !ar rep : "ooléen !ar T :TA"# $é%ut )i in Alors )i T[i] 1T[i!] Alors Permuter"T[i]%T[i!]& rep
>rai&& Alors )i ""n1!& ET "Perm Fau/ Perm %T& Parcours"!%n%Perm %T& Tri"ulle"n*!%Perm in )i in
"7"!##" 8+? Procédure PermutCirc(!ar ch :chaine# $é%ut !!
)i 31NG"ch&1! Alors !!
.h ch[31NG"ch&] )12);C
Page 17 sur 53
Procédure Anagramme(s : chaine c : Entier !ar l : Entier# Var i : Entier tete% ueue : chaine $é%ut Pour i de ! & 31NG"s& * c tete )12);C
F ! (&++#1120, "# $" %" && '(( $ % " )*# . #! (&++#11//, "# $" "# -+(% %"# $" -+(% && %"# '(( && $ '(( %# " )*# . $ +! %# " )*# (, "# +#! $" "# +-+(% +-+(% %"+ $" && %"+ '((&& $ '(( %+ " )*# & $ -/%+")*# &
/,-+ 0,
Page 18 sur 53
"7"!##" 8+3 .
Algorithme Pyramide Var n : Entier
!!
onction )aisie(# : Entier Var m : Entier $é%ut Ecrire"#Entrer un nombre im6air :#& (ire"m& )i m 9D 20 Alors )aisie)aisie"& )inon )aisie m in )i in Procédure Espace(i :Entier# $é%ut )i i1! Alors Ecrire"# #& !! Etoile(i*!# in )i in Procédure Etoile(= :Entier# $é%ut )i ?1! Alors Ecrire"##& !! Etoile(?*!# in )i in Procédure $essiner(> 0 m :Entier# $é%ut )i Gm Alors !! Espace(m*G# !! Etoile(G# !! Etoile(G*!# !! Ecrire(5?n5# in )i in
$é%ut n
)aisie(#
$essiner(40n#
!! !!
in
Page 19 sur 53
( < 133=>133? @ ) 1 % < $ # < ) :; " #$ < !$ %" "!"5 :* #$ < !$ &'()%
+ / , $, $'*6 <
( ( )
G(")'8) " #'(!) ! *+ , "! * , "7"!##" 8+ ,! " ( #'(!)- .éfinir une liste sim!le chainée com!osé d’une valeur enti"re et d’un !ointeur vers l’élément suivant G 1- .éclarer une varia*le de ce t!e défini dans la question /4 G /- )crire une !rocédure !ermettant de créer une liste chainée de n entiers+
#, < " E < -
2- )crire deux !rocédures l’une itérative et l’autre récursive !ermettant d’afficher les éléments de la liste+
$, < $!, < -
0- )crire une fonction récursive qui !ermet de rechercher un élément x dans la liste+
!$$, < " E < - < &
A- )crire une !rocédure qui !ermet d’a=outer une tte de la liste+
6, < " E < -
4- )crire une !rocédure qui su!!rimer un élément de la liste+
), < " E < -
"7"!##" 8+1 )crire une !rocédure nommée qui !ermet d’inverser une liste sans utiliser un varia*le tem!oraire+
"7"!##" 8+/ )crire une !rocédure nommée & qui !ermet de trier une liste chainée selon le !rinci!e de tri *ulle+
"7"!##" 8+2 )crire une !rocédure qui !ermet de concaténer deux listes chainées #/ et #2 d’entiers dans une troisi"me liste #+ Il faut traiter toutes les contraintes !ossi*les+ Page 20 sur 53
"7"!##" 8+0 5n dis!ose de deux listes #/ et #2 triés qui sont triés dans l’ordre croissant+ )crire une !rocédure qui !ermet de fusionner deux listes #/ et #2 dans la liste #/+
"7"!##" 8+A )crire une !rocédure qui !ermet de su!!rimer les dou*lons dans une liste chainée triée dans l’ordre croissant qui contient des caract"res al!ha*étiques+ omment !euton éliminer les dou*lons si la liste n’était !as triée K
"7"!##" 8+4 )crire une fonction qui !ermet de vérifier si une liste est !alindrome ou non+
" <
ette
'
ette
H
H
A
H
5
liste est !alindrome
7
liste n’est !as !alindrome
"7"!##" 8+= Une liste dou*lement cha@née est une liste qui admet( en !lus de !ermettre lLacc"s au suivant dLun élément( !ermet lLacc"s au !récédent dLun élément+
Muel est lLintért de ce t!e de liste !ar ra!!ort aux listes sim!lement cha@nées K )criveH les fonctions et !rocédures suivantes en mettant éventuellement =our les !rimitives !récédentes : . , <- < renvoie le !remier élément de #+ 1. , < - < renvoie le dernier élément de #+ Nro!oser deux solutions l’une en connaissant la queue de la liste et la deuxi"me en ne connaissant !as cette derni"re+ /. I, < - < & renvoie vrai si la liste est vide et faux sinon+ 2. , < - su!!rime le !remier élément de #+ 0. 6,; G < E < - a=oute N dans # a!r"s M+ A. , < " E < - su!!rime x dans #+
"7"!##" 8+? . )crire la !rocédure 6 qui !ermet d’a=outer au dé*ut d’une liste circulaire # un entier e+ 1. )crire la !rocédure 6 qui !ermet d’a=outer la fin d’une liste circulaire #un entier e+ /. )crire une !rocédure $ qui affiche la liste circulaire qui lui est !assée en argument+
Page 21 sur 53
# +/ G(")'8) " #'(!) ! *+ , $ - . /
"!
* , $ -
0 ( (
"7"!##" 8+ ,! " ( #'(!)Type
(iste : Hceue .eue : Enregistrement >a
: Entier
sui> : (iste Fin .eue
1-
Var ( : (iste
/-
Procédure Créer3iste(n : Entier !ar 3 : 3iste# Var Tete% 6 : (iste i : Entier $é%ut Allouer"Tete& Ecrire"#Entrer éément Tte :#& (ire"TeteH)>a& TeteH)sui> ni ( Tete Pour i de 2 & n 'aire Allouer"6& Ecrire"#Entrer éément n$ :#%i& (ire"6H)>a& 6H)sui> ni (H)sui> 6 ( 6 in Pour ( Tete # in
Page 22 sur 53
2Procédure A''ichage7ter(3 : 3iste# Var 6 : (iste $é%ut 6 ( Tant +ue 6 @ ni aire Ecrire"6H)>a& 6 6H)sui> in Tant +ue in Procédure A''ichageRecu(3 : 3iste# $é%ut )i ( @ ni Alors Ecrire"6H)>a& A''ichageRecu "6H)sui>& in )i in
0-
%
onction Recherche(x : Entier 3 : 3iste# : "ooléen Var p : 3iste $é%ut 6 ( Tant +ue ""6 @ ni& ET "6H)>a @ /&& aire 6 6H)sui> in Tant +ue )i 6 ni Alors Recherche Fau/ )inon Recherche
onction Recherche(x : Entier 3 : 3iste# : "ooléen $é%ut )i ( ni Aors Recherche Fau/ )inon )i (H)>a / Alors Recherche & in )i in )i in
Page 23 sur 53
AProcédure A=outerTete(x : Entier !ar 3 : 3iste# Var Tete : (iste $é%ut Aouer"Tete& TeteH)>a / TeteH)sui> ( (Tete in
4-
%
Procédure )upprimer(x : Entier !ar 3 : 3iste# Var P%J : (iste $é%ut )i ( ni Alors Ecrire"#(iste >ide% im6ossibe de su66rimer #%/&
)inon )i(H)>a / Alors P ( & ( (H)sui> )inon P (H)sui> Tant +ue ""P @ ni& ET "PH)>a @ /&& aire J P P PH)sui> in Tant +ue )i P @ ni Alors JH)sui> PH)sui> (ibérer"P& in )i in )i in )i in %
Procédure )upprimer(x : Entier !ar 3 : 3iste# Var P : (iste $é%ut )i ( @ ni Alors )i (H)>a / Alors P ( ( (H)sui> 3i%érer"P& )inon )upprimer"/% (H)Kui>& in)i in)i in Page 24 sur 53
"7"!##" 8+1 Procédure 7n!erse (!ar 3 : 3iste# Var P%J : (iste $é%ut P ni Tant +ue ( @ ni aire J (H)sui> (H)sui> P P ( ( J in Tant +ue in
F F J
0
0 4 ? 3 1
4
0 4 ? 3
?
0 4 ?
3
0 4
1
/,
"7"!##" 8+/ Procédure Tri"ulle(!ar 3 : 3iste# Var P% J : (iste Tem6 : Entier $é%ut P ( J (H)sui> Répéter rep 'au/ P ( J (H)sui> ' Tant +ue J @ ni aire )i PH)>a1JH)>a Alors Tem6 PH)>a PH)>a JH)>a JH)>a Tem6 rep >rai in )i in tant +ue *us+u,& rep 'au/ in
Page 25 sur 53
"7"!##" 8+2 Procédure Concatener(34036 : $é%ut )i 34 nil ET 36 nil 3@ nil )inon )i 34 B nil ET 36 (3 (! )inon )i 34 nil ET 36 3@ 36 )inon
3iste !ar 3@ : 3iste# Alors nil Alors B nil Alors
' (
(3
(!
()
Tant +ue (3H)sui> @ ni aire (3 (3H)sui> in Tant +ue (" & ()
(3H)sui>
(2
#
(3 in )i
(!
in
"7"!##" 8+0 Procédure usion(!ar 34 :3iste 36 : 3iste# Var Tete% P% J : (iste $é%ut )i (! ni Alors * ( (! (2 )inon )i (2 @ ni Alors + #
)i (!H)>a - (2H)>a Alors Tete (! )inon Tete (2 in )i J Tete Tant +ue (! @ ni ET (2 @ ni aire )i (!H)>a 1 (2H)>a Alors P (2 (2 (2H)sui> JH)sui> P PH)sui> (! J P
Page 26 sur 53
)inon )i (!H)>a 1 (2H)>a Alors P (2 (2(2H)sui> J (! (!(!H)sui> JH)sui> P PH)sui> (! )inon J (! (! (!H)sui> in )i in Tant +ue (! Tete ( & # in )i in )i in
"7"!##" 8+A
Liste triée
Procédure )upprime$ou%lons(!ar 3 :3iste# Var J % P : (iste $é%ut 3 )i ( @ ni Alors Tant +ue JH)sui> @ niaire P J J JH)sui> )i JH)>a PH)>a Alors ( , -.
JH)sui> PH)sui> (ibérer"P& in )i in Tant +ue in )i in
Liste non triée
Procédure )upprime$ou%lons(!ar 3 :3iste# Var J : (iste <6red : caract7re $é%ut 3 )i ( @ ni Alors Tant +ue JH)sui> @ niaire <6redJH)>a J JH)sui> )i JH)>a <6red Alors )upprimer"<6red%J& in )i in Tant +ue in )i in
Page 27 sur 53
ette !rocédure se charge de !arcourir la liste G en su!!rimant toutes les valeurs de I
"7"!##" 8+4 onction Palindrome(3 : 3iste# :"ooléen Var Kto6 : Booéen Deb% Fin% J : (iste $é%ut Deb ( Finni * Kto6 'au/ Tant +ue DebH)sui> @ FinETN1N"Kto6& aire $
JP Tant +ue JH)sui> @ Finaire J JH)sui> in Tant +ue
)i PH)>a JH)>a Alors Fin J ( )inon Kto6 >rai # in )i )i $e% B in Alors Deb Deb H)sui> in )i in Tant +ue Palindrome N9N"Kto6& in
"7"!##" 8+= #’intért d’une liste dou*lement chainée !ar ra!!ort une liste chainée sim!le c’est !our accélérer la recherche d’un élément+
/
E2
Queue
Tête
E3
Type (iste : Hceue .eue : Enregistrement 6red : (iste >a : Entier sui> : (iste Fin .eue
Var ( : (iste
Page 28 sur 53
-
onction Premier(3 : 3iste# : 3iste $é%ut )i ( @ nu Alors Premier ( )inon Premierni in )i in
1 * / 0 onction $ernier(ueue : 3iste# : 3iste $é%ut $ernier Jueue in
* / " 0 onction $ernier(3 : 3iste# : 3iste Var P : 3iste $é%ut P 3 Tant +ue PH)sui> @ nuaire P PH)sui> in Tant +ue $ernierP in
/-
2-
onction estVide(3 : 3iste# : "ooléen $é%ut )i 3 ni Alors estVide >rai )inon estVide 'au/ in )i in
Procédure supprimerPremier(!ar 3 : 3iste# Var P : 3iste $é%ut )i 3 @ ni Alors P ( ( (H)sui> (H)6redni 3i%érer"P& in )i in
Page 29 sur 53
0-
Procédure a=outerApr8s(P0 : 3iste !ar 3 : 3iste# Var D :(iste $é%ut D ( Tant +ueD @ J ETD @ niaire D DH)sui> in Tant +ue )i D J Alors D DH)sui> DH)6red 6 PH)sui> D JH)sui> P PH)6red J )inon Ecrire"#A=out im!ossi*le( élément non existantF4 in )i in
AProcédure )upprimer(x : Entier !ar 3 : 3iste# ide% im6ossibe de su66rimer #%/&
)inon )i (H)>a / Alors P ( ( (H)sui> )inon P (H)sui> Tant +ue ""P @ ni& ET "PH)>a @ /&& aire J P P PH)sui> in Tant +ue )i P @ ni Alors D PH)sui> DH)6red J JH)sui> D (ibérer"P& in )i in )i in )i in
Page 30 sur 53
"7"!##" 8+? E1
E2
Tête E3
. " Procédure A=outerTDte(e : Entier !ar 3 : 3iste# Var N%Tete%Jueue: (iste $é%ut Aouer"N& NH)>a e )i ( ni Alors ( N NH)sui> ( (H)sui> N )inon Tete ( Jueue ( Tant +ue JueueH)sui> @ Teteaire Jueue JueueH)sui> in Tant +ue JueueH)sui> N NH)sui>Tete Tete N (Tete in )i in
$0 1 & 2 0 # 0 1 # .
Page 31 sur 53
Procédure a''iche(3 : 3iste# Var P :(iste $é%ut )i 3 nil Alors Ecrire(53iste !ide5# )inon P ( !!1" !! 1 * 1"
Tant +ue PH)sui> @ P aire Ecrire"PH)>a& P PH)sui> in Tant +ue in )i in
Page 32 sur 53
( < 133=>133? @ ) 1 % < $ # < ) :; " #$ < !$ %" "!"5 :* #$ < !$ &'()%
+ 2, , '*6
)
"7"!##" 8+,") ")! "! )! ) 3! 2 45 ! 6! 2 %5 ! 7 8! 2 5 9 ! 3 :! 2 ;5 9 ! "7"!##" 8+1,") ")! *+ / "! )! ) 3! 2 4+5 + +! 6! 2 +%5+ +! 8! 2 5 9 + +! 3 :! 2 ;5 9 + +!
Page 33 sur 53
# +2 "7"!##" 8+,") ")! . 4 56 3 " 7 8 ( 9 - ( 4 + "!
Type Pie : Hceue ceue : Enregistrement >a : Entier sui> : Pie Fin ceue )!
Var P : Pie
3!
6!
8!
:!
Procédure 7nitialiserPile(!ar P : Pile# $é%ut P ni in onction EstPileVide(P : Pile# : "ooléen $é%ut )i P nil Alors EstPileVide >rai )inon EstPileVide 'au/ in )i in Procédure Empiler(x : Entier !ar P : Pile# Var N> : Pie $é%ut Allouer"N>& N>H)>a / N>H)sui> P P N> in Procédure $épiler(!ar x : Entier !ar P : Pile# Var K : Pie $é%ut )i N1N"EstPileVide"P&& Alors K P / PH)>a P PH)sui> 3i%érer"K& in )i in Page 34 sur 53
"7"!##" 8+1,") ")! . 4 56 7 3 7 7 8 ( 9 - + 4 + "!
Type (iste : Hceue ceue : Enregistrement >a : Entier sui> : (iste Fin ceue Fie : Enregistrement Tte : (iste Jueue : (iste Fin Fie
)!
Var F : Fie
3!
6!
8!
Procédure 7nitialiserile(!ar : ile# $é%ut F)Tte ni F)Jueue ni in onction EstileVide( : ile# : "ooléen $é%ut )i TDte nil Alors EstPileVide >rai )inon EstPileVide 'au/ in )i in onction En'iler(x : Entier !ar : ile# !ar N> : (iste $é%ut Allouer"N>& N>H)>a / N>H)sui> ni )i F)Jueue @ ni Alors F)JueueH)sui> N> )inon F)Tte N> in )i F)Jueue N> in Page 35 sur 53
:!
Procédure $é'iler(!ar " : Ar%re !ar : ile# !ar P : (iste $é%ut )i F)Tte @ ni Alors P F)Tte B PH)>a F)Tte F)TteH)sui> 3i%érer"P& in )i )i F)Tte ni Alors F)Jueue ni in )i in
Page 36 sur 53
( < 133=>133? @ ) 1 % < $ # < ) :; " #$ < !$ %" "!"5 :* #$ < !$ &'()%
+ 0,* * $$,* * $$'*6
)( , 1 - (
"7"!##" 8+,! "- ) , 1- ( : /- ) &6 : 2- 2 <5 9 7 =! 0- ) - 32 >2 32 ?2 )2 2 "@2 )@2 "62 6@ A- 2 %57 =! 7 4- 2 A+57 =! 7 =- 2 $5 9 7 =! 7 ?- 2 3- 2 *5 9 7 =!
"7"!##" 8+1,") %")(!")- 2 1- 2 /- 2 ; 46 2- 2 ; 0- 2 Page 37 sur 53
"7"!##" 8+/,!#'(!) "8 !"(! 5n souhaite !arcourir et calculer la largeur d’un ar*re+ Nour cela nous allons im!lémenter les sous!rogrammes suivants : - 2 4+5 + +! 1- 2 +%5+ +! 7 # /- 2 57 = 9 + +! 3 2- 2 ;5 7 = 9 + +! 0- 2 (57 = 9 !
"7"!##" 8+2 ,( K8%G(" I"!) " )G("-
+ B = 0
)crire une !rocédure qui construit un vecteur contenant les éléments d’un ar*re *inaire+ Nour indiquer un ar*re vide( il suffit de la re!résenter !ar le sm*ole
⌀+
Nar exem!le( cidessous la re!résentation de l’ar*re de la figure / :
11
1 =
/ /0
2 2
0 2
A 1/
4 ⌀
= 1
? 0
3 ⌀
0
1
/
⌀
⌀
"7"!##" 8+0 ,! ''8)-
%igure 2 : Ootations gauche et droite
#a figure cidessus montre un exem!le de rotation de droite et une rotation gauche+ 5n souhaite dans ce cas créer les deux !rocédures qui suivent : Page 38 sur 53
- / C5 7 =! 1- / C5 7 =!
"7"!##" 8+A ,#'")crire une !rocédure qui !ermet de co!ier un ar*re *inaire A dans un deuxi"me ar*re +
"7"!##" 8+4 ,()'8)crire une !rocédure qui !ermet de fusionner deux ar*res *inaires A et ( et de renvoer un ar*re qui contient les deux ar*res+ .iscuter les différents cas !ossi*les+
"7"!##" 8+= ,""8"!"; ! '( #'%"5n dis!ose des deux fonctions hauteur et taille+ 5n souhaite écrire des fonctions qui !ermettent de vérifier si un ar*re : . est : Un ar*re est un ar*re dont tous les nPuds internes sont des !oints sim!les+ #’ar*re < est dégénéré si 57! D 57! E + - )crire la !remi"re solution en utilisant les deux fonctions taille et hauteur+ *- )crire nouveau sans utiliser les deux fonctions taille et hauteur+ 1. est : Un ar*re dont tous les niveaux sont rem!lis est + 57! E #’ar*re est com!let si 57! D " B + - )crire la !remi"re solution en utilisant la fonction hauteur+ *- )crire la deuxi"me solution sans utiliser la fonction hauteur+ /. est : Un ar*re est si tous ses niveaux sont rem!lis( sauf le dernier dans lequel les feuilles sont rangées le !lus gauche !ossi*le+ )crire une fonction !ermettant de vérifier si un ar*re est !arfait+
Page 39 sur 53
# +0 "7"!##" 8+ ,! " ( #'(!)- *+ , ! : Un * * est un ensem*le de nPuds qui est soit vide( soitcom!osé d’une racine et de deux ar*res *inaires dis=oints J* et J * $ +
! F*
F*
N
N
8L F*
F
F
F
F
’
Largeur de l’arbre
1-
Un L est un sommet qui a au moins un fils 3gauche ou droit ou les deux4+ Une est un sommet qui nLa !as de fils+ #a $ M x est la longueur 3en nom*re dLarcs4 du !lus long chemin de x une feuille+ #a $ M * est égale la hauteur de la racine+
Type Arbre : HNLud NLud : Enregistrement
/-
Var A : Arbre
2-
Procédure CréerElement(x : Entier !ar " : Ar%re# $é%ut )i B ni Alors Aouer"B& BH)>a / BH)Fisni BH)FisDni )inon )i BH)>a1 / Alors CréerElement"/% BH)Fis& in )i )i BH)>a / Alors CréerElement"/% BH)FisD& in )i in )i in
Page 40 sur 53
0-
-
1-
/-
onction EstVide(" :Ar%re# : "ooléen $é%ut )i B ni Alors Estrai in )i in onction Est2neuille(" :Ar%re# : "ooléen $é%ut )i BH)Fis ni ET BH)FisD ni Alors Est2neuille >rai )inon Est2neuille 'au/ in )i in onction Recherche(x : Entier " : Ar%re# : "ooléen $é%ut )i "nil Alors Recherche 'aux )inon )i "F!al x Alors Recherche !rai )inon )i "F!al x Alors Recherche Recherche(x0 "FilsG# )inon Recherche Recherche(x0 "Fils$# in )i in )i in
2. #a !remi"re stratégie de !arcours d’un ar*re *inaire de recherche est dite ; en !rofondeur d’a*ord < ou dans l’ordre !réfixé+
Page 41 sur 53
2
1
0
A
/
- 4H
4I H 46 @I 6I @J
Procédure ParcoursPré'ixe(" : Ar%re# $é%ut )i B @ ni Alors Ecrire"BH)>a& ParcoursPré'ixe "BH)Fis& ParcoursPré'ixe "BH)FisD& in )i in
1. #a deuxi"me stratégie de !arcours d’un ar*re *inaire de recherche est dite : ;!arcours de l’ar*re dans l’ordre ou smétrique <+ #e !arcours donne des valeurs triées dans l’ordre croissant+
/
0
3
6 4
-H
5
4I 46 4H 6I @I @J
Procédure Parcours7n'ixé(" : Ar%re# $é%ut )i B @ ni Alors Parcours7n'ixé "BH)Fis& Ecrire"BH)>a& Parcours7n'ixé "BH)FisD& in )i in
/. #a troisi"me stratégie de !arcours d’un ar*re *inaire de recherche est dite : ;!arcours de l’ar*re dans l’ordre <+
Page 42 sur 53
5
3
4
0
6
/
- H
4I 46 6I @J @I 4H
Procédure ParcoursPost'ixé(" : Ar%re# $é%ut )i B @ ni Alors ParcoursPost'ixé "BH)Fis& ParcoursPost'ixé "BH)FisD& Ecrire"BH)>a& in )i in
0- #e !rinci!e de su!!ression doit o*éir aux constations suivantes : #a su!!ression commence !ar la recherche de lLélément+ Une fois trouvé ce dernier : si cLest une feuille( on la vire sans !ro*l"mes si cLest un sommet qui nLa quLun fils( on le rem!lace !ar ce fils si cLest un sommet qui a deux fils( on a deux solutions : . le rem!lacer !ar le sommet de !lus grande valeur dans le sous ar*re gauche+ 1. le rem!lacer !ar le sommet de !lus !etite valeur dans le sous ar*re droit+ Nour sim!lifier le travail nous allons commencer !ar écrire deux fonctions : la !remi"re renvoie l’élément qui a la !lus grande valeur dans le sous ar*re gauche G la deuxi"me renvoie l’élément qui a la !lus !etite valeur dans le sous ar*re droit+
onction PlusPetit)ousAr%re$roit(" : Ar%re# $é%ut )i BH)Fis @ ni Alors PlusPetit)ousAr%re$roit PlusPetit)ousAr%re$roit"BH)Fis&
)inon PlusPetit)ousAr%re$roit B
in )i in
onction PlusGrand)ousAr%reGauche(" : Ar%re# $é%ut )i BH)FisD @ ni Alors PlusGrand)ousAr%reGauche PlusGrand)ousAr%reGauche "BH)FisD&
)inon PlusGrand)ousAr%reGauche B
in )i in
Page 43 sur 53
Procédure )upprimer(x : Entier !ar " : Ar%re# Var P% J : Arbre $é%ut )i B ni Alors Ecrire "#Arbre >ide #% /% # est introu>abe#& )inon )i BH)>a / Alors )i BH)Fis ni ET BH)FisD ni Alors QQ &i c’est une feuille
3i%érer"B& )inon )i BH)Fis @ ni ET BH)FisD ni Alors QQ &i le sommet admet un sous ar*re gauche IIR+%ils$
)inon )i BH)Fis ni ET BH)FisD @ ni Alors QQ &i le sommet admet un sous ar*re gauche IIR+%ils.
)inon )i BH)Fis @ ni ET BH)FisD @ ni Alors QQ &i le sommet admet deux fils QQ 5n cherche le !lus !etit ou le !lus grand N PlusPetit)ousAr%re$roit("Fils$# QQ ou aussi on !eut chercher le !lus grand >> N PlusGrand)ousAr%reGauche("FilsG#
P FilsG "FilsG Fils$ "Fils$ 3i%érer(P# " in )i )inon )i BH)>a 1 / Alors )upprimer"/% BH)Fis& )inon )upprimer"/% BH)FisD& in )i in )i in
"7"!##" 8+1,") %")(!")-
onction Taille (" : Ar%re# : Entier $é%ut )i B ni Alors Taille 0 )inon Taille ! Taille"BH)Fis& Taille"BH)FisD& in )i Fin
Page 44 sur 53
1onction /ax(x0y :Entier# : Entier $é%ut )i /15 Alors /ax / )inon /ax 5 in )i in onction
/onction Nom%re$eNoeudsExternes(" : Ar%re# : Entier $é%ut )i B ni Alors Nom%re$eNoeudsExternes 0 )inon )i Est2neeuille "B& Alors Nom%re$eNoeudsExternes ! )inon Nom%re$eNoeudsExternes Nom%re$eNoeudsExternes "BH)Fis& Nom%re$eNoeudsExternes "BH)FisD& in )i in )i in
2-
onction Nom%re$eNoeuds7nternes(" : Ar%re# : Entier $é%ut )i B ni Alors Nom%re$eNoeuds7nternes 0 )inon )i Est2neeuille "B& Alors Nom%re$eNoeuds7nternes 0 )inon Nom%re$eNoeuds7nternes ! Nom%re$eNoeuds7nternes "BH)Fis& Nom%re$eNoeuds7nternes "BH)FisD& in )i in )i in
Page 45 sur 53
0&!écification : on additionne les !rofondeurs des feuilles de < 3non vide4( étant la !rofondeur de la racine de <+
onction 3ongueurCheminAr%re(" : Ar%re pro' : Entier# $é%ut )i B ni Alors 3ongueurCheminAr%re 0 )inon )i BH)Fis BH)FisD Alors 3ongueurCheminAr%re 6ro' )inon 3ongueurCheminAr%re 3ongueurCheminAr%re "BH)Fis%6ro'!& 3ongueurCheminAr%re "BH)FisD%6ro'!& in )i in )i in
"7"!##" 8+/,!#'(!) "8 !"(! = Type Arbre : HnLud noued : Enregistrement Fis : Arbre >a : Entier FisD : Arbre Fin noued (iste : Hceue ceue : Enregistrement >a : Ar%re sui> : (iste Fin ceue Fie : Enregistrement Tte : (iste Jueue : (iste Fin Fie
-
Procédure 7nitialiserile(!ar : ile# $é%ut F)Tte ni F)Jueue ni in
Page 46 sur 53
1-
/-
2-
onction ileEstVide( : ile# : "ooléen $é%ut )i F)Tte ni Alors ileEstVide >rai )inon ileEstVide 'au/ in )i in Procédure En'iler(" : Ar%re !ar : ile# Var P :(iste $é%ut Aouer"P& PH)>a B PH)sui> ni )i F)Jueue @ ni Alors F)JueueH)sui> P )inon F)Tte P in )i F)Jueue P in
Procédure $é'iler(!ar " : Ar%re !ar : ile# Var P : (iste $é%ut )i F)Tte @ ni Alors P F)Tte B PH)>a F)Tte F)TteH)sui> 3i%érer "P& in )i )i F)Tte ni Alors F)Jueue ni in )i in
Page 47 sur 53
0-
Procédure ParcoursEn3argeur(" : Ar%re !ar larg :Entier#
3arg
I
Ecrire"#Arbre >ide#&
)inon 7nitialiserile "F& En'iler"B% F& argMma/ 0 Tant +ue N1N(ileEstVide "F aire $é'iler "B% F& )i B ni Alors )i arg 1 argMma/ Alors argMma/ arg in )i )i N1N(ileEstVide( F Alors arg 0 En'iler"/%F& in )i )inon arg arg ! Ecrire"BH)>a& )i BH)Fis @ ni Alors En'iler"BH)Fis% F& in )i )i BH)FisD @ ni Alors En'iler"BH)FisD% F& in )i in si in Tant +ue
larg
larg9max
in )i in
"7"!##" 8+2 ,( K8%G(" I"!) " )G("Procédure ConstruireVecteur( " :Ar%re !ar n :Entier !ar T :TA"# $é%ut )i B ni Alors T[i]
⌀
)inon T[i] B)>a ConstruireVecteur "BH)Fis% 2n% T& ConstruireVecteur "BH)FisD% 2n!% T& in )i
in
Page 48 sur 53
"7"!##" 8+0 ,! ''8)Procédure rotation9droite(!ar " : Ar%re# Var Tem6 : Arbre $é%ut Tem6 BH)Fis BH)Fis BH)FisD BH)FisD Tem6 B Tem6 in Procédure rotation9gauche(!ar " : Ar%re# Var Tem6 : Arbre $é%ut Tem6 BH)FisD BH)FisD BH)Fis BH)Fis Tem6 B Tem6 in
"7"!##" 8+A ,#'"Procédure Copier(A : Ar%re !ar " : Ar%re# $é%ut )i A @ ni Alors CréerElement "AH)>a% B& Copier"AH)Fis%B& Copier"AH)FisD%B& in )i in
"7"!##" 8+4 ,()'8Procédure usion(A0": Ar%re !ar C : Ar%re# $é%ut )i A @ ni ET B ni Alors Copier"A%.& )inon )i A ni ET B @ ni Alors Copier"A%.& )inon )i A @ ni ET B @ ni Alors )i AH)>a 1 bH)>a Alors CréerElement "AH)>a%.& usion"AH)Fis%B%.& usion"AH)FisD%B%.& )inon CréerElement "AH)>a%.& usion"A%BH)Fis%.& usion"A%BH)FisD%.& in )i in )i in )i in
Page 49 sur 53
"7"!##" 8+= ,""8"!"; ! '( #'%". Un ar*re est un ar*re dont tous les nPuds internes sont des !oints sim!les+ #’ar*re < est dégénéré si 57! D 57! E +
< " F* #a figure / montre qu’un ar*re dégénéré admet !our chaque sommet un seul fils+
< < $
onction Est$egenere(" : Ar%re# : "ooléen $é%ut )i B ni Alors EstDegenere >rai )inon )i "BH)Fis @ ni& ET "BH)FisD @ ni& Alors Est$egenere 'au/ )inon )i BH)Fis ni Alors Est$egenere Est$egenere "BH)FisD& )inon Est$egenere Est$egenere "BH)Fis& in )i in )i in )i in
1
< < $
onction Est$egenere(" : Ar%re# : "ooléen $é%ut )i "Taille"B& rai )inon Est$egenere 'au/ in )i in
Page 50 sur 53
1. 5n a!!elle ar*re *inaire un ar*re *inaire tel que chaque sommet !oss"de 0 ou 2 fils+ #’ar*re est com!let si 57! D "57! E B +
1 < " F* #a figure 2 montre qu’un ar*re com!let admet !our chaque sommet Héro fils ou deux fils+
< $
onction EstComplet(" : Ar%re0 h :Entier# : "ooléen $é%ut )i B ni Alors EstComplet "h*!& )inon EstComplet EstComplet "BH)Fis% h*!& ET EstComplet "BH)Fis% h*!&& in )i in
Complet : "ooléen Complet EstComplet("0
1 < F$
onction EstComplet(" : Ar%re# : "ooléen Var F : Fie (arg% argM6rochain : Entier $é%ut )i B ni Alors EstComplet >rai )inon 7nitialiser "F& En'iler"B% F& (arg 0 argM6rochain ! Tant +ue N1N(EstVide "F aire $é'iler"B%F& )i B ni Alors )i arg @ argM6rochain Alors
Page 51 sur 53
)inon (arg (arg ! )i B)Fis @ ni Alors En'iler "BFis% F& in )i )i B)FisD @ ni Alors En'iler "BFisD% F& in )i in si in Tant +ue EstComplet >rai in si
in
/. 5n a!!elle ar*re *inaire un ar*re *inaire 3com!let4 tel que chaque sommet est le !"re de sousar*res de N $ ,/- + Un ar*re *inaire !arfait !oss"de 2 C// sommets( oS est la hauteur de lLar*re+ onction EstPar'ait(" : Ar%re# : "ooléen Var F : Fie 'isM>ide% par'ait : Booéen $é%ut )i B ni Alors EstPar'ait >rai )inon 7nitialiser "F& En'iler "B% F& 'isM>ide 'au/ par'ait 'au/ Tant +ue N1N"EstVide"F& ET N1N"'isM>ide& aire $é'iler"B%F& )i BH)Fis ni Alors 'isM>ide >rai par'ait "BH)Fis ni& )inon En'iler "BH)Fis% F& )i BH)FisD @ ni Alors En'ier "BH)FisD% F& )inon 'isM>ide >rai in )i in )i in Tant +ue Tant +ue N1N "EstVide"F&& ET par'ait Faire $é'iler"B%F& par'ait "BH)Fis BH)FisD& in tant +ue 7nitialiser "F& EstPar'ait par'ait in si in
Page 52 sur 53