Académique Documents
Professionnel Documents
Culture Documents
var
x:entier
debut
si (i < n) alors
Fonction Ack(M,N : entier) : entier
x<-T[n]
Var T[n]<-T[i]
T[i]<-x
Début
Retourner(N+1) fsi
fin.
Sinon
Retourner (Ack(M-1,1)) T:
Sinon 2 5 1 3 10
Retourner(Ack(M-1,Ack(M,N-1))) 1 2 3 4 5
Fsi x:5
Si 1<5 ? oui
Inverse(T,2,4)
Si 2<4 ? oui
Inverse(T,3,3)
Si 5>0 ? OUI
Type :
si T[5]=5 ?
Tab=tableau[1..Max] d’entiers
(1+occurrence(T,5,4)=2)=3
fonction occurence(t:tab ; x,n,i:entier): entier
Debut Si 4>0 ? oui
si (i<=n) alors
siT[4]=5 ?oui
si t[i]=x alors
retourner (1+ occurence(t,x,n,i+1)) (1+occurrence(T,5,3)=1)=2
sinon
retourner(occurence(t,x,n,i+1)) Si 3>0 ? oui
Si T[3]=5 ?
fsi
Occurrence(T,5,2)=1
sinon
Si2>0 ?oui
retourner(0) Si T[2]=5 ? oui
fsi (1+occurrence(T,5,1)=0)=1
Fin Si 1 >0 ? oui
Occurrence(T,5,0)=0
fonction occurence(t:tab ; x,n:entier): entier
Debut Si0>0 ? NON
si (n>0) alors
si t[n]=x alors STOP et retourner(0) à la fonction appelante
retourner (1+ occurence(t,x,n-1))
sinon
retourner(occurence(t,x,n-1))
fsi
sinon
retourner(0)
fsi
Fin
Exemple :
T:
2 5 1 5 5
1 2 3 4 5
x:5
Fonction RDP(T:tableau[1..Max]:entier;N:entier):entier
Debut
Si N>0 Alors
Si(T[N]>0)alors
Retourner(N) [16:37] Mazen Mdimegh
Sinon
Retourner(RDP(T,N-1)) fonction ParitéAlterné(T:tab,n:entier) :booléen
FinSi Début
si (n<0)alors
Sinon retourner (vrai)
Retourner(0) sinon
si (t[n]mod2=1) et (t[n-1]mod2=0) alors
Fsi Retourner(ParitéAlterné(T,n-2))
Fin sinon
Retourner (faux
Fsi
Appel initial : RDP(T,9)=8
sinon
retourner (faux)
fsi
sinon
retourner(vrai)
fsi
Fin
sinon
retourner (faux)
Mouhamedmarwen.Bensalah
16:39 fin si
Nouveaux message
fonction parité(t:tab;i:entier) :booleen ... par khouloud jelassi
khouloud jelassi
Séance 2 : suite TD récursivité
fonction parité(t:tab;i,n:entier) :booleen
debut
si(i>n) alors
retourner vrai
sinon
si(t[i] mod 2 ==0 et t[i+1] mod 2 !=0 )alors
retourner (parité(t,i+2,n))
Procedure increment(var t: tab, n: entier)
debut
si (n > 0) alors
si ( t[n] % 2 == 0 ) alors
t[n] = t[n] + n
sinon 1. Fonction Paire :
t[n] = t[n] - n
fin si Fonction Paire (T:TabEntier,i,n:entier):booléen
increment(t,n-1) Debut
fin si si (i<=n) alors
fin si (T[i]mod2)=0 alors
retourner( Paire (T,i+1,n))
sinon
retourner (faux)
Procédure Increment(var T:tableau[1..Max]d'entier;i,N:entier)
Début finsi
Sinon
Si i<=n alors
si (T[i]%2=0)alors Retourner(vrai)
T[i]<-t[i]+i finsi
sinon fin
T[i]<-t[i]-i
Version 2 :
fsi
Fonction Paire(T : TabEntiers, n : entier) : booléen
Incrément(T,i+1,N)
fsi Début
Fin
Si n>0 Alors
Si T[n]mod2 =0 Alors
Sinon
Retourner (Faux)
Fsi sinon
T: sinon
2 7 8 10
retourner (vrai)
n=4 fsi
Appel initial (version 2) : Paire (T,4)=Faux
fin
Si 4>0 ? oui
Version 2 :
Si T[4] est pair OUI
Alterne(T,4,3)=vrai
[11:47] mohamed amine ben chiba
Si 3<3 ? non
si 3=3 ? OUI fonction plindrome(s:chaine de caractere ; i,n:entier):booleen
fsi
sinon
retourner(vrai)
fsi
fin
fonction palindrome(ch : chaine de carractere; i, n: entier) : boolean
debut
si (i >= n) alors
retourner (vrai)
sinon
si (ch[i] == ch[n]) alors
retourner (palaindrome(ch,i+1,n-1))
sinon
fonction LP(l:Liste): booleen
debut
si (l = nill) alors
Séance 3 : retourner (vrai)
sinon
Si @0=nil ? non
LP(@2)
Si @2=nil ?
fonction LP(l:Liste):booleen
debut
si(l=nil) alors
retourner (vrai)
sinon
l: Liste retourner NON( LP(l^.next))
finsi
fin
@0
Appel initial : LP(@0)=faux
2 5 41 Si @0=nil ? non
NON(LP(@0^.next=@1)=vrai)=faux
@1 @2 Nil
Si @1=nil ? non
NON(LP(@1^.next=@2)=faux)=vrai
Si @2=nil ? non
NON(LP(@2^.next=nil)=vrai)=faux
Si nil=nil ? oui
Stop et retourner vrai Pgcd(x,y)=Local z
z=x
Dérécursivation = suppression de la récursivité = transformer un prog récursif en un prog Tant que y<>0 faire
itératif équivalent.
x=y
1) Récursivité terminale
y=z mod y
Déf : une fct est dite récursive terminale ssi :
fin tq
- Elle contient un seul appel interne
- Elle se termine avec son unique appel interne retourner(x)
1.1) Type 1
Condition d’arrêt - Elle contient un seul appel interne
F(x) = si p(x) alors a(x) Traitement associé à la p(x) - Elle ne se termine pas avec son unique appel interne
Fsi
Sinon Fact=y
g(x-1,y*x)
fsi
Etape 2 : dérécursivation de g
Etape 2 : Dérécursivation de g
Sinon
g(y*x, x,n-1)
fsi
la version itérative de g :
y=y*x
n-1
Séance 4 :
fin tq
La fct f est récursive non terminale avec un seul appel.
g=y
La démarche de dérécursivation :
Etape 3 : déduction de la version itérative de Puiss à partir de g
Etape 1 : Introduction d’une fonction auxiliaire g (en fct de f) qui doit être récursive terminale.
On a : g(y,x,n)= y*Puiss(x,n)
On pose g(x,y,a,b)= a*f(x,y)+b
Puiss(x,n)=g(y=1,x,n)
=si x<y alors a*x+b
Puiss(x,n) = Local y
Sinon
y=1
a*(2*f(x-y,y)+x/y)+b
tant que n<>0 faire
fsi
y=y*x
= si x<y alors a*x+b
n-1
Sinon (2*a)*f(x-y,y)+ (a*(x/y) +b)
fin tq
Fsi
Puiss=y
= si x<y alors a*x+b
b= b+ a*(x/y) fd : AB
x=x-y fenreg
a=2*a
fin tq
retourner(a*x+b)
Fonction Taille(A :AB) : entier
Etape 3 : déduction de la version itérative de f à partir de celle de g
Début
On g(x,y,a,b)=a*f(x,y)+b
Si A=Nil alors
f(x,y)=g(x,y,a=1,b=0)
Retourner(0)
La version itérative de f :
Sinon
f(x,y) = Local a, b
Retourner(1+Taille(A^.fg) + Taille(A^.fd))
a=1
Fsi
b=0
Fin Appel initial : Taille(@0)=4
tant que x>=y faire
Si @0=nil ? NON
b= b+ a*(x/y) A @0
1+(Taille(A^.fg=Fg1)=2) + (Taille(A^.fd =Fd1)=1)=4
retourner(a*x+b)
9
Nil ; Nil
Fonction Feuille(A:AB) : booléen
Debut Fonction Hauteur(A : AB) :entier
si A=Nil alors
returner (faux) Début
sinon
si (A^.fg=Nil) et (A^.fd=Nil) ) Alors Si A= Nil alors
returner (vrai)
sinon Retourner(0)
returner (faux)
fin si Sinon
fsi
Fin Retourner(1+Max(Hauteur(A^.fg),Hauteur(A^fd))
Fsi
Fin
Fonction NbFeuilles(A :AB) : entier
Début
Si A=Nil alors
[27/09/2021 12:11] Amyr FEZZENI
Retourner(0) Function degenere(A:AB): booléen
début
si (A != nil) alors
Sinon
si (A^.fg != nil et A^.fd != nil)
retourner (faux)
Si A^.fg=Nil ET A^.fd=Nil ALors sinon
retourner (degenere(A^.fg) et degenere(A^.fd))
Retourner(1) fin si
sinon
retourner(vrai)
Sinon fin si
fin
Retourner(NbFeuilles(A^.fg) + NbFeuillez(A^.fd))
Fsi
Fsi
Fin
[09:24] mohamed amine ben chiba Procédure Exchange( var A : AB)
debut Début
retourner(dg(A^.fg) ) Exchange(A^.fd)
sinon Fsi
retourner(dg(A^.fd) ) Fin
finsi
sinon
retourner(vrai)
finsi
fin
Les ABR : Applications
finsi
fin
Cette fonction doit retourner vrai si tous les valeurs de tous les nœuds de B sont > à x
fonction parcours_d(B:ABR,x:entier):booleen
debut
@0 [11:10] mohamed amine ben chiba si (B!=nil) alors
A si (B^.val>x) alors
fonction tester(a:AB):booleen retourner(parcours_d(B^.fg,x) et parcours_d(B^.fd,x))
5 sinon
Fg1 ; Fd1 debut retourner(faux)
si (a!=nil) alors finsi
si (Parcours_G(a^.fg , a^.val) Alors sinon
1 7 retourner(vrai)
Nil ; Fd2 Fg3 ; Fd3 si (Parcours_D(a^.fd, a^.val ) )alors
retourner ( tester(a^.fg) et tester(a^.fd) ) finsi
sinon fin
6 6 9 retourner(faux)
Nil ; Nil Nil ; Nil Nil ; Nil
fsi
Ls1=^noeud1
Fonction rechercheOcc(A :ABR, x :entier, n : entier) :ABR
Noeud1=enreg
Début
Val : entier
@0 Si A=Nil alors
A
Next : Ls1 Retourner(Nil)
7
Fenreg Fg1 ; Fd1
Sinon
Si x<A^.val Alors
Prédicat d’entrée : A =NIL
5 17 Retourner(rechercheOcc(A^.fg,x,n))
Procédure Construire (l :Ls1, var A : ABR) Fg2 ; Fd2 Fg3 ; Fd3
Sinon
Début
Si l<> Nil alors Si x>A^.val Alors
Insérer_Réc(A,l^.val) 5 6 16 19
Construire(A,l^.next) Retourner(rechercheOcc(A^.fd,x,n))
Nil ; Nil Nil ; Nil Nil ; Nil
Fsi Sinon // A^.val=x
Fin 5
Si n==1 alors
Retourner(A)
Sinon
Retourner(rechercheOcc(A^.fg,x,n-1))
Fsi
Fsi
Fsi
Fin
fonction Affiche_Arbre(A:ABR)
proc debut
si (A!=nil) alors
retourner ("(" + Affiche_Arbre(A^.fg) + A^.val + Affiche_Arbre(A^.fd)
+ ")")
[11:18] Amyr FEZZENI sinon
procedure croissant(A: ABR) retourner ("_")
@0 debut fin si
A si (A!=nil) alors fin
croissant(A^.fg)
ecrire(A^.val)
7 croissant(A^.fd)
Fg1 ; Fd1
fin si [10:09] Amyr FEZZENI
fin fonction recherche_occu(A:ABR, val, n : entier) : ABR
17 debut
5
si (A!= nil) alors
Fg2 ; Fd2 Fg3 ; Fd3
si (A^.val == val ) alors
n = n-1
si (n == 0) alors
19 retourner (A)
5 6 16
Nil ; Nil Nil ; Nil Nil ; Nil fin si
fsi
5 pro si (val > A^.val) alors
retourner (recherche_occu(A^.fd, val, n))
c sinon
procedure Affiche_arbre(A: ABR)
retourner (recherche_occu(A^.fg, val, n))
debut
fin si
si (A!=nil) alors
sinon
Ecrire(‘’(‘’)
retourner (nill)
Affiche_arbre (A^.fg)
fin si
ecrire(‘’,’’, A^.val, ‘’,’’)
fin
Affiche_arbre (A^.fd)
Ecrire(‘’)‘’)
Sinon
Ecrire(‘’_’’)
fin si
fin
Séance 7 : suppression dans un ABR + les AVLs
Proc update_noeud ( var A:ABR; fils : ABR )
var
P : ABR
Debut
Suppression d’une valeur x d’un ABR A : si fils^.fd != NIL alors
update_noeud(A , fils^.fd)
sinon
1. Localisation du nœud contenant x (s’il existe) A^.val = fils^.val
2. Mise à jour des chaînages P = fils
3. Libération de l’élément ( Libérer(p)) fils = fils^.fg
liberer( P )
fin si
Fin
Le nœud qui contient la valeur x pourra être : Séance 8 : suite les AVLs