/*************************************************************************************************************************************/ /* */ /* C O D A G E D E F I B O N A C C I : */ /* */ /* */ /* Author of '$xtc/FibonacciCoding.01$vv$c' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20151204150103). */ /* */ /*************************************************************************************************************************************/ #include "INCLUDES.01.I" #define NOMBRE_MAXIMAL_DE_NOMBRES_DE_FIBONACCI \ 20 #define NOMBRE_DE_NOMBRES_ENTIERS \ 256 int NombresDeFibonacci[NOMBRE_MAXIMAL_DE_NOMBRES_DE_FIBONACCI]; #define INITIALISATION_DE_LA_LISTE_DES_NOMBRES_DE_FIBONACCI \ { \ int IndexInitialisation; \ \ for (IndexInitialisation=INDEX0 ; \ IndexInitialisation<=NombreVersIndex(NOMBRE_MAXIMAL_DE_NOMBRES_DE_FIBONACCI) ; \ IndexInitialisation++ \ ) \ { \ if (IndexInitialisation <= NombreVersIndex(2)) \ { \ NombresDeFibonacci[IndexInitialisation] = IndexVersNombre(IndexInitialisation); \ } \ else \ { \ NombresDeFibonacci[IndexInitialisation] \ = NombresDeFibonacci[IndexInitialisation-2]+NombresDeFibonacci[IndexInitialisation-1]; \ } \ } \ } main() { int NombreCourant; INITIALISATION_DE_LA_LISTE_DES_NOMBRES_DE_FIBONACCI; for (NombreCourant=INDEX0 ; NombreCourant<=NombreVersIndex(NOMBRE_DE_NOMBRES_ENTIERS) ; NombreCourant++) { int IndexNombresDeFibonacci=INDEX0; while (NombreCourant >= NombresDeFibonacci[IndexNombresDeFibonacci]) { IndexNombresDeFibonacci++; } { int IndexBinaire; int CodesBinaires[IndexNombresDeFibonacci]; int Reste=NombreCourant; printf("N=%03d --> ",NombreCourant); CodesBinaires[IndexNombresDeFibonacci] = 1; /* Marquage de fin du binaire du nombre courant a priori... */ for (IndexBinaire=(IndexNombresDeFibonacci-1) ; IndexBinaire>=INDEX0 ; IndexBinaire--) { if (Reste >= NombresDeFibonacci[IndexBinaire]) { Reste = Reste-NombresDeFibonacci[IndexBinaire]; CodesBinaires[IndexBinaire] = 1; /* Le nombre de Fibonacci courant participe a la valeur du nombre courant. */ } else { CodesBinaires[IndexBinaire] = 0; /* Le nombre de Fibonacci courant ne sert a rien... */ } } for (IndexBinaire=INDEX0 ; IndexBinaire<=IndexNombresDeFibonacci ; IndexBinaire++) { printf("%d",CodesBinaires[IndexBinaire]); } printf("\n"); } } }