Vous êtes sur la page 1sur 11

Exercice 0 :

a) Lecture récursive d’une matrice


Procédure Lecture_M ( M : mat, l : entier, c : entier , i :entier , j :entier)
Début
Si (i < l)
alors
si (j < c)
alors lire (M[i][j])
Lecture_M( M,l,c,i,j+1)
sinon
Lecture_M( M,l,c,i+1,1)
fsi
fsi
Fin

/* Appel dans l’algorithme principal Lecture _M ( M,l,c,1,1 ) */

b) Affichage récursif d’une matrice


Procédure Affiche_M ( M : mat, l : entier, c : entier , i :entier , j :entier)
Début
Si (i < l)
alors
si (j < c)
alors ecrire (M[i][j])
Affiche_M ( M,l,c,i,j+1)
sinon
Affiche_M ( M,l,c,i+1,1 )
fsi
fsi
Fin
/* Appel dans l’algorithme principal : Affiche_M ( M,l,c,1,1 ) */
Exercice 1 :
Algorithme affichage
Procédure aff (i : entier)
Début
si(i<=10)
Alors écrire(i)
Aff(i+1)
Fsi
Fin

Début
aff (1)
Fin

/*Si on veut faire l’affichage inverse, c.a.d on affiche 10 9 8 … 1*/


Solution1 :
Algorithme affichage_inverse
Procédure aff_inv (i : entier)
Début
si(i>=1)
Alors ecrire(i)
aff_inv (i-1)
Fsi
Fin

Début
aff_inv (10)
Fin
_______________________________________
Solution2 :
Algorithme affichage_inverse
Procédure aff_inv (i : entier)
Début
si(i<=10)
Alors aff_inv (i+1)
ecrire(i)
Fsi
Fin

Début
aff_inv (1)
Fin

Exercice 2 :
Guess(3,1)=1+2+2+3=8

Exercice 3:
Fonction PGCD (X : entier, Y :entier) :entier
Début
si ( X%Y=0 ) alors PGCD Y
sinon PGCD  PGCD(Y, X%Y)
finsi
Fin
Exercice 4:

1) Fonction somme (a : entier, b : entier) : entier


Début
si (a=0) alors sommeb
sinon
si( b=0) alors sommea
sinon
/* ce test permet d’accélérer l’exécution en diminuant le nombre d’appels récursifs*/
si (a>b) alors somme  1+ somme (a,b-1)
sinon somme 1+ somme(a-1,b)
finsi
finsi
finsi
Fin

2) Fonction produit (a : entier, b : entier) : entier


Début
si (a=0) alors produit0
sinon si (b=0) alors produit0
sinon produit a +produit(a,b-1)
finsi
finsi
Fin

3) Fonction reste (a : entier, b : entier) : entier


Début
si (a=b) alors reste0
sinon si (a<b) alors reseta
sinon reste reste(a-b, b)
finsi
Fin

EX4.1
Ecrire un programme qui demande un entier n positif et teste si ce nombre est un multiple de 5 (sans
utiliser les opérateurs /, mod ).

Algorithme Multiple_5
var
n : entier
Fonction M_5 (x : entier) : booléen
début
si (x=0) alors M_5  vrai
sinon si (x<5) alors M_5 faux
sinon M_5  M_5 (x-5)
finsi
finsi
Fin
début
Répéter
Lire(n)
Jusqu’à (n>=0)
Si (M_5 (n)= vrai) alors écrire (n, « est multiple de 5 »)
sinon écrire (n, « n’est pas multiple de 5 »)
finsi
Fin

Exercice 5

1) Fonction longueur (a : entier) : entier


Début
si (a/10 = 0) alors longueur 1
sinon longueur  1+ longueur(a/10)
finsi
Fin
2) Fonction somme (a : entier) : entier
Début
Si (a/10 = 0) alors somme a
Sinon somme  a%10+ somme (a/10)
Finsi
Fin

Exercice 6
Fonction Fibonacci (n : entier) : entier
Début
si (n=0) ou (n=1) alors Fibonacci  1
sinon Fibonacci  Fibonacci(n-1) +Fibonacci(n-2)
finsi
Fin

Exercice 7

Fonction ACKERMAN (M,N :entier) :entier


Début
si (M=0) alors ACKERMANN+1
sinon
si (N=0 et M>0) alors ACKERMAN ACKERMAN(M-1,1)
sinon si (M>0 et N>0) alors ACKERMAN ACKERMAN(M-1, ACKERMAN(M,N-1))
finsi
finsi
Fin
Exercice 8
Algorithme Syra
Var
n,test : entier

fonction saisie() ; entier


var i;
début
répétez
ecrire("donnez un entier strictement positif : ")
lire(i)
jusqu’à (n>0)
saisie i
fin

Fonction Collatz (x : entier) : entier


Début
Si (x % 2 =0)
Collatz  x / 2
Sinon
Collatz  3 * x + 1
Fsi
Fin

Procédure Syracuse (n : entier, test :entier)


Début
Si(n=1 et test=0)
alors
écrire(n)
Syracuse (Collatz (1))
Sinon Si (n = 1)
Alors
écrire(n)
return
sinon
Syracuse (Collatz (n))
Fsi
Fsi
Fin

Début
Nsaisie()
syracuse(n,0)
fin
Exercice 9
procédure Conv_décimal_binaire (n : entier)
Début
Si (n/2> 0)
Alors
Conv_décimal_binaire (n/2)
fsi
Ecrire (n%2)
Fin

Exercice 10
Algorithme Tableau
Const
MAX=10 /* Taille maximale du tableau */
Type
tab : Tableau [1 .. MAX] d’entiers
Var
T : tab
i : entier

Fonction Lecture_n() :entier

Var

n :entier

Début

Répéter
Ecrire ( « donnez la taille du tableau» )
Lire(n)
Jusqu’à (n>=1 et n<= MAX)
Lecture_ligne  n
Fin

/*Première méthode*/
Procédure Remplir (var T : tab, n: entier, i : entier)
Début
Si (i<=n)
Alors
Ecrire (Donnez un entier)
Lire(T[i])
Remplir (T, i+1)
Fsi
Fin
/*Appel dans l’algorithme principal : Remplir(T,n,1)
On commence par le remplissage de la première case du tableau T[1]*/
/*Deuxième méthode*/
Procédure Remplir (var T : tab, n : entier)
Début
Si (n>=1)
Alors
Ecrire (Donnez un entier)
Lire(T[n])
Remplir (T, n-1)
Fsi
Fin

\*Appel dans l’algorithme principal : Remplir(T,n) avec n est la taille du tableau


On commence par le remplissage de la dernière case du tableau T[n]*\
Procédure Afficher (T : tab, n: entier, i : entier)
Début
Si (i<=n)
Alors
Écrire(T[i])
Afficher (T, i+1)
Fsi
Fin

Procédure Afficher_inverse (T : tab, n: entier, i : entier)


Début
Si (i<=n)
Alors
Afficher_inverse (T, i+1)
Écrire(T[i])

Fsi
Fin
Procédure Permuter (var T : Tab, i: entier,j : entier)
Var
aux : entier
Début
aux T[i]
T[i] T[j]
T[j] aux
Fin

Procédure INV_TAB_REC (var T : Tab, n, i : entier)


Début
Si(i<=n/2)
Alors
Permuter (T, i, n-i+1)
INV_TAB_REC (T, n, i+1)
Fsi
Fin
Fonction Somme_tab (T : tab, n : entier)
Début
Si (n=1)
Alors Somme_tab  T[1]
Sinon
Somme_tab  T[n]+ Somme_tab (T, n-1)
Fsi
Fin

Fonction Max_Tab (T :tab, n : entier)


Début
Si (n = 1)
Alors Max_Tab  T [1]
Sinon
Si(T[n]> Max_Tab (T, n-1))
Alors Max_Tab  T[n]
Sinon Max_Tab  Max_Tab (T, n-1)
Fsi
Fsi
Fin

Fonction Tab_Tri (T : tab, n : entier) : booléen


Début
Si(n>=2)
Alors
Si(T[n]<T[n-1])
Alors Tab_Tri  FAUX
Sinon
Tab_Tri  Tab_Tri(T,n-1)
Fsi
Fsi
Sinon
Tab_Tri VRAI

Fin

/*Recherche dans un tableau non trié */

Fonction recherche (Tab : tableau d’entier, n, i, Val : entier) : entier

Début
Si ( i>n )
Alors
Recherche  -1 /* L’élément n’existe pas*/
Sinon
Si( T[i]=val )
alors
recherche  i

Sinon
recherche  recherche (T, n, i+1, Val)
fsi
fsi

Fin

/*Ecrire une fonction récursive de recherche dichotomique d'un élément dans un tableau d'entiers
de taille n ordonné par ordre croissant. */

Fonction Rech_Dichot (Tab : tableau d’entier, ind_deb, ind_fin, Val : entier) : entier

Var

Mil : entier

Début

Mil  (ind_fin+ind_deb) div 2

si (ind_deb>ind_fin) alors Rech_Dichot  -1 /* L’élément n’existe pas*/

Si Tab[mil]= Val alors Rech_Dichot mil

Sinon si (Tab[mil]<Val) alors Rech_Dichot Rech_Dichot (Tab, mil+1, ind_fin, Val)

Sinon Rech_Dichot Rech_Dichot (Tab, ind_deb, mil-1, Val)

Finsi

Finsi

Fin

/* Corps de l’algorithme*

Début

nLecture_n()

/*Première méthode*/
Remplir (T, n, 1)

/*Deuxième méthode*/
Remplir (T, n)

Afficher(T, n, 1)

Afficher_inverse (T, n, 1)
Ecrire (« La somme du tableau est :», Somme_tab (T, n))
Ecrire (« Le MAX du tableau est :», Max_Tab (T, n))
Si (Tab_Tri (T, n) =VRAI)
Alors
Écrire (« Tableau trié »)
Sinon
Écrire (« Tableau non trié »)
Fsi
Ecrire (« Donnez la valeur recherché »)
Lire(VAL)

/*Recherche dans un tableau non trié */


Si (recherche (Tab, n, 1, Val) = -1)
Alors
Ecrire (« Valeur non éxistante »)
Sinon
Ecrire (« Valeur éxistante »)
Fsi

/*Recherche dans un tableau trié */


Si ((Rech_Dichot (Tab, 1, n, Val) = -1)
Alors
Ecrire (« Valeur non existante »)
Sinon
Ecrire (« Valeur existante »)
Fsi

FIN

Exercice 11 :
Fonction card_inter(A : tab, n : entier, i : entier, B : tab , m :entier , j : entier ) : entier
Début
Si ( i≤n et j≤m )

alors si (A[i]≠n et A[i]= A[i+1] )

alors card_inter  card_inter(A , n , i +1, B , m , j )


fsi

si (B[j] ≠m et B [j]= B[j+1] )


alors card_inter  card_inter(A , n , i , B , m , j +1)
fsi

si (A[i] =B[j])
alors card_inter 1+ card_inter(A , n , i +1, B , m , j+1 )
sinon si(A[i]<B[j])
alors card_inter  card_inter(A,n,i+1,B,m,j);
sinon card_inter  card_inter(A,n,i,B,m,j+1);
fsi
fsi
Sinon
card_inter 0
Fin

Exercice 12 :
Fonction palin(T : tab, n : entier, i : entier ) : booleen
Début
Si(i<=n div 2)
alors
si(T[i] ≠T[n-i+1])
alors
palinFAUX
sinon
palinpalin(T,n,i+1)
fsi
fsi
palinVRAI
Fin

Vous aimerez peut-être aussi