L'ordre est le nombre de traitements précédents dont dépend le résultat.

Documents pareils
Corrigé des TD 1 à 5

Examen Médian - 1 heure 30

Recherche dans un tableau

Cours d algorithmique pour la classe de 2nde

Cours Informatique Master STEP

INITIATION AU LANGAGE C SUR PIC DE MICROSHIP

Sub CalculAnnuite() Const TITRE As String = "Calcul d'annuité de remboursement d'un emprunt"

Feuille TD n 1 Exercices d algorithmique éléments de correction

EPREUVE OPTIONNELLE d INFORMATIQUE CORRIGE

Propagation sur réseau statique et dynamique

Architecture des Systèmes d Information Architecture des Systèmes d Information

LES TYPES DE DONNÉES DU LANGAGE PASCAL

L ALGORITHMIQUE. Algorithme

1. Structure d'un programme FORTRAN 95

ARDUINO DOSSIER RESSOURCE POUR LA CLASSE

TP n 2 Concepts de la programmation Objets Master 1 mention IL, semestre 2 Le type Abstrait Pile

Organigramme / Algorigramme Dossier élève 1 SI

Algorithmique et Programmation, IMA

Bases de programmation. Cours 5. Structurer les données

Enseignement secondaire technique

Programmation C++ (débutant)/instructions for, while et do...while

Application 1- VBA : Test de comportements d'investissements

1/24. I passer d un problème exprimé en français à la réalisation d un. I expressions arithmétiques. I structures de contrôle (tests, boucles)

TD3: tableaux avancées, première classe et chaînes

1. Structure d un programme C. 2. Commentaire: /*..texte */ On utilise aussi le commentaire du C++ qui est valable pour C: 3.

Algorithmes et programmation en Pascal. Cours

Programmation structurée et algorithmes de base en Pascal

Initiation à l algorithmique

Initiation à la programmation en Python

Algorithmique et programmation : les bases (VBA) Corrigé

Travaux pratiques. Compression en codage de Huffman Organisation d un projet de programmation

SNT4U16 - Initiation à la programmation TD - Dynamique de POP III - Fichiers sources

Utilitaires méconnus de StrataFrame

Rappel. Analyse de Données Structurées - Cours 12. Un langage avec des déclaration locales. Exemple d'un programme

1 Recherche en table par balayage

Rappels sur les suites - Algorithme

Java Licence Professionnelle CISII,

Définitions. Numéro à préciser. (Durée : )

Chapitre 10. Les interfaces Comparable et Comparator 1

Algorithmique & programmation

4. Les structures de données statiques

Algorithmique et structures de données I

0 si a=b. Si a^ et b^ sont deux éléments différents du même anneau, alors le résultat de

Les chaînes de caractères

TRIGONOMETRIE Algorithme : mesure principale

Solutions du chapitre 4

Centre CPGE TSI - Safi 2010/2011. Algorithmique et programmation :

INTRODUCTION AUX SYSTEMES D EXPLOITATION. TD2 Exclusion mutuelle / Sémaphores

Architecture des ordinateurs TD1 - Portes logiques et premiers circuits

MISE A NIVEAU INFORMATIQUE LANGAGE C - EXEMPLES DE PROGRAMMES. Université Paris Dauphine IUP Génie Mathématique et Informatique 2 ème année

Programmation Objet - Cours II

STAGE IREM 0- Premiers pas en Python


IN Cours 1. 1 Informatique, calculateurs. 2 Un premier programme en C

Les arbres binaires de recherche

Plan du cours Cours théoriques. 29 septembre 2014

Compléments de documentation Scilab : affichage de texte et formatage de nombres

Par combien de zéros se termine N!?

Info0101 Intro. à l'algorithmique et à la programmation. Cours 3. Le langage Java

1 de 46. Algorithmique. Trouver et Trier. Florent Hivert. Mél : Florent.Hivert@lri.fr Page personnelle : hivert

Cours d initiation à la programmation en C++ Johann Cuenin

Chap 4: Analyse syntaxique. Prof. M.D. RAHMANI Compilation SMI- S5 2013/14 1

Cours 1 : Introduction Ordinateurs - Langages de haut niveau - Application

Introduction à MATLAB R

Exercices de dénombrement

Probabilités. Rappel : trois exemples. Exemple 2 : On dispose d un dé truqué. On sait que : p(1) = p(2) =1/6 ; p(3) = 1/3 p(4) = p(5) =1/12

Programme Compte bancaire (code)

Algorithme. Table des matières


Raisonnement par récurrence Suites numériques

Licence Sciences et Technologies Examen janvier 2010

Programmation VBA/Excel. Programmation VBA. Pierre BONNET. Masters SMaRT & GSI - Supervision Industrielle P. Bonnet

Seance 2: En respectant la méthode de programmation par contrat, implémentez les autres fonctions de jeu.

I- Définitions des signaux.

Travaux Pratiques de Commande par ordinateur 1 TRAVAUX PRATIQUES

Cours d Informatique

Algorithmique avec Algobox

Algorithmes de recherche

AC AB. A B C x 1. x + 1. d où. Avec un calcul vu au lycée, on démontre que cette solution admet deux solutions dont une seule nous intéresse : x =

Probabilités Loi binomiale Exercices corrigés

Chp. 4. Minimisation d une fonction d une variable

Correction TD algorithmique

chapitre 4 Nombres de Catalan

I. Introduction aux fonctions : les fonctions standards

Langage Java. Classe de première SI

Dans l'article précédent, vous avez appris

Complexité. Licence Informatique - Semestre 2 - Algorithmique et Programmation

CORRECTION EXERCICES ALGORITHME 1

Le Langage C Version 1.2 c 2002 Florence HENRY Observatoire de Paris Université de Versailles florence.henry@obspm.fr

UEO11 COURS/TD 1. nombres entiers et réels codés en mémoire centrale. Caractères alphabétiques et caractères spéciaux.

3. SPÉCIFICATIONS DU LOGICIEL. de l'expression des besoins à la conception. Spécifications fonctionnelles Analyse fonctionnelle et méthodes

MINISTERE DE L ENSEIGNEMENT TECHNIQUE ET DE LA FORMATION PROFESSIONNELLE. (Pour l obtention du diplôme d analyste programmeur)

La classification automatique de données quantitatives

Exceptions. 1 Entrées/sorties. Objectif. Manipuler les exceptions ;

Représentation d un entier en base b

Chap III : Les tableaux

Les suites numériques

Sujet proposé par Yves M. LEROY. Cet examen se compose d un exercice et de deux problèmes. Ces trois parties sont indépendantes.

SHERLOCK 7. Version du 01/09/09 JAVASCRIPT 1.5

1.6- Génération de nombres aléatoires

Transcription:

CHAPITRE 4 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 dépend de 1 ou plusieurs résultats précédents, on parle alors d un algorithme ou d un traitement récurrent d ordre. L'ordre est le nombre de traitements précédents dont dépend le résultat. Un algorithme récurrent d ordre p est un algorithme donnant un résultat dépendant des p résultats précédents. p peut être 1,2,3, etc. II/ Exemples d'algorithmes récurrents II-1 Calcul de somme Activité 1/ Ecrire une analyse et un algorithme de la procédure Somme_Matrice, qui calcule la somme des éléments d une matrice carrée d entiers comportant n lignes et n colonnes (4 n 20). 2/ Ce traitement est-il récurent? Dans l affirmative donnez son ordre. * - * - * - * - * - * - * - * - * - * - * Réponse à la question 2 : 1- Pour calculer la somme des éléments d'une matrice, nous devons cumuler la totalité de ses éléments. Le cumul nécessite une initialisation à zéro de la variable de calcul, ici Somme. Un parcourt, de toute les lignes et les colonnes est donc nécessaire pour lire le contenu des cases et les ajouter chaque fois à la somme. Somme somme + M[ligne, colonne] Puisque ce traitement fait toujours référence à l élément précédent, donc c est un traitement récurent d ordre 1. Analyse de la fonction Somme_Matrice Résultat : SOMME_MAT Traitement : Pour calculer la somme des éléments de la matrice M de type MAT, nous devons cumuler tous les éléments quelle contient. Deux boucles complètes, une pour parcourir les lignes et l autre pour parcourir les colonnes de la matrice sont nécessaires. Une initialisation à zéro de la variable Somme est obligatoire (traitement récurent d'ordre 1). Pour ligne de 1 à N Faire Pour colonne de 1 à N Faire Somme Somme + M [ligne, colonne] 4INFINFRC0004 Page 1

Fin Pour Fin Pour Fin Analyse Algorithme de la fonction SOMME_MAT 0) Fonction Somme_Matrice (M : MAT ; N : Entier) : Entier 1) Somme 0 2) Pour ligne de 1 à N Faire Pour colonne de 1 à N Faire Somme S + M [ligne, colonne] Fin Pour Fin Pour 3) Somme_Matrice Somme 4) Fin Somme_Matrice Tableau de codification des objets locaux : Objets Type / Nature Rôle Somme Entier Variable de cumul ligne Entier Compteur des lignes de la matrice colonne Entier Compteur des colonnes de la matrice Traduction en Pascal FUNCTION Somme_Matrice (M : MAT; N : Integer) : Integer ; VAR Somme, ligne, colonne : Integer ; Somme := 0; For ligne := 1 To N Do For colonne := 1 To N Do Somme := Somme + M[ligne, colonne] ; End ; End ; Somme_Matrice := Somme ; End; III/ Algorithme récurrent sur les chaînes Activité Suite de Thue-Morse 4INFINFRC0004 Page 2

Si on considère sur l ensemble des chaînes constituées uniquement de "0" et de "1"(mots binaires), la transformation qui consiste à remplacer toute occurrence du caractère "0" par la chaîne "01" et toute occurrence du caractère "1" par la chaîne "10", on définit la suite de Thue-Morse en partant de la chaîne "0" : U0 "0" U1 "01" U2 "0110" U3 "01101001" U4 "0110100110010110" U5 "0110 1001100101100110100110010110" 1/ Cette suite est-elle récurrente? Dans l affirmative donnez son ordre. * - * - * - * - * - * - * - * - * - * - * 2/ Ecrire un programme nommé Suite_Thue_Morse permettant de calculer et d'afficher les N premiers termes de la suite de Thue-Morse à partir d un caractère A ("0" ou "1") donnée. Réponse à la question 1 : - * - * - * - * - * - * - * - * - * - * - * - * - Le premier résultat dépend de la première valeur du caractère ("0" ou "1"), un deuxième résultat est obtenu à partir du premier trouvé, et ainsi de suite. On conclu que c'est une suite récurrente d ordre 1. 2- Analyse Analyse du programme principal Résultat : Ecrire ("La suite de Thue-morse à partir de ", A, " Est ", Fn Thue_Morse (N, A) ) Traitement : Thue_Morse est une fonction appelée au niveau du programme principal dans un contexte d'affichage. Cette fonction génère la suite Thue_Morse à partir d'un caractère A de départ qui est soit "0" sit "1". Fin Saisie Algorithme du programme principal 0) Début Suite_Thue_Morse 1) Saisie (N, A) 2) Ecrire ("La suite de Thue-morse à partir de ", A, " Est ", Fn Thue_Morse (N, A) ) 3) Fin Suite_Thue_Morse Tableau de codification des objets globaux : Objets Type / Nature Rôle 4INFINFRC0004 Page 3

N Entier Nombre d'éléments de la suite A Caractère Caractère "0" ou "1" Thue_Morse Fonction Fonction qui génère la suite Thue_Morse Analyse de la fonction Thue_Morse Résultat = Thue_Morse Traitement : - On initialise la chaîne de caractères Ch à la valeur de A - On initialise un compteur j à la valeur 1. Ce compteur avance d'un pas de 2 car à chaque fois on ajoute deux caractères "01 ou "10" à la chaîne Ch. - On vérifie la valeur de CH[j], si elle vaut "0" alors on insère le caractère "1" dans la chaîne Ch à la position J+1, sinon on insère le caractère "0" puis on incrémente de 2 le compteur j. - On répète ce traitement N fois. Fin Analyse Algorithme de la fonction Thue_Morse 0) Fonction Thue_Morse (N : Entier ; A: Caractère) : Chaîne 1) CH A 2) Pour i de 1 à N Faire j 1 Répéter Si CH[j] = "0" Alors insère ("1", CH, j +1) Sinon insère ("0", CH, j +1) Fin Si L Long (Ch) j j + 2 Jusqu'à (j > L) Fin Pour 3) Thue_Morse Ch 4) Fin Thue_Morse Tableau de codification des objets locaux : Objets Type / Nature Rôle i Entier Compteur j Entier Compteur L Entier Longueur de la chaîne Ch Chaîne Chaîne représentant la suite Thue_morse Traduction en Pascal PROGRAM Suite_Thue_Morse ; USES Crt ; VAR N : Integer ; A : Char ; 4INFINFRC0004 Page 4

{------------------------------------------------------------------------------------} PROCEDURE Saisie (VAR N : Integer ; VAR A: Char ); Repeat Write('Donner le nombre d''éléments de la suite : '); readln (N); Until N In [2.. 100] ; End; Repeat Write('Donner un caractère 0 ou 1 : '); readln (A); Until A In ['0', '1'] ; {------------------------------------------------------------------------------------} FUNCTION Thue_Morse (N: Integer; A : Char ) : String ; VAR Ch : String ; i, j, L : Integer ; Ch := A ; For i := 1 To N Do j := 1 ; Repeat If Ch [j] = '0' Then Insert ('1', Ch, j+1) Else Insert ('0', Ch, j+1); L := Length (Ch) ; j := j+ 2; Until j > l ; End; Thue_Morse := Ch ; End ; {========== Programme principal ===================} Saisie (N, A) ; WriteLn('La suite de Thue-morse à partir de ', A, ' Est ', Thue_Morse (N, A) ) ; END. IV/ Triangle de Pascal Le triangle de Pascal est le tableau des coefficients qui sont utilisés pour le développement de certaines expressions comme (a+b)² ou (a+b) n. Cela s'appelle la "formule du binôme de Newton". Les coefficients s'appellent les "coefficients binomiaux" ou "coefficients du binôme". Ce triangle est le suivant : 4INFINFRC0004 Page 5

0 : 1 (a+b) 0 = 1 1 : 1 1 (a+b) 1 = 1*a + 1*b 2 : 1 2 1 (a+b) 2 = 1*a 2 + 2*a*b + 1*b 2 3 : 1 3 3 1 (a+b) 3 = 1*a 3 + 3*a 2 *b + 3*a*b 2 + 1*b 3 4 : 1 4 6 4 1 (a+b) 4 = 1*a 4 + 4*a 3 *b + 6*a 2 *b 2 + 4*a*b 3 + 1*b 4 On obtient chaque coefficient en additionnant le nombre qui lui est situé au-dessus ainsi que celui qui lui est situé au-dessus à gauche. Pour n = 3, le Triangle de Pascal affiché est le suivant : Ligne 1 1 Ligne 2 1 1 Ligne 3 1 2 1 Colonnes 1 2 3 MAT[3,2] = MAT[2,2] + MAT[2,1] Pour n = 5, le Triangle de Pascal affiché est le suivant : Ligne 1 1 Ligne 2 1 1 Ligne 3 1 2 1 Ligne 4 1 3 3 1 Ligne 5 1 4 6 4 1 Colonnes 1 2 3 4 5 MAT[5,4] = MAT[4,4] + MAT[4,3] On constate que le calcul du contenu de la case (3,2) fait référence au contenu de deux cases précédentes. C'est un traitement récurrent d'ordre 2. Lecture : La tradition attribue le nom de triangle de Pascal au triangle décrit plus haut. Cependant, ce triangle était déjà connu en Orient et moyen Orient plusieurs siècles avant la publication de Blaise Pascal. Il était ainsi connu des mathématiciens persans, par exemple al-karaji (953-1029) ou Omar Khayam au XI e siècle qui l'utilisent pour développer (a + b) n Activité 4INFINFRC0004 Page 6

On se propose d afficher les N premières lignes du Triangle de Pascal avec (3 N 100). On rappelle que le principe de remplissage des n premières lignes de la matrice MAT représentant le Triangle de Pascal est le suivant : Pour une ligne donnée : Le premier élément et le dernier élément sont égaux à 1, Les autres éléments sont déterminés en appliquant la formule suivante : MAT [ligne, colonne] = MAT [ligne-1, colonne] + MAT [ligne-1, colonne-1] Questions 1/ Est-ce que ce traitement est récurrent? Dans l affirmative donnez son rang. 2- Ecrire un programme nommé Triangle_de_Pascal, Qui affiche pour un nombre de lignes compris entre 1 et 20 (3 N 20), deux fois le triangle. Le premier triangle est obtenu par traitement itératif et le second par un traitement récursif. * - * - * - * - * - * - * - * - * - * - * 1/ L'exemple ci-dessous montre que le calcul du contenu de la case (3, 2) fait référence au contenu de deux cases précédentes. C'est un traitement récurrent d'ordre 2. 2/ Analyse du problème Analyse du programme principal Résultat : Deux affichages d une matrice contenant les différentes valeurs du Triangle de Pascal, réalisé chaque fois par l'appel la procédure Afficher_Triangle Traitement : - Le premier affichage est celui de la matrice obtenue par le traitement itératif (Proc Triangle_itératif). - Le deuxième affichage est celui de la matrice obtenue par le traitement récursif (Proc Triangle_récursif). - L'entier N qui représente le nombre de lignes du Triangle, est lu par la procédure Saisie. Fin analyse Algorithme du programme principal 0) Début Triangle_Pascal 1) Proc Saisie (N) 2) Proc Triangle_itératif (N, MAT) 3) Proc Afficher_Triangle (N, MAT) 4) Proc Triangle_récursif (N, MAT) 5) Proc Afficher_Triangle (N, MAT) 6) Fin Triangle_Pascal 4INFINFRC0004 Page 7

Tableau de codification des objets globaux : Objets Type / Nature Rôle N Entier Nombre de lignes du triangle de Pascal MAT Matrice Représentant le Triangle de Pascal Saisir Procédure Permet de saisir N le nombre de lignes du Triangle Triangle_itératif Procédure Permet de remplir la matrice représentant le Triangle de Pascal par un procédé itératif Triangle_récursif Procédure Permet de remplir la matrice représentant le Triangle de Pascal par un procédé récursif Affiche_Triangle Procédure Permet d afficher le Triangle de Pascal Max_N Constante = 20 Nombre de lignes max du triangle Tableau de codification des nouveaux types : Type Matrice = Tableau de 20 lignes et N colonnes d entiers Analyse de la procédure Triangle_iteratif Résultat = Remplir la matrice MAT Traitement : On constate que : Ligne 1 MAT [1,1] contient la valeur 1 Ligne 2 MAT [2,1] et MAT [2,2] contiennent la valeur1 Ligne x On utilise deux boucles : une pour les lignes et une autre pour les colonnes. Pour ligne de 3 à N Faire MAT [ligne, 1] 1 (première case de la ligne reçoit 1) MAT [Ligne, Ligne] 1 (dernière case de la ligne reçoit 1) Pour colonne de 2 à ligne -1 Faire MAT [ligne, colonne] MAT [ligne - 1, colonne] + MAT [ligne -1, colonne - 1] Fin Pour Fin Pour Algorithme 0) Procédure Triangle_itératif (N: Entier; VAR MAT : Matrice); 1) MAT [1,1] 1 2) MAT [2,1] 1 3) MAT [2,2] 1 4) Pour ligne de 3 à N Faire MAT [ligne, 1] 1 MAT [Ligne, Ligne] 1 Pour colonne de 2 à ligne -1 Faire MAT [ligne, colonne] MAT [ligne - 1, colonne] + MAT [ligne -1, colonne - 1] Fin Pour Fin Pour 5) Fin Triangle_itératif 4INFINFRC0004 Page 8

Tableau de codification des objets locaux : Objets Type / Nature Rôle ligne Compteur Compteur des lignes de la matrice colonne Compteur Compteur des colonnes de la matrice Analyse de la procédure Triangle_récursif Résultat : matrice remplie représentant le Triangle de Pascal Traitement : Pour chacune des n lignes de la matrice, un parcourt des colonnes (de la première à celle qui porte le numéro de la ligne), est nécessaire pour déterminer leurs valeurs en faisant appel à la fonction récursive Val_Triangle. Algorithme 0) Procédure Triangle_récursif (N : Entier ; VAR MAT : matrice) 1) Pour ligne de 1 à n Faire Pour colonne de 1 à ligne Faire Mat [ligne, colonne] Fn Val_Triangle (colonne, ligne) FinPour FinPour 2) Fin Triangle_récursif Analyse de la fonction Val_Triangle Résultat : Val_Triangle Traitement : (déterminer une valeur du Triangle selon la ligne (x) et la colonne (y) données comme paramètres). Pour la première ligne, la valeur est égale à 1, Si le numéro de ligne est égal au numéro de colonne, la valeur est aussi égale à 1, sinon la valeur trouvée à l intersection de la ligne x et de la colonne y est égale à (la valeur trouvée à l intersection de la ligne x et de la colonne y-1) + (la valeur trouvée à l intersection de la ligne x-1 et de la colonne y-1) Fin Analyse Algorithme 0) Fonction Val_Triangle (x, y : Entier) : Entier 1) Si (x = 1) OU (y = x) Alors Val_Triangle 1 Sinon Val_Triangle Fn Val_Triangle (x, y - 1) + Fn Val_Triangle (x - 1, y - 1) Finsi 2) Fin Val_Triangle Analyse de la procédure Afficher_Triangle Résultat = Afficher la matrice MAT 4INFINFRC0004 Page 9

Traitement : On utilise deux boucles : une pour les lignes et une autre pour les colonnes afin d'afficher le contenu de la matrice. Fin Analyse Algorithme de la procédure Afficher_Triangle 0) Procédure Afficher_Triangle (N : Entier ; MAT : Matrice) 1) Pour ligne de 1 à N Faire Pour colonne de 1 à ligne Faire Ecrire (Mat [ligne, colonne]," ") {Sans retour à la ligne} FinPour Ecrire ( ) {avec retour à la ligne} FinPour 2) Fin Afficher_Triangle Traduction en Pascal PROGRAM Triangle_de_Pascal ; USES Crt ; CONST max = 20; TYPE Matrice = ARRAY[1.. 20, 1.. 20] Of Integer ; VAR N : Integer ; MAT : Matrice ; {------------------------------------------------------------------------------------} PROCEDURE Saisie (VAR N : Integer ); Repeat Write ('Nombre de lignes du triangle : '); ReadLn (N) ; Until N IN [3.. max] ; END ; {------------------------------------------------------------------------------------} PROCEDURE Triangle_iteratif (N: Integer; VAR MAT : Matrice); VAR ligne, colonne : Integer ; MAT [1,1] := 1 ; MAT [2,1] := 1 ; 4INFINFRC0004 Page 10

MAT [2,2] := 1 ; For ligne := 3 To N Do MAT [ligne, 1] := 1; MAT [Ligne, Ligne] := 1; For colonne := 2 To ligne -1 Do MAT [ligne, colonne] := MAT [ligne - 1, colonne] + MAT [ligne -1, colonne - 1]; End ; End ; END ; {------------------------------------------------------------------------------------} FUNCTION Val_Triangle (x, y : Integer) : Integer ; If (x = 1) OR (y = x) Then Val_Triangle := 1 Else Val_Triangle := Val_Triangle (x, y - 1) + Val_Triangle (x - 1, y - 1) ; END ; {------------------------------------------------------------------------------------} PROCEDURE Afficher_Triangle (n : Integer; MAT : matrice); VAR ligne, colonne : Integer ; For ligne := 1 To N Do For colonne := 1 To ligne Do Write(Mat [ligne, colonne]:2,' ') ; End; WriteLn ; End; END ; {------------------------------------------------------------------------------------} PROCEDURE Triangle_recursif (N : Integer; VAR MAT : Matrice) ; VAR ligne, colonne : Integer ; For ligne := 1 To N Do For colonne := 1 To ligne Do Mat [ligne, colonne] := Val_Triangle (colonne, ligne) ; END; {=============== Programme principal ============== } 4INFINFRC0004 Page 11

Saisie (N) ; WriteLn ('Triangle de Pascal - Traitement itératif '); Triangle_iteratif (N, MAT) ; Afficher_Triangle (N, MAT) ; WriteLn; WriteLn('Triangle de Pascal - Traitement récursif '); Triangle_recursif (N, MAT); Afficher_Triangle (N, MAT) ; END. V/ La suite de Fibonacci Léonard de Pise, plus connu sous le nom de Fibonacci, étudia du point de vue numérique la reproduction des lapins. L'unité de base est un couple de lapins, il considère qu'un couple de jeunes lapins met une saison pour devenir adulte, attend une deuxième saison de gestation, puis met au monde un couple de jeunes lapins à chaque saison suivante. En supposant que les lapins ne meurent jamais, et lorsque l'on met côte à côte le nombre de couples de lapins à chaque saison, cela donne... la suite de Fibonacci : 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144, 233, 377, 610... Le nombre de couples de lapins U n à la saison n est égal au nombre de couples de lapins adultes, c'est-à-dire le nombre total de lapins qu'il y avait à la saison précédente n-1, auquel on ajoute le nombre de couples de jeunes lapins, qui est égal au nombre de couples de lapins adultes à la saison précédente, donc au nombre total de couples à la saison n-2. C'est pourquoi on a: U n = U n-1 + U n-2 Tout ceci est plus clair avec un tableau: saison n nombre de couples de lapins adultes ( = u n-1 ) nombre de couples de jeunes lapins (= u n-2 ) nombre total de couples de lapins u n (Fibo) 1 0 1 1 2 1 0 1 3 1 1 2 4 2 1 3 5 3 2 5 6 5 3 8 7 8 5 13 8 13 8 21 9 21 13 34 La suite de Fibonacci est une suite récurrente dont chaque élément obéit à la relation de récurrence : U n = U n-1 + U n-2 4INFINFRC0004 Page 12

Avec U 1 = 1 et U 2 = 1 Donc c'est une suite récurrente d'ordre 2. Activité 1 Ecrire un programme qui, pour un entier N donné, calcule le N ième terme de la suite de Fibonnaci. U n = U n-1 + U n-2 Avec U 1 = 1 et U 2 = 1 Donner une solution itérative, sans avoir recourt à un tableau, utilisant une fonction nommée Fibo_Itérative. N étant un entier compris entre 1 et 50. * - * - * - * - * - * - * - * - * - * - * Analyse du programme principal Suite_itérative_Fibonacci Résultat : Ecrire ("Fibo de ", N, " = ", Valeur_Fibo) Traitement : - Une fonction itérative Fibo_Itérative retourne la valeur du N ième terme de la suite. - Une procédure Saisie, assure la lecture et le test de l'entier N. Fin Suite_itérative_Fibonacci Algorithme 0) Début Suite_itérative_Fibonacci 1) Proc Saisie (N) 2) Valeur_suite Fn Fibo_Itérative (N) 3) Ecrire ("Fibo de ", N, " = ",Valeur_Fibo) 4) Fin Suite_itérative_Fibonacci Tableau de codification des objets globaux : Objets Type / Nature Rôle N Entier Nombre de terme de la suite Valeur_Fibo Entier Long Valeur de la suite Analyse et algorithme de la procédure Saisie - Voir les exemples précédents, car cette procédure à fait l'objet de plusieurs études. Il est à noter qu'elle figure au niveau de la traduction en Pascal. Analyse de la fonction Fibo_Itérative Résultat = Fibo_Itérative Traitement : 4INFINFRC0004 Page 13

- Cette suite est récurrente d'ordre 2. On doit initialiser ses deux premiers termes. U1 = 1 U2 = 1 - Donc on constate que si N 2, le dernier terme de la suite est égal à 1 Si N 2 Alors Fibo 1 - Sinon on calcule cette suite par une itération de 3 à N Fibo u1 + u2 u1 u2 u2 Fibo - Le résultat final est la dernière valeur obtenue Fibo_Itérative Fibo Fin Fibo_Itérative Algorithme 0) Fonction Fibo_Itérative (N : Entier) : Entier Long 1) U1 1 2) U2 1 3) Si N 2 Alors Fibo 1 Sinon Pour i de 3 à N Faire Fibo U1 + U2 U1 U2 U2 Fibo Fin Pour Fin Si 5) Fibo_Itérative Fibo 6) Fin Fibo_Itérative Tableau de codification des objets locaux : Objets Type / Nature Rôle U1, U2 Entier Eléments de la suite Fibo Entier Long Calcul de la suite i Entier Compteur Traduction en Pascal PROGRAM Suite_iterative_Fibonacci ; USES Crt ; CONST Nmax = 50 ; VAR Valeur_Fibo : LongInt ; N : Integer ; 4INFINFRC0004 Page 14

{-----------------------------------------------------------------------------} PROCEDURE Saisie (VAR N : Integer); Repeat Write ('N = '); ReadLn (N); Until N IN [1.. Nmax] ; END ; {-----------------------------------------------------------------------------} FUNCTION Fibo_Iterative (N : Integer ) : LongInt ; VAR U1, U2, i : Integer ; Fibo : LongInt ; U1 := 1 ; U2 := 1 ; If N <= 2 Then Fibo := 1 Else For i := 3 To N Do Fibo := U1 + U2 ; U1 := U2 ; U2 := Fibo ; End ; Fibo_Iterative := Fibo ; END ; {============ P P ===================} ClrScr ; Saisie (N) ; Valeur_Fibo := Fibo_Iterative (N); WriteLn ('Fibo de ', N, ' = ',Valeur_Fibo) ; END. Activité 2 Remplacer dans le programme précédent la fonction Fibo_Itérative par une autre fonction réalisant le même traitement itératif mais en utilisant pour le calcul, un tableau d'entiers long. Cette fonction sera nommée Fibo_Tab. * - * - * - * - * - * - * - * - * - * - * 4INFINFRC0004 Page 15

Analyse de la fonction Fibo_Tab Résultat = Fibo_Tab Traitement : - On initialise les deux premières case du tableau T à 1. T[1] 1 T(2] 1 - Donc on constate que si N 2, le dernier terme de la suite est égal à 1 Si N 2 Alors Fibo 1 - Sinon on calcule cette suite par une itération de 3 à N Pour i de 3 à N Faire T[i] T[i - 1] + T[i - 2] - Le résultat final est la dernière valeur obtenue Fibo_Itérative T[N] Fin Fibo_Tab Algorithme 0) Fonction Fibo_Tab (N : Entier ; T : Tab) : Entier Long 1) T[1] 1 2) T[2] 1 3) Si N 2 Alors Fibo 1 Sinon Pour i de 3 à N Faire T[i] T[i-1] + T[i-2] Fin Pour Fibo T[n] Fin Si 4) Fibo_Tab Fibo 5) Fin Fibo_Tab Modification du tableau de codification des objets globaux : Objets Type / Nature Rôle N Entier Nombre de terme de la suite Valeur_Fibo Entier Long Valeur de la suite T Tab Tableau des termes de la suite Nmax Constante = 50 Valeur maximal de N Tableau de codification des nouveaux types Types Tab = Tableau de Nmax Entier Long Tableau de codification des objets locaux : Objets Type / Nature Rôle Fibo Entier Long Calcul de la suite i Entier Compteur 4INFINFRC0004 Page 16

Traduction en Pascal de la fonction Fibo_Tab FUNCTION Fibo_Tab (N : Integer ; T : Tab) : LongInt ; VAR i : Integer ; Fibo : LongInt ; T[1] := 1 ; T[2] := 1 ; If (N < = 2) Then Fibo := 1 Else For i := 3 To N Do T[i] := T[i-1] + T[i-2] ; End ; Fibo := T[n] ; Fibo_Tab := Fibo ; END ; Activité 3 Remplacer dans le programme précédent la fonction Fibo_Tab par une autre fonction réalisant le même traitement mais cette fois avec un procédé récursif. Cette fonction sera nommée Fibo_Récursive. * - * - * - * - * - * - * - * - * - * - * Analyse de la fonction Fibo_Récursive Résultat = Fibo_Récursive Traitement : Le calcul de la fonction de Fibonacci fait référence aux deux éléments précédents. U n = U n-1 + U n-2 Avec U 1 = 1 et U 2 = 1 PuisqueU3 fait référence à ces deux éléments précédents U1 et U2 qui sont connus, on peut dire que U3 est aussi connu. Pour un l'élément N on peut écrire : Fibo_Récursive Fn Fibo_Récursive (N-1) + Fn Fibo_Récusive (N-2) C'est un traitement récursif Fin Analyse 3/ Solutions récursive : 4INFINFRC0004 Page 17

Algorithme 0) Fonction Fibo_Récursive (N : Entier ) : Entier Long 1) Si N 2 Alors Fibo_Récursif 1 Sinon Fibo_Récursif Fn Fibo_Récursif (N-1) + Fn Fibo_Récursif (N-2) Fin Si 2) Fin Fibo_Récursif Traduction en Pascal de la fonction Fibo_Récursif FUNCTION Fibo_Recursif (N : Integer ) : LongInt ; If (N < = 2) Then Fibo_Recursif := 1 Else Fibo_Recursif := Fibo_Recursif (N-1) + Fibo_Recursif (N-2) ; END ; VI/ Le nombre d'or Définition et valeur du nombre d'or Le nombre d'or est la solution positive de l'équation : x 2 -x -1 = 0 C'est-à dire le nombre (1 + 5 ) / 2 La suite (Vn) définie sur N* par Vn = ϕ = 1+ 5 2 Exemples pour n de 1 à 7: Fib (n + 1) Fib (n) dont une valeur approchée est 1,618. semble converger vers le nombre d'or n Fib (n) Valeur exacte de Valeur approchée de Fib (n+1) / Fib (n) Fib (n+1) / Fib (n) 1 1 1 1 2 1 2 2 3 2 3/2 1,5 4 3 5/3 1,666 5 5 8/5 1,6 6 8 13/8 1,625 7 13 21/13 1,615 4INFINFRC0004 Page 18

Les 100 premières décimales du nombre d'or sont : 1,618 033 988 749 894 848 204 586 834 365 638 117 720 309 179 805 762 862 135 448 622 705 260 462 189 024 497 072 072 041 On a vu précédemment que : La suite de Fibonacci est une suite de nombres entiers. Voici le début de cette suite : 0, 1, 1, 2, 3, 5, 8, 13, 21, 34, 55, 89, 144,... jusqu'à l'infini. Un nombre de la suite est le résultat de la somme de ses deux précédents (U 3 = U 1 + U 2 ). Voici maintenant pourquoi le nombre d'or et la suite de Fibonacci sont étroitement liés: 1/0 = Ceci n'existe pas. 1/1 = 1 2/1 = 2 3/2 = 1.5 5/3 = 1.6666... 8/5 = 1.6 13/8 = 1.625 21/13 = 1.61538... 34/21 = 1.61904... Fib (n + 1) = 1.6. Fib (n) Le nombre d'or, habituellement désigné par la lettre φ (phi) de l'alphabet grec. Activité Ecrire une fonction nommé Nombre_Or, qui retourne une approximation du nombre d'or avec une précision de 10-6 * - * - * - * - * - * - * - * - * - * - * Analyse de la fonction Nombre_Or Résultat = Nombre_Or Traitement : On calcule en premier lieu la suite de Fibonacci dans un tableau. U[i ] = U[i -1] + U[i - 2] avec U[1] = 1 et U[2] = 1 Fib (n + 1) Puis on calcule La suite (Vn) définie sur N* par Vn = qui converge vers le Fib (n) nombre d'or. V[i] = U[i] / U[i-1] On répète ce calcul jusqu'à une précision donnée (par exemple de 10-6 ) Fin Analyse Algorithme 0) Fonction Nombre_Or (précision : Réel) : Réel ; 1) U[1] 1 U[2] 2 i 2; 2) Répéter i i + 1 4INFINFRC0004 Page 19

U[i] U[i-1] + U[i-2] V[i] U[i] / U[i-1] Jusqu'à ABS(V[i] - V[i-1]) < précision ; 3) Nombre_Or V[i] 4) Fin Nombre_Or 4INFINFRC0004 Page 20