Les algorithmes recurrents

10

Click here to load reader

Transcript of Les algorithmes recurrents

Page 1: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 1

LES ALGORITHMES RECURRENTS

I. Introduction Un algorithme ou un traitement est dit récurrent s’il utilise un procédé itératif ou récursif pour

engendrer un résultat qui peut dépendre de p résultats précédents, nous parlons d’un algorithme ou d’un

traitement récurrent d’ordre p. (voir livre page 124).

II. Calcule de somme ACTIVITE1 : écrire un programme modulaire en Pascal qui permet de remplir une matrice carré d’ordre

N (4≤N≤20) par des entiers aléatoires appartenant à l’intervalle [-30,30], calcule puis affiche la somme des

éléments de M.

a) Analyse du programme principal

2) Résultat = Ecrire ("la somme des éléments de la matrice =", FN SOMME (M, N))

1) (M, N) = Proc remplir (M, N)

b) Analyse de la procédure remplir

DEF PROC REMPLIR (var M : matrice ; var N : entier)

Résultat= M, N

2) M= [ ] pour i de 1 à n faire

Pour j de 1 à n faire

M [i,j] Hasard(30) – Hasard(30)

Fin Pour

Fin Pour

1) N = [ ] Répéter

N= Donnée ("N=")

Jusqu’à (N dans [4..20])

Algorithme du programme principal

0) Début SOMME_MATRICE

1) Proc remplir (M, N)

2) Ecrire ("la somme des éléments de la matrice =",

FN SOMME (M, N))

3) Fin SOMME_MATRICE

TDNT

TYPE

Matrice = Tableau [1..50, 1..50] d’entiers

TDOG

Objet Type/Nature Rôle M matrice Contient des entiers

N Entier Taille de matrice

remplir Procédure Remplit la matrice

somme Fonction Calcule la somme

Algorithme de la procédure Remplir

0) DEF PROC REMPLIR (var M : matrice ; var n : entier)

1) Répéter

Ecrire ("N="), lire (N)

Jusqu’à (N dans [4..20])

2) pour i de 1 à n faire

Pour j de 1 à n faire

M [i,j] Hasard(30) – Hasard(30)

Fin Pour

Fin Pour

3) Fin Remplir

TDOL

objet Type/Nature Rôle

I Entier Compteur

j Entier compteur

Page 2: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 2

c) Analyse de la fonction somme

DEF FN SOMME (M : matrice ; N : entier) : entier

2) Résultat = somme S

1) S= [S0] pour i de 1 à n faire

Pour j de 1 à n faire

S S + M [i,j]

Fin pour

Fin pour

Algorithme de la fonction SOMME

0) DEF FN SOMME (M : matrice ; N : entier) : entier

1) S0

Pour i de 1 à n faire

Pour j de 1 à n faire

S S + M [i,j]

Fin pour

Fin pour

2) Somme s

3) Fin SOMME

TDOL

objet Type/Nature Rôle

I Entier Compteur

j Entier compteur

Page 3: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 3

III. Algorithmes récurrents sur les chaînes ACTIVITE2 : écrire un programme modulaire en Pascal qui permet de calculer et d’afficher le Nième terme

de la suite de Thue-Morse à partir du premier terme U0 ("1" ou "0") avec 2≤N ≤100.

Exemples :

U0= "0" U1= "01" U2= "0110" U3= "01101001" U4= "0110100110010110"

U0= "1" U1= "10" U2= "1001" U3= "10010110" U4= "1001011001101001"

On remarque que ce traitement est récurrent d’ordre 1.

a) Analyse du programme principal

2) Résultat= Ecrire ("la suite Thue Morse à partir de ", U0, "d’ordre ", N "=", FN Thue_Morse (U0, n)) 1) (U0, N)= proc saisir (U0, N)

b) Analyse de la procédure saisir

DEF PROC SAISIR (var U0 : caractère ; var N : entier) Résultat= U0, N

2) N= [ ] répéter N= Donnée ("N= ")

Jusqu’à N dans [2..100] 1) U0= [ ] Répéter

U0= Donnée ("premier terme= ") Jusqu’à U0 dans ["1", "0"]

c) Analyse de la fonction thue_morse

DEF FN Thue_Morse (U0 : caractère ; n : entier) : chaîne 2) Résultat= Thue_Morse ch 1) Ch= [ch U0] pour i de 1 à n faire

J 1 Tant que j≤long (ch) faire Si ch[j]="0" alors insère ("1", ch, j+1)

Sinon insère ("0", ch, j+1) J j+2 Fin tant que

Fin pour

Algorithme du programme principal

0) Début suite_thue_Morse

1) Proc saisir (U0, N)

2) ("la suite Thue Morse à partir de ", U0, "d’ordre ", N "=", FN

Thue_Morse(U0, n))

3) Fin suite_thue_Morse

TDOL

objet Type/Nature Rôle N entier Nombre de terme

U0 caractère Premier terme

Thue_Morse Fonction suite

Algorithme de la procédure saisir

0) DEF PROC SAISIR (var U0 : caractère ; var N : entier)

1) Répéter

Ecrire ("premier terme= "), lire (U0)

Jusqu’à (U0 dans ["1", "0"])

2) Répéter

Ecrire ("N= "), lire (N)

Jusquà N dans [2..100]

3) Fin SAISIR

Algorithme de la fonction Thue_Morse

0) DEF FN Thue_Morse (u0 : caractère ; n : entier) : chaîne

1) CH U0

Pour i de 1 à n faire J 1 Tant que j≤long(ch) faire Si ch[j]="0" alors insère ("1", ch, j+1) Sinon insère ("0", ch, j+1) J j+2 Fin tant que

Fin pour

2) Thue_Morse ch

3) Fin Thue_Morse

TDOL

Objet Type/Nature Rôle

I entier Compteur

J Entier Compteur

ch Chaîne Chaine finale Thue_Morse

Page 4: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 4

IV. Triangle de Pascal ACTIVITE3 : écrire un programme modulaire en Pascal qui permet d’afficher les n premiers lignes du

triangle de Pascal (2≤N≤30).

a) Analyse du programme principal

2) Résultat= proc affiche (M, N)

1) (M, N)= proc remplir (M, N)

Algorithme du programme principal

0) Début TRIANGLE_PASCAL

1) Proc remplir (M, N)

2) Proc Affiche (M, N)

3) Fin TRIANGLE_PASCAL

TDNT

TYPE

Matrice = Tableau [1..50, 1..50] d’entiers

TDOG

Objet Type/Nature Rôle M matrice Contient des entiers

N Entier Taille de matrice

remplir Procédure Remplit la matrice

affiche procédure Affiche la matrice

Page 5: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 5

b) Analyse de la procédure remplir

DEF PROC Remplir (var M : matrice ; var n : entier)

Résultat= M, N

2) M= [M[1,1] 1

M[2,1] 1

M[2,2] 1] pour i de 3 à n faire

M[1,i] 1

M[i, 1] 1

Pour j de 2 à n faire

M[i,j] M[i-1,j]+M[i-1,j-1]

Fin Pour

Fin Pour

1) N= [ ] répéter

N= Donnée ("N=")

Jusqu’à N dans [2..50]

c) Analyse de la procédure Affiche

DEF PROC Affiche (M : matrice ; n : entier)

Résultat= Affichage

1) Affichage= [ ] pour i de 1 à n faire

Pour j de 1 à i faire

Ecrire (M [i,j])

Fin pour

Fin pour

TDOL

objet Type/Nature Rôle

I Entier Compteur

j Entier compteur

TDOL

objet Type/Nature Rôle

I Entier Compteur

j Entier compteur

Algorithme de la procédure Remplir

0) DEF PROC Remplir (var M : matrice ; var n : entier)

1) répéter

Ecrire ("N="), lire(N)

Jusqu’à N dans [2..50]

2) M[1,1] 1

M[2,1] 1

M[2,2] 1

pour i de 3 à n faire

M[1,i] 1

M[i, 1] 1

Pour j de 2 à n faire

M[i,j] M[i-1,j]+M[i-1,j-1]

Fin Pour

Fin Pour

3) Fin Remplir

Algorithme de la procédure Affiche

0) DEF PROC Affiche (M : matrice ; n : entier)

1) pour i de 1 à n faire

Pour j de 1 à i faire

Ecrire (M [i,j])

Fin pour

Fin pour

2) fin Affiche

Page 6: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 6

V. Suite de Fibonnaci ACTIVITE4 : écrire un programme modulaire en Pascal qui permet de calculer et d’afficher le Nième terme

de la suite de Fibonnaci définie par :

U1 = 1

U2=1

Un= Un-1+ Un-2

a) Analyse du programme principal

2) Résultat = Ecrire ("FIB (", N, ")=", FIB(N))

1) N= Proc saisir (N)

Algorithme du programme principal

0) Début SUITE_FIB

1) Proc saisir (N)

2) Ecrire ("FIB (", N, ")=", FIB(N))

3) Fin SUITE_FIB

TDOG

objet Type/Nature Rôle

N Entier Compteur

FIB Fonction Calculer la suite

saisir procédure Nième Terme

Page 7: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 7

b) Analyse de la procédure saisir

DEF PROC SAISIR (var N : entier)

Résultat= N

1) N= [ ] répéter

N= Donnée ("N=")

Jusqu’à (N dans [1..100])

c) Analyse de la fonction FIB1 (itérative)

DEF FN FIB1 (N : entier) : entier

2) Résultat = FIB1 F

1) F= [U11, U21] Si N≤2 alors F 1

Sinon

Pour i de 3 à N faire

F U1 + U2

U2 U1

U1 F

Fin pour

Fin si

Algorithme de la procédure saisir

0) DEF PROC SAISIR (var N : entier)

1) répéter

Ecrire ("N="), lire (N)

Jusqu’à (N dans [1..100])

2) fin SAISIR

Algorithme de la fonction FIB1

0) DEF FN FIB1 (N : entier) : entier

1) U11

U21

Si n≤2 alors F 1

Sinon

Pour i de 3 à N faire

F U1 + U2

U2 U1

U1 F

Fin pour

Fin si

2) FIB1 F

3) Fin FIB1

TDOL

objet Type/Nature Rôle

U1 Entier Premier terme

U2 Entier Second terme

F Entier Valeur final de suite

i Entier compteur

Page 8: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 8

d) Analyse de la fonction FIB2 (itérative)

DEF FN FIB2 (N : entier) : entier

2) Résultat= FIB2 U[n]

1) U[n]= [U [1]1

U [2] 1] pour i de 3 à n faire

U[i] U [i-1] + U [i-2]

Fin pour

e) Analyse de la fonction FIB3 (récursive)

DEF FN FIB2 (N : entier) : entier

Résultat= FIB3

1) FIB3= [ ] si N≤2 alors FIB3 1

Sinon FIB3 FIB3 (n-1) + FIB3 (n-2)

Fin si

Algorithme de la fonction FIB2

0) DEF FN FIB2 (N : entier) : entier

1) U [1]1

U [2] 1

Pour i de 3 à n faire

U[i] U [i-1] + U [i-2]

Fin pour

1) FIB2 U[n]

2) Fin FIB2

TDNT

TYPE

TAB= tableau [1..100] d’entiers

TDOL

objet Type/Nature Rôle i entier Compteur

U TAB Tableau contenant les termes

Algorithme de la fonction FIB3

0) DEF FN FIB2 (N : entier) : entier

1) si N≤2 alors FIB3 1

Sinon FIB3 FIB3 (n-1) +

FIB3 (n-2)

Fin si

2) fin FIB3

Page 9: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 9

VI. Nombre d’or VI.1 Définition

Le nombre d’or est la solution positive de l’équation x2 – x – 1 = 0. C’est le nombre √

VI.2 Activité1 : compléter le tableau du livre page 139.

La suite Vn définie sur N*par

semble convergente vers

VI.3 Activité2 :

Soient deux suites U et V définies par :

U1=1

U2=2

Un = Un-1 + Un-2 pour n≥3 Vn=

pour n≥2

On suppose que la suite Vn tend vers nue valeur limite appelé nombre d’or. On suppose que le nième

terme de la suite V soit V, donc une valeur approchée du nombre d’or avec une précision e dés que

|Vn – Vn-1|<e.

Ecrire un programme modulaire en Pascal qui cherche Vn à 10-4 prés et son rang.

a) Analyse du programme principal

2) Résultat= proc Affiche (v,n)

1) (V,n,u) = proc remplir (u, v, n)

b) Analyse de la procédure REMPLIR

DEF PROC REMPLIR (var u : tab2 ; var v : tab1 ; var n : entier)

Résultat= u, v, n

1) (u, v, n)= [U [1]1

U [2] 2] répéter

N n+1

U[n] u [n-1] + u [n-2]

V[n] u[n]/u [n-1]

Jusqu’à (abs (v[n]-v [n-1] <0.0001)

Algorithme du programme principal

0) Début Calcul

1) proc remplir (u, v, n)

2) proc Affiche (v,n)

3) fin

TDNT

TYPE

TAB1= tableau [1..100] de réel TAB2= tableau [1..100] d’entier

TDOL

objet Type/Nature Rôle n entier Taille maximale des vecteurs

U TAB2 Tableau contenant les termes

V TAB1 Tableau contenant les termes

affiche procédure affichage

remplir procédure Remplit V et U

Algorithme de la procédure REMPLIR

0) DEF PROC REMPLIR (var u : tab2 ; var v : tab1 ; var n : entier)

1) U [1]1

U [2] 2

Répéter

n n+1

U[n] u [n-1] + u [n-2]

V[n] u[n]/u [n-1]

Jusqu’à (abs (v[n]-v [n-1] <0.0001)

2) Fin REMPLIR

Page 10: Les algorithmes recurrents

Enseignant : Mohamed SAYARI 4 SI Algorithmique & Programmation

LES ALGORITHMES RECURRENTS 10

c) Analyse de la fonction Affiche

DEF PROC AFFICHE (v : tab1 ; n : entier)

0) Résultat= Ecrire ("le nombre d'or= ", v[n], " obtenu après ", n, " itérations")

VII. Applications (livre 144-147)

Algorithme de la procédure Affiche

0) DEF PROC AFFICHE (v : tab1 ; n : entier)

1) Ecrire ("le nombre d'or= ", v[n], " obtenu après ", n, " itérations")

2) Fin AFFICHE