Explorer les Livres électroniques
Catégories
Explorer les Livres audio
Catégories
Explorer les Magazines
Catégories
Explorer les Documents
Catégories
" #
$%&
'!( -
!"
#"
Page 1 sur 53
$ %"
$ &'()
$
%
+ ,
-........................................................................................ /
+ ............................................................................................................................ 0
+ 1,!
-............................................................................................................................ 1
+1.......................................................................................................................... 2
+/,
-.............................................................................................................. 13
+/.......................................................................................................................... 11
+ 2,
-............................................................................................................... //
+2.......................................................................................................................... /2
+ 0,
#
&& ' !
$ -................................................................................................. /4
+0.......................................................................................................................... 23
5 ".................................................................................................................................... 0/
Page 2 sur 53
(
%
#
)
:
:
<
<
#$
#$
;"
*
< 133=>133? @ )
< ! $ %"
"!"5
< ! $ &'() %
+ ,
'*6
"7"!#
#" 8+
, un
On vous demande de saisir 10 tudiants, les ranger dans un tableau puis les afficher.
"7"!#
#" 8+1
On reprend lexercice prcdent mais on rajoute en plus pour chaque tudiant ses deux
notes. On vous demande de crer le nouvel enregistrement nomm 8
qui est
caractris par NoteCc (Note de contrle continu) et NoteEx (Note dexamen).
Modifier lenregistrement "
lenregistrement 8
.
0.3
0.7
#" 8+/
Une procdure de cration du fichier qui contient les noms des personnes.
Une procdure daffichage des noms de personnes.
Une fonction qui permet de chercher un nom pass en argument et qui renvoie
vrai si ce dernier est existant et faux sinon.
Une procdure qui copie les noms sans compter le nom pass en paramtre.
9crire le programme principal faisant appel aux diffrents sous programmes.
Page 3 sur 53
"7"!#
#" 8+2
On souhaite mmoriser les tudiants de la facult ainsi que leurs notes dans un fichier
nomm $ .
. Un tudiant est caractris par un
, un
et un
. Chaque tudiant aura deux notes : une note de contrle contenu et une note
dexamen.
<
. Crer les enregistrements ncessaires pour laborer ce programme.
1. 9crire une procdure permettant de saisir les notes associes un tudiant donn
en paramtre.
/. 9crire une procdure permettant de crer le fichier des tudiants.
2. 9crire une procdure qui permet de copier les tudiants qui ont eu une moyenne
suprieure ou gale 10 du fichier $ .
dans un tableau des tudiants.
0. 9crire une procdure qui permet de trier un tableau dtudiants dans lordre
dcroissant selon leurs moyennes.
A. 9crire une procdure qui permet de crer le fichier nomm B
.
qui
contiendra les tudiants qui sont russt, tri dans lordre dcroissant.
4. 9crire une procdure qui permet dafficher le contenu du fichier
.
.
=. 9crire le programme principal qui fait appel aux diffrents sous programmes.
Page 4 sur 53
#
"7"!#
#" 8+
Algorithme GesEtud
Type
Etudiant : Enregistrement
Ident : Entier
Nom : chaine[30]
Prnom : chaine[20]
Fin Etudiant
TAB : Tableau de 10 Etudiant
Var
ET : TAB
n : Entier
Procdure Remplissage(m : Entier ; var T : TAB)
Var
i : Entier
Dbut
Pour i de 1 m faire
Ecrire("Etudiant n",i," :")
Ecrire("Identifiant : "),Lire(T[i].Ident)
Ecrire("Nom : "),Lire(T[i].Nom)
Ecrire("Prnom : "),Lire(T[i].Prnom)
Fin Pour
Fin
Procdure Affichage(m : Entier ; var T : TAB)
Var
i : Entier
Dbut
Ecrire("Identifiant
Nom
Prnom : ")
Ecrire("*************************************************")
Pour i de 1 n faire
Ecrire(T[i].Ident," ",Lire(T[i].Nom," ",T[i].Prnom)
Fin Pour
Fin
Dbut
n
10
Remplissage(n,ET)
Affichage(n,ET)
Fin
Page 5 sur 53
"7"!#
#" 8+1
Algorithme GesEtud
Type
Notes : Enregistrement
noteCc : Rel
noteEx : Rel
Fin Notes
Etudiant : Enregistrement
Ident : Entier
Nom : chaine[30]
Prnom : chaine[20]
Note : Notes
Fin Etudiant
TAB : Tableau de 10 Etudiant
Var
ET : TAB
n : Entier
Procdure SaisiNotes(var E : Etudiant)
Var
noteEntrer : Rel
Dbut
Rpter
Ecrire("Note contrle contenu : "),Lire(noteEntrer)
Jusqu noteEntrer 0 ET noteEntrer 20
E.Note.NoteCc
noteEnter
Rpter
Ecrire("Note examen : "), Lire(noteEntrer)
Jusqu noteEntrer 0 ET noteEntrer 20
E.Note.NoteEx
noteEnter
Fin
Procdure Remplissage(m : Entier ; var T : TAB)
Var
i : Entier
Dbut
Pour i de 1 m faire
Ecrire("Etudiant n",i," :")
Ecrire("Identifiant : "),Lire(T[i].Ident)
Ecrire("Nom : "),Lire(T[i].Nom)
Ecrire("Prnom : "),Lire(T[i].Prnom)
SaisiNotes(T[i])
Fin Pour
Fin
Page 6 sur 53
"7"!#
#" 8+/
Algorithme TraiTFichNom
Type
Nom : chaine[30]
FichNoms : Fichier de Nom
Var
F1,F2 : FichNoms
Procdure Cration(Var fn : FichNoms)
Var
n : Nom
rep : caractre
Dbut
Ouvrir(fn,E)
rep
O
Tant que MAJUS(rep) = O Faire
Ecrire(Nom : ), Lire(n)
Ecrire(fn,n)
Ecrire(Voulez*vous ajouter un autre nom (O/N) : )
Lire(rep)
Fin Tant que
Fermer(fn)
Fin
Procdure Affichage(fn : FichNoms)
var
n : Nom
Dbut
Ouvrir(fn,L)
Lire(fn,n)
Tant que NON(FinDeFichier(fn)) Faire
Ecrire(n)
Lire(fn,n)
Fin Tant que
Fermer(fn)
Fin
Fonction Recherche(x : Nom ; fn : FichNoms) : Boolen
var
n : Nom
Trouve : Boolen
Dbut
Ouvrir(fn,L)
Lire(fn,n)
Trouve
(n = x)
Tant que Trouve=faux ET NON(FinDeFichier(fn)) Faire
Lire(fn,n)
Trouve
(n = x)
Fin Tant que
Si FinDeFichier(fn) Alors
Recherche
faux
Sinon
Recherche
vrai
Fin Si
Fermer(fn)
Fin
Page 8 sur 53
Dbut
Cration(F1)
Affichage(F1)
Si Recherche("Riadh",F1) Alors
Ecrire("Riadh est existant dans le fichier")
Sinon
Ecrire("Riadh est non existant dans le fichier")
Fin Si
Copier("Riadh",F1,F2)
Affichage(F2)
Fin
"7"!#
#" 8+2
Algorithme GesEtudFichier
Type
Notes : Enregistrement
noteCc : Rel
noteEx : Rel
Fin Notes
Etudiant : Enregistrement
Ident : Entier
Nom : chaine[30]
Prnom : chaine[20]
Note : Notes
Fin Etudiant
TAB : Tableau de 100 Etudiant
FichEtud : Fichier de Etudiant
Page 9 sur 53
Var
Fe,Fr : FichEtud
Procdure SaisiNotes(var E : Etudiant)
Var
noteEntrer : Rel
Dbut
Rpter
Ecrire("Note contrle contenu : "),Lire(noteEntrer)
Jusqu noteEntrer 0 ET noteEntrer 20
E.Note.NoteCc
noteEnter
Rpter
Ecrire("Note examen : "), Lire(noteEntrer)
Jusqu noteEntrer 0 ET noteEntrer 20
E.Note.NoteEx
noteEnter
Fin
Procdure Cration(var fn : FichEtud )
Var
Et : Etudiant
rep : caractre
Dbut
Ouvrir(fn,E)
rep
O
Tant que MAJUS(rep) = O Faire
Ecrire("Identifiant : "),Lire(Et.Ident)
Ecrire("Nom : "),Lire(Et.Nom)
Ecrire("Prnom : "),Lire(Et.Prnom)
SaisiNotes(Et)
Ecrire(fn,Et)
Ecrire(Voulez*vous ajouter un autre nom (O/N) : )
Lire(rep)
Fin Tant que
Fermer(fn)
Fin
Procdure CopierDansTab(fn :FichEtud; var n:Entier ;var T : TAB )
var
Et : Etudiant
Moy : Rel
Dbut
Ouvrir(fn,L)
Lire(fn,Et)
n
0
Tant que NON(FinDeFichier(fn)) Faire
Moy
0.3 x Et.Note.noteCc + 0.7 x Et.Note.noteEx
Si Moy 10 Alors
n
n + 1
T[n]
Et
Fin Si
Lire(fn,Et)
Fin Tant que
Fermer(fn)
Fin
Page 10 sur 53
Dbut
Cration(Fn)
Affichage(Fn)
Rsultat(Fn,Fr)
Affichage(Fr)
Fin
Page 11 sur 53
(
%
#
)
:
:
< 133=>133? @ )
<
<
#$
#$
;"
*
< ! $ %"
"!"5
< ! $ &'() %
+ 1,!
-
,!
'*6
"7"!#
#" 8+
9crire une fonction rcursive qui retourn la somme des chiffres dun entier N donn.
( 123 == > 1 + 2 + 3 = 6 )
"7"!#
#" 8+1
9crire une fonction rcursive qui calcul la factorielle dun entier N positif.
( 5 ! = 5 x 4 x 3 x 2 x 1 = 120)
"7"!#
#" 8+/
9crire une fonction rcursive qui permet de dterminer si un entier N saisi au clavier est
premier ou pas. (Un nombre premier nest divisible que par 1 ou lui mme).
"7"!#
#" 8+2
9crire une procdure rcursive qui permet dinverser une chaine de caractres sans utiliser
une chaine temporaire.
information
"7"!#
noitamrofni
#" 8+0
9crire une fonction rcursive qui permet de vrifier si deux chaines s1 et s2 sont
anagrammes ou non.
s1 et s2 sont anagrammes sils se composent de mme lettre.
s1 = "chien" ; s2 = "niche"
"7"!#
vrai
#" 8+A
9crire une fonction rcursive qui permet de vrifier si un mot planch en paramtre est
palindrome ou non.
mot = "aziza"
vrai ;
mot = "alga"
Page 12 sur 53
faux
"7"!#
#" 8+4
#" 8+=
<&
<
&-
8& :
elle est utilise pour renvoy sil ya eu une permutation au cours du parcours du
tableau.
"7"!#
#" 8+?
9crire une procdure rcursive nomme Anagramme qui permet dafficher tous les
anagramme dune chaine ch.
NB : Utiliser une permutation circulaire pour rsoudre ce problme.
ch="iag"
Les anagrammes de iag sont :
1)
2)
3)
4)
5)
6)
"7"!#
aig
agi
gai
gia
iga
iag
#" 8+
Page 13 sur 53
#
"7"!#
+1
#" 8+
"7"!#
#" 8+1
"7"!#
#" 8+/
Page 14 sur 53
"7"!#
#" 8+2
"7"!#
!!
"
!!
!! #
!! $
!!
#" 8+0
&
Si p = 0 Alors
Anagramme
faux
Sinon
EFFACER(s1,1,1) !!#
%
EFFACER(s2,p,1) !!#
Anagramme
Angramme(s1,s2)
Fin Si
Fin Si
Fin Si
Fin
Page 15 sur 53
%
&
"7"!#
#" 8+A
"7"!#
#" 8+4
"
"7"!#
#" 8+=
'%
"
"7"!#
#" 8+?
Si LONG(ch)>1 Alors
!!
Ch
Fin Si
Fin
ch[LONG(ch)] + SOUS;CHAINE(ch,2,LONG(ch)*1)
Page 17 sur 53
F
!
"#
$"
%"
& &
'( (
$
%
" )*#
1 2 0,
.
# !
- + (%
& ++ #1
"#
$"
%"#
& &
'( (
$
% # " )*#
& ++ #1
- + (%
+ !
"#
$"
+ - + (%
%"+
& &
'( (
& &
$
% + " )*# &
- /% +")*# &
/,
1 / /,
"#
$"
%"#
& &
'( (
$
% # " )*#
(,
+ #!
"#
$"
%"+
'( (
$
- +
0,
Page 18 sur 53
+ - + (%
"7"!#
.
#" 8+
Algorithme Pyramide
Var
n : Entier
!!
Dbut
n
Saisie()
Dessiner(1,n)
!!
!!
Fin
Page 19 sur 53
(
%
#
)
< ! $ %"
"!"5
< ! $ &'() %
+/,
$
,
'*6
<
<
#$
#$
;"
*
< 133=>133? @ )
<
(
(
)
,
,
"7"!#
#" 8+
,!
"
( #'(!)-
- Dfinir une liste simple chaine compos dune valeur entire et dun pointeur vers
llment suivant ;
1- Dclarer une variable de ce type dfini dans la question 1) ;
/- crire une procdure permettant de crer une liste chaine de n entiers.
#
, <"
<
2- crire deux procdures lune itrative et lautre rcursive permettant dafficher les
lments de la liste.
$
$
, <
! , <
0- crire une fonction rcursive qui permet de rechercher un lment x dans la liste.
! $
$ , <"
<
-<&
, <"
<
"7"!#
, <"
#" 8+/
<
#" 8+1
&
#" 8+2
crire une procdure qui permet de concatner deux listes chaines L1 et L2 dentiers dans
une troisime liste L3. Il faut traiter toutes les contraintes possibles.
Page 20 sur 53
"7"!#
#" 8+0
On dispose de deux listes L1 et L2 tris qui sont tris dans lordre croissant. crire une
procdure
qui permet de fusionner deux listes L1 et L2 dans la liste L1.
"7"!#
#" 8+A
crire une procdure qui permet de supprimer les doublons dans une liste chaine trie
dans lordre croissant qui contient des caractres alphabtiques. Comment peut on liminer
les doublons si la liste ntait pas trie ?
"7"!#
#" 8+4
crire une fonction qui permet de vrifier si une liste est palindrome ou non.
"
<
H
7
Cette liste nest pas palindrome
"7"!#
#" 8+=
Une liste doublement chane est une liste qui admet, en plus de permettre l'accs au
suivant d'un lment, permet l'accs au prcdent d'un lment.
Quel est l'intrt de ce type de liste par rapport aux listes simplement chanes ?
crivez les fonctions et procdures suivantes en mettant ventuellement jour les
primitives prcdentes :
.
1.
/.
2.
0.
A.
"7"!#
, <
-<
renvoie le premier lment de L.
, <
-<
renvoie le dernier lment de L. Proposer
deux solutions lune en connaissant la queue de la liste et la deuxime en ne
connaissant pas cette dernire.
I , <
-< &
renvoie vrai si la liste est vide et faux
sinon.
,
<
- supprime le premier lment de L.
6
, ;G<
E
<
- ajoute P dans L aprs Q.
, <"
E
<
- supprime x dans L.
#" 8+?
. crire la procdure 6
circulaire L un entier e.
1. crire la procdure 6
Lun entier e.
/. crire une procdure
argument.
Page 21 sur 53
#
G(") '8) " #'(!)
! *
+
$-.
+/
,
/
"! *
,
$- 0
(
"7"!#
#" 8+
,!
"
( #'(!)-
Type
Liste : ^cellule
Cellule : Enregistrement
val
: Entier
suiv : Liste
Fin Cellule
1-
Var
L : Liste
/-
Tete
Fin
Page 22 sur 53
0-
Page 23 sur 53
4-
Sinon
SiL^.val = x Alors
P
L
&
L
L^.suiv
Sinon
P
L^.suiv
Tant que ((P nil) ET (P^.val x)) Faire
Q
P
P
P^.suiv
Fin Tant que
Si P nil Alors
Q^.suiv
P^.suiv
Librer(P)
Fin Si
Fin Si
Fin Si
Fin
%
"7"!#
#" 8+1
0
4
?
0
4
?
3
1
"7"!#
0
3
4
?
0
15
#" 8+/
Page 25 sur 53
'
"7"!#
#" 8+2
Procdure Concatener(L1,L2 :
Dbut
Si L1 = nil ET L2 = nil
L3
nil
Sinon Si L1 nil ET L2
L3
L1
Sinon Si L1 = nil ET L2
L3
L2
Sinon
'
L3
L1
Tant que
L3
Fin Tant
L3^.suiv
L3
Fin Si
()
L3^.suiv nil Faire
L3^.suiv
que
(" &
()
L2
#
L1
Fin
"7"!#
#" 8+0
Page 26 sur 53
"7"!#
Liste
trie
Liste
non
trie
#" 8+A
Page 27 sur 53
-.
Cette procdure
se charge de
parcourir la liste
G en supprimant
toutes les valeurs
de I
"7"!#
#" 8+4
Q P
Tant que Q^.suiv FinFaire
Q
Q^.suiv
Fin Tant que
Si P^.val = Q^.val Alors
Fin
Q
Sinon
Stop
vrai
#
Fin Si
Si Deb Fin Alors
Deb
Deb ^.suiv
Fin Si
Fin Tant que
Palindrome
NON(Stop)
Fin
"7"!#
#" 8+=
Lintrt dune liste doublement chaine par rapport une liste chaine simple
cest pour acclrer la recherche dun lment.
E1
E2
Queue
Tte
E3
Type
Liste : ^cellule
Cellule : Enregistrement
pred : Liste
val : Entier
suiv
: Liste
Fin Cellule
Var
L : Liste
Page 28 sur 53
1-
/"
2-
Page 29 sur 53
0-
Sinon
Si L^.val
P
L
Sinon
P
Tant
= x Alors
L
L^.suiv
L^.suiv
que ((P nil) ET (P^.val x)) Faire
Q
P
P
P^.suiv
Fin Tant que
Si P nil Alors
D
P^.suiv
D^.pred
Q
Q^.suiv
D
Librer(P)
Fin Si
Fin Si
Fin Si
Fin
Page 30 sur 53
"7"!#
#" 8+?
E1
E2
Tte
E3
.
"
Procdure AjouterTte(e : Entier ; var L : Liste)
Var
N,Tete,Queue: Liste
Dbut
Allouer(N)
N^.val
e
Si L = nilAlors
L
N
N^.suiv
L
L^.suiv
N
Sinon
Tete
L
Queue
L
Tant que Queue^.suiv TeteFaire
Queue
Queue^.suiv
Fin Tant que
Queue^.suiv
N
N^.suiv Tete
Tete
N
L Tete
Fin Si
Fin
0
#
&
0
2
#
Page 31 sur 53
Page 32 sur 53
1"
(
%
#
)
:
:
< 133=>133? @ )
<
<
#$
#$
;"
*
< ! $ %"
"!"5
< ! $ &'() %
+ 2,
'*6
)
"7"!#
#" 8+
")
")-
!
"!
)! )
3! 2
6! 2
5
%
8! 2
;
!
"!
)!
3!
6!
8!
*
)
2
2
2
:! 2
! 7
:! 2
"7"!#
")-
4
+
+ 5
5+ +
5
+ +
!
9
Page 33 sur 53
!
+
+ +
#
"7"!#
#" 8+
")
+2
")-
! .
4
3
"
8
9
-(
4 +
"!
Type
Pile : ^cellule
cellule : Enregistrement
val : Entier
suiv : Pile
Fin cellule
)!
Var
P : Pile
3!
6!
8!
:!
Page 34 sur 53
"7"!#
")-
! .
7
7
8
9
"!
-+
4 +
Type
Liste : ^cellule
cellule : Enregistrement
val : Entier
suiv : Liste
Fin cellule
File : Enregistrement
Tte : Liste
Queue : Liste
Fin File
)!
Var
F : File
3!
6!
8!
Page 35 sur 53
:!
Procdure Dfiler(var B : Arbre ; var F : File)
var
P : Liste
Dbut
Si F.Tte nil Alors
P
F.Tte
B
P^.val
F.Tte
F.Tte^.suiv
Librer(P)
Fin Si
Si F.Tte = nil Alors
F.Queue
nil
Fin Si
Fin
Page 36 sur 53
(
%
#
)
<
<
< ! $ %"
"!"5
< ! $ &'() %
+ 0,
,
#$
#$
;"
*
< 133=>133? @ )
* *
$ $ -
$ -
'*6
)
(
,
"7"!#
#" 8+
,!
"
- )
1-
(
:
/- )
&6 :
2- 2
<
0- )
A- 2
4- 2
A +
=- 2
7 =
57 =
! 7
57 =
! 7
97 =
! 7
?- 2
3- 2
"7"!#
- 2
1- 2
/- 2
2- 2
0- 2
Page 37 sur 53
"7"!#
#" 8+/,
! "(!-
!#'(!) "8
On souhaite parcourir et calculer la largeur dun arbre. Pour cela nous allons implmenter
les sous programmes suivants :
- 2
1- 2
+ 5
%
+ + !
5+ + !
#
/- 2
57 =
2- 2
0- 2
"7"!#
9
=
#" 8+2
+ + !
57
+
=
+ !
9
G("-
B=
crire une procdure qui construit un vecteur contenant les lments dun arbre binaire.
Pour indiquer un arbre vide, il suffit de la reprsenter par le symbole .
Par exemple, ci dessous la reprsentation de larbre de la figure 1 :
11
"7"!#
1
=
/
/0
2
2
0
2
A
1/
=
1
?
0
'8)-
"7"!#
- /
1- /
7 =
5
7 =
crire une procdure qui permet de copier un arbre binaire A dans un deuxime arbre B.
"7"!#
crire une procdure qui permet de fusionner deux arbres binaires A et B, et de renvoyer
un arbre C qui contient les deux arbres. Discuter les diffrents cas possibles.
"7"!#
'( #'%
"
On dispose des deux fonctions hauteur et taille. On souhaite crire des fonctions qui
permettent de vrifier si un arbre :
. est
:
Un arbre
est un arbre dont tous les nuds internes sont des points
simples.
Larbre < est dgnr si
57! D
57! E .
- crire la premire solution en utilisant les deux fonctions taille et hauteur.
*- crire nouveau sans utiliser les deux fonctions taille et hauteur.
1. est
:
Un arbre dont tous les niveaux sont remplis est
.
57! E
Larbre B est complet si
57! D "
B .
- crire la premire solution en utilisant la fonction hauteur.
*- crire la deuxime solution sans utiliser la fonction hauteur.
/. est
:
Un arbre est
si tous ses niveaux sont remplis, sauf le dernier dans lequel
les feuilles sont ranges le plus gauche possible.
crire une fonction permettant de vrifier si un arbre est parfait.
Page 39 sur 53
#
"7"!#
#" 8+
- *
,!
"
+0
( #'(!)-
! : Un * *
B est un ensemble de nuds qui est soit vide, soitcompos
dune racine et de deux arbres binaires disjoints
J *
et
J
*
$ .
!
F *
F *
F *
Hauteur de larbre
8L
Largeur de larbre
Un L
est un sommet qui a au moins un fils (gauche ou droit ou les deux).
Une
est un sommet qui n'a pas de fils.
La $
M
x est la longueur (en nombre d'arcs) du plus long chemin de
x une feuille.
La $
M
* est gale la hauteur de la racine.
1Type
Arbre : ^Nud
Nud : Enregistrement
Val : Entier
FilsG : Arbre
FilsD : Arbre
Fin Nud
/-
Var
A : Arbre
2-
Page 40 sur 53
0-
1-
/-
Page 41 sur 53
/
- 15 10 5 12 30 20 37
Procdure ParcoursPrfixe(B : Arbre)
Dbut
Si B nilAlors
Ecrire(B^.val)
ParcoursPrfixe(B^.FilsG)
ParcoursPrfixe(B^.FilsD)
Fin Si
Fin
6
4
-5 10 12 15 20 30 37
Procdure ParcoursInfix(B : Arbre)
Dbut
Si B nilAlors
ParcoursInfix(B^.FilsG)
Ecrire(B^.val)
ParcoursInfix(B^.FilsD)
Fin Si
Fin
Page 42 sur 53
- 5 10 12 20 37 30 15
Procdure ParcoursPostfix(B : Arbre)
Dbut
Si B nilAlors
ParcoursPostfix(B^.FilsG)
ParcoursPostfix(B^.FilsD)
Ecrire(B^.val)
Fin Si
Fin
0- Le principe de suppression doit obir aux constations suivantes :
La suppression commence par la recherche de l'lment. Une fois trouv ce dernier :
si c'est une feuille, on la vire sans problmes
si c'est un sommet qui n'a qu'un fils, on le remplace par ce fils
si c'est un sommet qui a deux fils, on a deux solutions :
. le remplacer par le sommet de plus grande valeur dans le sous arbre gauche.
1. le remplacer par le sommet de plus petite valeur dans le sous arbre droit.
Pour simplifier le travail nous allons commencer par crire deux fonctions : la premire
renvoie llment qui a la plus grande valeur dans le sous arbre gauche ; la deuxime
renvoie llment qui a la plus petite valeur dans le sous arbre droit.
Fonction PlusPetitSousArbreDroit(B : Arbre)
Dbut
Si B^.FilsG nil Alors
PlusPetitSousArbreDroit
PlusPetitSousArbreDroit(B^.FilsG)
Sinon
PlusPetitSousArbreDroit
Fin Si
Fin
PlusGrandSousArbreGauche(B^.FilsD)
Sinon
PlusGrandSousArbreGauche
Fin Si
Fin
Page 43 sur 53
"7"!#
-
Page 44 sur 53
2-
Page 45 sur 53
tant la
"7"!#
#" 8+/,
!#'(!) "8
! "(!-
=
Type
Arbre : ^nud
noued : Enregistrement
FilsG : Arbre
val : Entier
FilsD : Arbre
Fin noued
Liste : ^cellule
cellule : Enregistrement
val : Arbre
suiv : Liste
Fin cellule
File : Enregistrement
Tte : Liste
Queue : Liste
Fin File
Page 46 sur 53
1-
/-
2-
Page 47 sur 53
0-
Larg
Ecrire("Arbre vide")
Sinon
InitialiserFile(F)
Enfiler(B, F)
larg_max
0
Tant que NON(FileEstVide(F)) Faire
Dfiler(B, F)
Si B = nil Alors
Si larg > larg_max Alors
larg_max
larg
Fin Si
Si NON(FileEstVide(F)) Alors
larg
0
Enfiler(x,F)
Fin Si
Sinon
larg
larg + 1
Ecrire(B^.val)
Si B^.FilsG nil Alors
Enfiler(B^.FilsG, F)
Fin Si
Si B^.FilsD nil Alors
Enfiler(B^.FilsD, F)
Fin Si
Fin si
Fin Tant que
larg
larg_max
Fin Si
Fin
"7"!#
#" 8+2
G("-
Sinon
T[i]
B .val
ConstruireVecteur(B^.FilsG, 2*n, T)
ConstruireVecteur(B^.FilsD, 2*n+1, T)
Fin Si
Fin
Page 48 sur 53
"7"!#
'8)-
"7"!#
"7"!#
Page 49 sur 53
"7"!#
'( #'%
"
. Un arbre
est un arbre dont tous les nuds internes sont des points simples.
Larbre < est dgnr si
57! D
57! E .
<"
F *
La figure 1 montre quun arbre dgnr admet pour chaque sommet un seul fils.
<
<
$
Fonction EstDegenere(B : Arbre) : Boolen
Dbut
Si B = nil Alors
EstDegenere
vrai
Sinon
Si (B^.FilsG nil) ET (B^.FilsD nil) Alors
EstDegenere
faux
Sinon
Si B^.FilsG = nil Alors
EstDegenere
EstDegenere(B^.FilsD)
Sinon
EstDegenere
EstDegenere(B^.FilsG)
Fin Si
Fin Si
Fin Si
Fin
1
<
<
$
Fonction EstDegenere(B : Arbre) : Boolen
Dbut
Si (Taille(B) = Hauteur(B)+1) Alors
EstDegenere
vrai
Sinon
EstDegenere
faux
Fin Si
Fin
Page 50 sur 53
1<"
57! D "
B .
F *
La figure 2 montre quun arbre complet admet pour chaque sommet zro fils ou deux fils.
<
$
Fonction EstComplet(B : Arbre, h :Entier) : Boolen
Dbut
Si B = nil Alors
EstComplet
(h=*1)
Sinon
EstComplet
EstComplet(B^.FilsG, h*1)
ET
EstComplet(B^.FilsG, h*1))
Fin Si
Fin
Complet : Boolen
Complet
EstComplet(B,Hauteur(B))
1
<
F$
Page 51 sur 53
Sinon
Larg
Larg + 1
Si B .FilsG nil Alors
Enfiler(B FilsG, F)
Fin Si
Si B .FilsD nil Alors
Enfiler(B FilsD, F)
Fin Si
Fin si
Fin Tant que
EstComplet
vrai
Fin si
Fin
Page 52 sur 53
&
&
' !
5"
Page 53 sur 53