/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H I F F R A G E   C H A O T I Q U E   I N V E R S I B L E   D ' U N   F I C H I E R  :                                   */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xcg/chiffrage.11$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 1993??????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        I N T E R F A C E   ' listG '  :                                                                                           */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        :Debut_listG:                                                                                                              */
/*        :Fin_listG:                                                                                                                */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        D I R E C T I V E S   S P E C I F I Q U E S   D E   C O M P I L A T I O N  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_MINI

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   TAUX_DE_CROISSANCE                                                                                                            \
                    FLOT(TROIS)                                                                                                         \
                                        /* Taux de croissance.                                                                       */
#define   X0                                                                                                                            \
                    FDU                                                                                                                 \
                                        /* Valeur de la premiere iteration.                                                          */

#define   N0                                                                                                                            \
                    ZERO                                                                                                                \
                                        /* Numero de la premiere iteration...                                                        */
#define   NOMBRE_D_ITERATIONS_AVEUGLES                                                                                                  \
                    MILLION                                                                                                             \
                                        /* Nombre d'iterations inutiles faites avant le chiffrage...                                 */

#define   PERIODICITE_DE_LA_TRONCATURE                                                                                                  \
                    VINGT                                                                                                               \
                                        /* Periodicite de la troncature des decimales...                                             */
#define   IMPORTANCE_DE_LA_TRONCATURE                                                                                                   \
                    MILLION                                                                                                             \
                                        /* Importance de la troncature. L'operation de troncature permet d'eliminer le probleme      */ \
                                        /* de la dependance vis a vis du code genere et de la structure des machines...              */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   DYNAMIQUE(x)                                                                                                                  \
                    SOUS(MUL2(SUCC(taux_de_croissance),EXP1(x))                                                                         \
                        ,MUL2(taux_de_croissance,EXP2(x))                                                                               \
                         )                                                                                                              \
                                        /* Definition du systeme dynamique utilise...                                                */
#define   CODAGE(c,x)                                                                                                                   \
                    MODS(OUEX(c,INTE(MUL2(FLOT(MOCD),DYNAMIQUE(x)))),ZERO,MOCD)                                                         \
                                        /* Definition du codage inversible utilise...                                                */
#define   SYSTEME_DYNAMIQUE                                                                                                             \
                    Bblock                                                                                                              \
                    INCR(numero_de_l_iteration,I);                                                                                      \
                    EGAL(xn,DYNAMIQUE(xn));                                                                                             \
                                        /* Iteration du systeme dynamique...                                                         */ \
                    Test(DIVISIBLE(SOUS(numero_de_l_iteration,N0),periodicite_de_la_troncature))                                        \
                         Bblock                                                                                                         \
                         EGAL(xn,DIVI(fINTE(MUL2(FLOT(importance_de_la_troncature),xn)),FLOT(importance_de_la_troncature)));            \
                                        /* Periodiquement, les dernieres decimales ont eliminees afin d'eliminer le probleme de la   */ \
                                        /* vis a vis du code genere et de la structure des machines...                               */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Definition du systeme dynamique de chiffrage...                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C H I F F R A G E   C H A O T I Q U E   I N V E R S I B L E   D ' U N   F I C H I E R  :                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Int,INIT(numero_du_caractere_courant,ZERO));
                                        /* Numero du caractere courant.                                                              */
     DEFV(Int,INIT(numero_de_l_iteration,N0));
                                        /* Numero 'n' de l'iteration courante.                                                       */
     DEFV(Int,INIT(nombre_d_iterations_aveugles,NOMBRE_D_ITERATIONS_AVEUGLES));
                                        /* Nombre d'iterations inutilies faites avant le chiffrage...                                */
     DEFV(Float,INIT(taux_de_croissance,TAUX_DE_CROISSANCE));
                                        /* Taux de croissance.                                                                       */
     DEFV(Float,INIT(x0,X0));
                                        /* Valeur de la premiere iteration.                                                          */
     DEFV(Float,INIT(xn,FLOT__UNDEF));
                                        /* Valeur de l'iteration courante.                                                           */
     DEFV(Int,INIT(periodicite_de_la_troncature,PERIODICITE_DE_LA_TRONCATURE));
                                        /* Periodicite de la troncature des decimales...                                             */
     DEFV(Int,INIT(importance_de_la_troncature,IMPORTANCE_DE_LA_TRONCATURE));
                                        /* Importance de la troncature. L'operation de troncature permet d'eliminer le probleme      */
                                        /* de la dependance vis a vis du code genere et de la structure des machines...              */
     DEFV(Int,INIT(caractere_courant,UNDEF));
                                        /* Caractere courant. ATTENTION, on utilise le type 'Int' et non pas 'Char' a cause de       */
                                        /* de l'usage qui sera fait ci-apres de 'GetcharQ(...)', et ce afin que le test de fin       */
                                        /* de fichier fonctionne correctement...                                                     */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_I("aveugle=",nombre_d_iterations_aveugles);
                         GET_ARGUMENT_F("taux=""r=""R=",taux_de_croissance);
                         GET_ARGUMENT_F("x0=""X0=",x0);
                         GET_ARGUMENT_I("p=",periodicite_de_la_troncature);
                         GET_ARGUMENT_I("t=",importance_de_la_troncature);
                         )
                    );

     EGAL(xn,x0);
                                        /* Initialisation du processus dynamique...                                                  */
     Repe(nombre_d_iterations_aveugles)
          Bblock
          SYSTEME_DYNAMIQUE;
                                        /* Ces quelques iterations aveugles sont destinees a nous faire arriver dans le chaos...     */
          Eblock
     ERep

     Tant(GetcharQ(caractere_courant))
          Bblock
                                        /* Le caractere courant de l'entree courante est recupere ; et on boucle                     */
                                        /* sur cette recuperation tant que l'on n'est pas au bout du fichier.                        */
          INCR(numero_du_caractere_courant,I);
                                        /* Numero du caractere courant.                                                              */
          Test(IFNE(caractere_courant,CODAGE(CODAGE(caractere_courant,xn),xn)))
               Bblock
               PRINT_ERREUR("le codage n'est pas inversible");
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          CALS(Putchar(CODAGE(caractere_courant,xn)));
                                        /* Le caractere courant est code puis emis...                                                */

          SYSTEME_DYNAMIQUE;
          Eblock
     ETan

     RETU_Commande;
     Eblock
ECommande



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