Codage de Fibonacci – Bac théorique – Section informatique – 2016

Bac Info 08-01-26
37 0

Sujet (Algo et programmation - Bac 2016)

Le codage de Fibonacci est un code binaire, utilisant des termes de la suite de Fibonacci et servant essentiellement dans la compression de données.

Pour déterminer le code de Fibonacci d'un entier K strictement positif, on suit les étapes suivantes

Etape 1 : Déterminer la liste des termes de la suite de Fibonacci inférieurs ou égaux à K,

sachant que la suite de Fibonacci U est définie comme suit :

U,= 1, U2 = 1

Un = Uni + Un-2 pour n > 2

Etape 2 : Décomposer l'entier K en une somme des termes de la suite de Fibonacci déjà calculés dans l'étape précédente, tout en commençant par utiliser le plus grand terme inférieur à K et sans prendre en considération le premier ternie de la suite (U1).

Etape 3 : Former un code binaire à partir de la liste des termes calculée dans l'étape 1 et sans prendre en considération le premier terme de la suite (U1) : en concaténant le caractère "1" dans le cas où le terme a été utilisé dans la somme calculée au niveau de l'étape 2 et en concaténant le caractère "0" dans le cas contraire.

Etape 4 : Ajouter à la fin du code obtenu précédemment le caractère "1" pour obtenir le code de Fibonacci.

On se propose d'écrire un programme qui permet de saisir un entier K strictement positif et d'afficher le code de Fibonacci correspondant.

Exemple : Pour K = 50,

Etape 1 : La liste des termes de la suite de Fibonacci inférieurs ou égaux à 50 et sans prendre en considération le premier terme de la suite (U1) est : 1, 2, 3, 5, 8, 13, 21 et 34.

Etape 2 : La décomposition de K sera comme suit : 50 = 34 + 13 + 3

Etape 3 : Etant donnée la liste des termes obtenue dans l'étape 1 et sans prendre en considération le premier terme de la suite (U1) : 1, 2, 3, 5, 8, 13, 21 et 34

En concaténant le caractère "0" pour les termes 1, 2, 5, 8 et 21 qui n'ont pas été utilisés dans la somme et en concaténant le caractère "1" pour les termes 3, 13 et 34 qui ont été utilisés dans la somme, le code binaire formé est : 00100101

Etape 4 : En ajoutant à la fin du code binaire obtenu précédemment le caractère "1", le code de Fibonacci est : 001001011

Travail à faire :

- Analyser le problème en le décomposant en modules.

- Analyser chacun des modules envisagés.

 

 

Solution Algorithmique

Dans cet algorithme, On va utiliser trois fonctions et une procédure:

- la fonction saisie()

- la fonction termes_fibonacci()

- la procédure decomposition()

- la fonction code_fibonacci()

 

Algorithme du programme Principal

Déclaration des objets

Objet Type / Nature
k entier
longueur_tab entier
t1 tableau pour stocker les termes de Fibonacci (entiers)
t2 tableau pour stocker le code binaire correspondant (chaînes)

 

La fonction saisie

Cette fonction permet de saisir un entier strictement positif et assure que la valeur entrée respecte la condition k > 0.

1- Saisie initiale : la fonction demande à l’utilisateur de saisir un entier k avec la consigne k > 0.

2- Vérification de la validité : tant que l’utilisateur saisit un nombre inférieur ou égal à 0, la fonction redemande la saisie.

3- Retour de la valeur : une fois qu’un entier strictement positif est saisi, la fonction retourne cette valeur.

Déclaration des objets

Objet Type / Nature
k entier

 

La procédure termes_fibonacci

Cette procédure génère tous les termes de la suite de Fibonacci inférieurs à n et les stocke dans un tableau.

1- Initialisation :

Les deux premiers termes u1 et u2 sont fixés à 1.

Le troisième terme u3 est calculé comme u1 + u2.

Le premier terme (1) est stocké dans le tableau t[0].

longueur_tab est initialisée à 1 pour compter le nombre de termes stockés.

2- Génération des termes suivants :

Tant que le terme suivant u3 est inférieur à n, la suite est générée :

a) On déplace les valeurs : u1 ← u2, u2 ← u3, u3 ← u1 + u2.

b) Le compteur longueur_tab est incrémenté.

c) Le nouveau terme u3 est stocké dans le tableau t.

3- Résultat :

À la fin, le tableau t contient tous les termes de Fibonacci inférieurs à n.

La variable globale longueur_tab indique le nombre de termes stockés.

Déclaration des objets

 

Objet Type / Nature
i entier
u1 entier
u2 entier
u3 entier
longueur_tab entier (variable globale)

 

La procédure decomposition

Cette procédure permet de décomposer un entier n en somme de termes de Fibonacci et de créer le code binaire correspondant, où chaque bit indique si un terme est utilisé ('1') ou non ('0').

1- Initialisation du code binaire :

Tous les éléments du tableau t2 sont initialisés à '0'.

Chaque position de t2 correspond à un terme du tableau t1 contenant les termes de Fibonacci.

2- Utilisation du plus grand terme :

On commence par utiliser le plus grand terme de Fibonacci inférieur ou égal à n :

La différence à décomposer est calculée comme difference = n - t1[longueur_tab - 1].

Le bit correspondant à ce plus grand terme est mis à '1' dans t2.

3- Décomposition du reste :

Tant que la différence n’est pas nulle et qu’il reste des termes plus petits à considérer :

Si le terme courant t1[i] est inférieur ou égal à la différence, il est utilisé :

La différence est réduite : difference -= t1[i].

Le bit correspondant est mis à '1'. Sinon, le bit reste '0'.

On passe ensuite au terme de Fibonacci suivant, plus petit (i -= 1).

4- Résultat :

Le tableau t2 contient une représentation binaire de la décomposition de n en termes de Fibonacci : '1' si le terme est utilisé, '0' sinon.

Déclaration des objets

Objet Type / Nature
difference entier
i entier

 

La fonction code_fibonacci

Cette fonction permet de construire et retourner le code binaire final de Fibonacci à partir d’un tableau de bits.

Plus précisément, elle reçoit t : un tableau contenant des caractères '0' et '1' représentant la décomposition de Fibonacci et n : le nombre de bits significatifs à utiliser dans ce tableau.

Elle concatène successivement les n premiers éléments du tableau t pour former une chaîne binaire.

Elle ajoute obligatoirement un '1' final, conformément à la règle du codage de Fibonacci (ce bit marque la fin du code).

Elle affiche un message indiquant que le code binaire de Fibonacci est en cours de génération.

Elle retourne la chaîne binaire finale correspondant au code de Fibonacci.

Déclaration des objets

Objet Type / Nature
code chaîne
i entier

 

Solution en Python

Exécution du programme

0 commentaire

laisser un commentaire

Veuillez noter s'il vous plaît*

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *

Passion de robotique

Atelier robotique

Construction des robots

Bras robotique

Maison intelligente

But de ce site web

La robotique éducative joue un rôle important dans l'éducation des enfants et des jeunes en les aidant à acquérir des compétences en science et technologie.
Dans ce cadre notre site web représente une excellente ressource pour les parents, les enseignants et les enfants qui souhaitent découvrir la robotique.

Coordonnées

Zaouiet Kontech-Jemmel-Monastir-Tunisie

+216 92 886 231

medaliprof@gmail.com

Photos des articles

Site robotique réalisé par Mohamed Ali Haj Salah - Prof Info