/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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");
                              }
                    }
          }



Copyright © Jean-François Colonna, 2021-2023.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / École polytechnique, Institut Polytechnique de Paris, 2021-2023.