0% ont trouvé ce document utile (0 vote)
20 vues6 pages

Programmation de suites récursives en Pascal

Le document présente des exercices de programmation en Turbo-Pascal, axés sur la récursivité pour le calcul de suites de Fibonacci et du triangle de Pascal. Il propose deux méthodes pour calculer les termes d'une suite de Fibonacci : une approche ascendante utilisant une boucle et une approche descendante avec une fonction récursive. De plus, il décrit la construction d'une fonction pour calculer les coefficients binomiaux et un programme pour afficher le triangle de Pascal.

Transféré par

junsts719
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd
0% ont trouvé ce document utile (0 vote)
20 vues6 pages

Programmation de suites récursives en Pascal

Le document présente des exercices de programmation en Turbo-Pascal, axés sur la récursivité pour le calcul de suites de Fibonacci et du triangle de Pascal. Il propose deux méthodes pour calculer les termes d'une suite de Fibonacci : une approche ascendante utilisant une boucle et une approche descendante avec une fonction récursive. De plus, il décrit la construction d'une fonction pour calculer les coefficients binomiaux et un programme pour afficher le triangle de Pascal.

Transféré par

junsts719
Copyright
© © All Rights Reserved
Nous prenons très au sérieux les droits relatifs au contenu. Si vous pensez qu’il s’agit de votre contenu, signalez une atteinte au droit d’auteur ici.
Formats disponibles
Téléchargez aux formats PDF, TXT ou lisez en ligne sur Scribd

Cours et exercices de mathématiques M. CUAZ, [Link]

fr

TURBO PASCAL
RECURSIVITE
1) Un premier exemple

Le but est d'écrire un programme en langage Turbo-Pascal permettant de calculer les termes d'une suite de
Fibonacci quelconque, c'est à dire de la forme :
un + 2 = au n +1 + bu n

a, b, u 0 et u1 quelconques

1-1) Une première solution

Une première solution peut consister à écrire un programme qui, une fois les quatre éléments "de base"
a, b, u 0 , u1 donnés, va calculer les termes de la suite (u n )n∈IN de manière "ascendante", c'est à dire
u 0 , u1 , u 2 , etc... jusqu'à un arrêt provoqué par un test sur l'indice ou par l'utilisateur, à qui on aurait demandé au
préalable l'indice qu'il souhaitait obtenir.

Exercice :
Ecrire un programme dont un algorithme serait :

- Entrée par l'utilisateur des valeurs a, b, u 0 , u1


- Entrée par l'utilisateur de l'indice N correspondant au terme u N souhaité
- Série de calcul des u i (pour i variant de 2 à N) et affichage du terme u N lorsque celui-ci est calculé

Page 1/6
Cours et exercices de mathématiques M. CUAZ, [Link]

Proposition de Programme Commentaires


Program FiboGen1; Rappel : les accolades {} peuvent servir à commenter votre programme et ne
{programmation de U0,U1,a,b,n avec nuisent pas à son exécution. Ne pas hésiter à en employer donc.
Un+2=a*Un+1+b*Un }

var a,b,x,y,z:real; i,n:integer;

begin
write(‘entrez a,b,u0,u1,n’) ;
readln(a,b,x,y,n) ;

for i:=2 to n do begin Les jeux d'affectation entre les trois variables x,y, et z (respectivement
z:=a*x+b*y u n , u n +1 et u n + 2 ) sont les suivants :
x:=y
y:=z Au niveau n, x = u n , y = u n +1 , donc :
end;
u n + 2 = au n + bu n +1 ⇔ z = ax + by
writeln('U',n,'=',z); Au niveau n+1, l'égalité u n + 3 = au n +1 + bu n + 2 nécessite de transférer
END.
u n + 2 à la place de u n +1 , c'est à dire z à la place de y, et u n +1 à la place de
u n , c'est à dire y à la place de x.

Syntaxe : La fin du programme est symbolisée par le point après le mot END

Variantes pour la boucle :


for i:=2 to n do begin
z:=a*x+b*y
x:=y
y:=z
end;

On peut aussi saisir :

i:=1
While i<n do begin
z:=a*x+b*y
x:=y
y:=z
i:=i+1
end;

ou encore

i:=1
Repeat
z:=a*x+b*y
x:=y
y:=z
i:=i+1
until i=n

Page 2/6
Cours et exercices de mathématiques M. CUAZ, [Link]

1-2) Une deuxième solution

Une deuxième solution peut consister à écrire un programme qui, une fois les quatre éléments "de base"
a, b, u 0 , u1 donnés, ainsi que l'indice N correspondant au terme u N souhaité par l'utilisateur, va calculer les
termes de la suite (u n )n∈IN de manière "descendante",
c'est à dire va commencer à vouloir calculer u N ,
dont le calcul nécessite celui de u N −1
dont le calcul nécessite celui de u N − 2
etc…
dont le calcul nécessite celui de u 2
dont le calcul nécessite celui de u1 et de u 0 , mais ces deux dernières valeurs sont acquises.
Nous allons donc construire une fonction chargée de calculer un terme u n ( n ≥ 2 ), grâce à la formule
u n = au n −1 + bu n − 2 ( n ≥ 2 ), laquelle fonction s'auto-appellera , jusqu'à ce que les rangs 1 et 0 soient atteints,
auxquels cas les résultats de la fonction devront être les valeurs u 0 ,u1 données au début, afin que la série
d'appels mutuels puisse prendre fin

Exercice :
Ecrire un programme dont un algorithme serait :
- Procédure demandant à l'utilisateur de saisir les valeurs a, b, u 0 , u1 et celle de l'indice N correspondant au
terme u N souhaité (cette procédure n'est utilisée qu'une fois en début de programme)
- Ecriture d'une fonction, de paramètre a, b, u 0 , u1 et n, chargée du calcul de u n telle que :
- Si n=0 ou n=1, la fonction retourne u 0 ou u1
- Sinon la fonction s'auto-appelle deux fois (puisque le calcul de u n nécessite celui de u n −1 et de u n − 2 )
- Initialisation de cette fonction avec comme paramètres a, b, u 0 , u1 et N.

Page 3/6
Cours et exercices de mathématiques M. CUAZ, [Link]

Proposition de Programme Commentaires


Rappel : les accolades {} peuvent servir à
Program FiboGen2; commenter votre programme et ne nuisent pas à
{programmation de U0,U1,a,b,n avec son exécution. Ne pas hésiter à en employer donc.
Un+2=a*Un+1+b*Un }

var a,b,u0,u1:real; n:integer;


Ne pas oublier de mentionner le type du résultat du
function suite(n:integer):real; calcul de la fonction. Ici real
begin Dans le corps de description de la fonction, seul
if n=0 then suite:=u0 ; son nom est utilisé en cas d'affectation (symbole
if n=1 then suite:=u1 ; ":=")
C'est la ligne fondamentale d'auto-appel de la
if n>1 then suite:=a*suite(n-1)+b*suite(n-2); fonction
end;
Début du programme
BEGIN
write(‘entrez a,b,u0,u1,n’) ;
readln(a,b,x,y,n) ;

writeln('Un=',Suite(n):8:4) ; Initialisation de la fonction avec le paramètre n


Syntaxe : La fin du programme est symbolisée par
END. le point après le mot END

Page 4/6
Cours et exercices de mathématiques M. CUAZ, [Link]

2) Autre exemple : Le triangle de Pascal

Rappel :
Les coefficients binomiaux sont les C np , où p et n sont deux entiers, avec :
Si p>n , C np = 0 .
Si n=0 ou p=0 ou n=p alors C np =1.
n!
Dans tous les autres cas, C np =
(n − p )! p!
La formule de Pascal (permettant de dresser le triangle du même nom) est :
C np + C np +1 = C np−+11 ,
que l'on peut lire "à l'envers" sous la forme :
C np = C np−−11 + C np−1
(toujours avec les conventions habituelles sur les indices)

Exercice :
- Construire une fonction récursive C , de paramètres p et n entiers, retournant 1 dans les cas pathologiques du
calcul de C np (voir ci-dessus) et utilisant sinon la formule de récursivité C np = C np−−11 + C np−1 .
- Construire un programme permettant de dresser le triangle de Pascal à l'aide de deux boucles emboîtées l'une
dans l'autre (respectivement n et p), pour n entier tel que 0 ≤ n ≤ 6 .

Page 5/6
Cours et exercices de mathématiques M. CUAZ

Proposition de Programme Commentaires


Rappel : les accolades {} peuvent servir à commenter votre programme et
Program TrPascal; ne nuisent pas à son exécution. Ne pas hésiter à en employer donc.
Var n,p:integer;

{Fonction récursive permettant de


tracer le triangle de Pascal }
Function C(n,p: integer):integer; Cas pathologiques
Begin
if (n=0) or (p=0) or (n=p) then C:=1
else C:=C(n-1,p-1)+C(n-1,p)
End; 2 boucles imbriquées l'une dans l'autre
Appel de la fonction
Begin
for n:=0 to 6 do begin Instruction pour retourner au début de la ligne suivante
for p:=0 to n do
write(C(n,p):5); Syntaxe : La fin du programme est symbolisée par le point après le mot
writeln; END.
end;

readln
end.

Page 6/6

Vous aimerez peut-être aussi