/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S U R J E C T I O N   F R A C T A L E   D E   [ 0 , 1 ]   D A N S   [ 0 , 1 ] x [ 0 , 1 ]   D E   P E A N O  :             */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_Peano2D$K' :                                                                                       */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20220322125146).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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_BASE

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITER_LA_DEFINITION_DU_CARRE                                                                                                 \
                    FAUX
#define   EDITER_LA_DEFINITION_DES_SOUS_CARRES                                                                                          \
                    FAUX
                                        /* Faut-il editer la definition du carre ('VRAI') ou pas ('FAUX') ? L'edition de la          */
                                        /* definition des 4 sous-carres a ete introduite le 20220519183517...                        */

#define   EDITER_DES_EXPLICATIONS                                                                                                       \
                    FAUX                                                                                                                \
                                        /* Faut-il editer des explications ('VRAI') ou pas ('FAUX') ?                                */

#include  xci/valeurs_Peano2D.I"
                                        /* Parametres de definition de l'extraction de decimales (introduits le 20220405113140 et    */
                                        /* mis sous cette forme le 20220405135206...).                                               */

#define   CONVERSION_0                                                                                                                  \
                    FZERO
#define   CONVERSION_1                                                                                                                  \
                    FU
#define   CONVERSION_2                                                                                                                  \
                    FDEUX

#define   NOMBRE_DE_DECIMALES_BASE_B_DU_PARAMETRE_T                                                                                     \
                    SIX                                                                                                                 \
                                        /* Nombre de decimales en base 3 du parametre 'T' qui doit etre pair...                      */

#define   CHAINER_LES_POINTS                                                                                                            \
                    VRAI                                                                                                                \
                                        /* Faut-il chainer les points ('VRAI') ou pas ('FAUX') ?                                     */

#define   PONDERATION_DE_T                                                                                                              \
                    FU
#define   PONDERATION_DE_X                                                                                                              \
                    FZERO
#define   PONDERATION_DE_Y                                                                                                              \
                    FZERO
                                        /* Ponderations respectives de 'T', 'X' et 'Y'.                                              */

#include  xci/valeurs.01.I"

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  xci/valeurs.02.I"

#define   BASE_DE_DEFINITION_MOINS_1                                                                                                    \
                    PRED(base_de_definition)

#define   INDEX_DE_LA_PREMIERE_DECIMALE                                                                                                 \
                    UN
#define   INDEXATION_DES_DECIMALES(decimales,index)                                                                                     \
                    ITb1(decimales,SOUS(MAX2(index,INDEX_DE_LA_PREMIERE_DECIMALE),INDEX_DE_LA_PREMIERE_DECIMALE))
                                        /* Indexation des decimales...                                                               */
                                        /*                                                                                           */
                                        /* Le 20220403101834 a ete introduit le 'MAX2(...,INDEX_DE_LA_PREMIERE_DECIMALE)' afin       */
                                        /* d'eviter des sorties des tableaux...                                                      */

#define   NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y                                                                             \
                    DIVI(nombre_de_decimales_base_B_du_parametre_T,dimension_de_la_courbe)                                              \
                                        /* Nombre de decimales en base 3 des coordonnees 'X' et 'Y'...                               */

#define   NOMBRE_DE_POINTS                                                                                                              \
                    INTE(PUIX(base_de_definition,nombre_de_decimales_base_B_du_parametre_T))                                            \
                                        /* Nombre de points a calculer...                                                            */

#define   SELECTION_COORDONNEE(DCoordonnee,somme_est_paire,somme)                                                                       \
                    Bblock                                                                                                              \
                    Test(DIVISIBLE(somme,BASE_DE_DEFINITION_MOINS_1))                                                                   \
                         Bblock                                                                                                         \
                                        /* Nombre de passages ici suivant le nombre de decimales :                                   */ \
                                        /*                                                                                           */ \
                                        /*                  15                  [nombre_de_decimales_base_B_du_parametre_T=2]        */ \
                                        /*                  234                 [nombre_de_decimales_base_B_du_parametre_T=4]        */ \
                                        /*                  2889                [nombre_de_decimales_base_B_du_parametre_T=6]        */ \
                                        /*                                                                                           */ \
                                        /* (mesures effectuee grace a 'v $xiirv/$Fnota Debut_listG_PEAN_2').                         */ \
                         EGAL(somme_est_paire,VRAI);                                                                                    \
                         EGAL(DCoordonnee,DecimaleCourante_T);                                                                          \
                                                                                                                                        \
                         INCR(compteur_selection_1,I);                                                                                  \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                                        /* Nombre de passages ici suivant le nombre de decimales :                                   */ \
                                        /*                                                                                           */ \
                                        /*                  3                   [nombre_de_decimales_base_B_du_parametre_T=2]        */ \
                                        /*                  90                  [nombre_de_decimales_base_B_du_parametre_T=4]        */ \
                                        /*                  1485                [nombre_de_decimales_base_B_du_parametre_T=6]        */ \
                                        /*                                                                                           */ \
                                        /* (mesures effectuee grace a 'v $xiirv/$Fnota Debut_listG_PEAN_2').                         */ \
                         EGAL(somme_est_paire,FAUX);                                                                                    \
                         EGAL(DCoordonnee,SOUS(BASE_DE_DEFINITION_MOINS_1,DecimaleCourante_T));                                         \
                                                                                                                                        \
                         INCR(compteur_selection_2,I);                                                                                  \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                                        /* Rapport des nombres de passages suivant le nombre de decimales :                          */ \
                                        /*                                                                                           */ \
                                        /*                  15/3      = 5.00    [nombre_de_decimales_base_B_du_parametre_T=2]        */ \
                                        /*                  234/90    = 2.60    [nombre_de_decimales_base_B_du_parametre_T=4]        */ \
                                        /*                  2889/1485 = 1.95    [nombre_de_decimales_base_B_du_parametre_T=6]        */ \
                                        /*                                                                                           */ \
                    Eblock

#define   CONVERSION_EN_BASE_10(variable,liste,borne)                                                                                   \
                    Bblock                                                                                                              \
                    DEFV(Int,INIT(index,UNDEF));                                                                                        \
                    DEFV(Float,INIT(puissance,FU));                                                                                     \
                                                                                                                                        \
                    EGAL(variable,FZERO);                                                                                               \
                                                                                                                                        \
                    DoIn(index,INDEX_DE_LA_PREMIERE_DECIMALE,borne,I)                                                                   \
                         Bblock                                                                                                         \
                         DEFV(Int,INIT(decimale_courante,INDEXATION_DES_DECIMALES(liste,index)));                                       \
                         DEFV(Float,INIT(decimale_convertie,FLOT(decimale_courante)));                                                  \
                                        /* Valeur par defaut...                                                                      */ \
                                                                                                                                        \
                         Test(IFEQ(base_de_definition,BASE_DE_DEFINITION_2D))                                                           \
                                        /* Test introduit le 20220402100544...                                                       */ \
                              Bblock                                                                                                    \
                              CHoi(decimale_courante)                                                                                   \
                                   Bblock                                                                                               \
                                   CAse(CONVERSION_0)                                                                                   \
                                        Bblock                                                                                          \
                                        EGAL(decimale_convertie,conversion_0);                                                          \
                                        Eblock                                                                                          \
                                   ECAs                                                                                                 \
                                                                                                                                        \
                                   CAse(CONVERSION_1)                                                                                   \
                                        Bblock                                                                                          \
                                        EGAL(decimale_convertie,conversion_1);                                                          \
                                        Eblock                                                                                          \
                                   ECAs                                                                                                 \
                                                                                                                                        \
                                   CAse(CONVERSION_2)                                                                                   \
                                        Bblock                                                                                          \
                                        EGAL(decimale_convertie,conversion_2);                                                          \
                                        Eblock                                                                                          \
                                   ECAs                                                                                                 \
                                                                                                                                        \
                                   DEfo                                                                                                 \
                                        Bblock                                                                                          \
                                        PRINT_ERREUR("une decimale base 3 differente de {0,1,2} est apparue");                          \
                                        Eblock                                                                                          \
                                   EDEf                                                                                                 \
                                   Eblock                                                                                               \
                              ECHo                                                                                                      \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         EGAL(puissance,DIVI(puissance,FLOT(base_de_definition)));                                                      \
                         INCR(variable,MUL2(decimale_convertie,puissance));                                                             \
                         Eblock                                                                                                         \
                    EDoI                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Conversion de la base 3 vers la base 10.                                                  */

#define   EDITION_DE_LA_DEFINITION_DU_CARRE(sommetX,sommetY)                                                                            \
                    Bblock                                                                                                              \
                    EDITION_DES_COORDONNEES("xB=%+.^^^ yB=%+.^^^ DefinitionCarre=",sommetX,sommetY);                                    \
                                        /* On notera le "DefinitionCarre=" qui ne sert que d'outil de compatibilite avec             */ \
                                        /* 'v $xiirv/.HILB.21.$U DefinitionCarre='...                                                */ \
                    Eblock                                                                                                              \
                                        /* Edition de la definition du carre...                                                      */

#define   EDITION_DES_EXPLICATIONS(sequence)                                                                                            \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_des_explications))                                                                              \
                         Bblock                                                                                                         \
                         BLOC(sequence);                                                                                                \
                                        /* Sequence d'edition...                                                                     */ \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Edition d'explications concernant la surjection de [0,1] dans [0,1]x[0,1].                */

#define   EDITION_DES_COORDONNEES(format_coordonnees_X_et_Y,Coordonnee_X,Coordonnee_Y)                                                  \
                    Bblock                                                                                                              \
                    CAL2(Prin2(format_coordonnees_X_et_Y                                                                                \
                              ,Coordonnee_X                                                                                             \
                              ,Coordonnee_Y                                                                                             \
                               )                                                                                                        \
                         );                                                                                                             \
                    CAL2(Prin0("\n"));                                                                                                  \
                    Eblock                                                                                                              \
                                        /* Edition des coordonnees.                                                                  */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   D ' I M B R I C A T I O N   D E S   " D E C I M A L E S "   E N   B A S E   3  :                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Logical,INIT(editer_des_explications,EDITER_DES_EXPLICATIONS)));
                                        /* Faut-il editer des explications ('VRAI') ou pas ('FAUX') ?                                */

DEFV(Local,DEFV(Int,INIT(dimension_de_la_courbe,DIMENSION_DE_LA_COURBE_2D)));
                                        /* Dimension de la courbe...                                                                 */

DEFV(Local,DEFV(Int,INIT(base_de_definition,BASE_DE_DEFINITION_2D)));
                                        /* Base de definition du parametre 'T' et des coordonnees 'X' et 'Y'...                      */

DEFV(Local,DEFV(Int,INIT(translation__index_SX,TRANSLATION_2D__INDEX_SX)));
DEFV(Local,DEFV(Int,INIT(translation__index_TX,TRANSLATION_2D__INDEX_TX)));
DEFV(Local,DEFV(Int,INIT(translation__index_X,TRANSLATION_2D__INDEX_X)));

DEFV(Local,DEFV(Int,INIT(translation__index_SY,TRANSLATION_2D__INDEX_SY)));
DEFV(Local,DEFV(Int,INIT(translation__index_TY,TRANSLATION_2D__INDEX_TY)));
DEFV(Local,DEFV(Int,INIT(translation__index_Y,TRANSLATION_2D__INDEX_Y)));
                                        /* Parametres de definition de l'extraction de decimales (introduits le 20220405113140).     */

DEFV(Local,DEFV(Positive,INIT(compteur_selection_1,ZERO)));
DEFV(Local,DEFV(Positive,INIT(compteur_selection_2,ZERO)));
                                        /* Compteurs des cas possibles de 'SELECTION_COORDONNEE(...)' introduits le 20220408095435.  */

DEFV(Local,DEFV(Float,INIT(conversion_0,CONVERSION_0)));
DEFV(Local,DEFV(Float,INIT(conversion_1,CONVERSION_1)));
DEFV(Local,DEFV(Float,INIT(conversion_2,CONVERSION_2)));
                                        /* Introduit le 20220324112948 pour le plaisir...                                            */
                                        /*                                                                                           */
                                        /* Par exemple :                                                                             */
                                        /*                                                                                           */
                                        /*                  conversion_0 = 0                                                         */
                                        /*                  conversion_1 = 0.5                                                       */
                                        /*                  conversion_2 = 1                                                         */
                                        /*                                                                                           */
                                        /* realise une reduction de rapport 2...                                                     */

DEFV(Local,DEFV(Int,INIT(nombre_de_decimales_base_B_du_parametre_T,NOMBRE_DE_DECIMALES_BASE_B_DU_PARAMETRE_T)));
                                        /* Nombre de decimales en base 3 du parametre 'T' qui doit etre pair...                      */

DEFV(Local,DEFV(Float,INIT(Parametre_T,FLOT__UNDEF)));
                                        /* Parametre 'T'.                                                                            */

DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___X,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Coordonnee_courante___Y,FLOT__UNDEF)));
                                        /* Coordonnees 'X' et 'Y' a l'instant 'T' courant.                                           */
DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_X,FLOT__UNDEF)));
DEFV(Local,DEFV(Float,INIT(Coordonnee_anterieure_Y,FLOT__UNDEF)));
                                        /* Coordonnees 'X' et 'Y' a l'instant 'T' precedent.                                         */

BFonctionV

DEFV(FonctionV,SurjectionDePeano(DecimalesParametre_T))
DEFV(Argument,DEFV(Int,DTb0(DecimalesParametre_T)));
     Bblock
     DEFV(Int,DdTb1(POINTERi,DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,ADRESSE_NON_ENCORE_DEFINIE));
     MdTb1(DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,Int,ADRESSE_NON_ENCORE_DEFINIE);

     DEFV(Int,DdTb1(POINTERi,DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,ADRESSE_NON_ENCORE_DEFINIE));
     MdTb1(DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,Int,ADRESSE_NON_ENCORE_DEFINIE);

     DEFV(Int,INIT(index1,UNDEF));

     EDITION_DES_EXPLICATIONS(BLOC(
                                   Bblock
                                   CAL2(Prin0("\nT=0.{"));

                                   DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T,I)
                                        Bblock
                                        DEFV(Int,INIT(DecimaleCourante_T,UNDEF));

                                        EGAL(DecimaleCourante_T,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index1));

                                        CAL2(Prin1("%d",DecimaleCourante_T));
                                        Eblock
                                   EDoI
                                   Eblock

                                   CAL2(Prin0("}"));
                                   )
                              );

     EDITION_DES_EXPLICATIONS(BLOC(
                                   Bblock
                                   CAL2(Prin0("\nX=0.{"));
                                   Eblock
                                   )
                              );

     DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,I)
          Bblock
          DEFV(Int,INIT(DecimaleCourante_T,UNDEF));

          DEFV(Int,INIT(somme_X,ZERO));
          DEFV(Logical,INIT(somme_X_est_paire,LUNDEF));
          DEFV(Int,INIT(DecimaleCourante_X,UNDEF));

          DEFV(Int,INIT(index_SX,UNDEF));
          DEFV(Int,INIT(index_T,AXPB(dimension_de_la_courbe,index1,translation__index_TX)));

          Test(INCLff(index_T,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T))
               Bblock
               DoIn(index_SX,INDEX_DE_LA_PREMIERE_DECIMALE,ADD2(index1,translation__index_SX),I)
                    Bblock
                    DEFV(Int,INIT(index_X,AXPB(dimension_de_la_courbe,index_SX,translation__index_X)));

                    Test(INCLff(index_X,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T))
                         Bblock
                         INCR(somme_X,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_X));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               EDoI

               EGAL(DecimaleCourante_T
                   ,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_T)
                    );

               SELECTION_COORDONNEE(DecimaleCourante_X,somme_X_est_paire,somme_X);

               EGAL(INDEXATION_DES_DECIMALES(DecimalesCoordonnee_X,index1),DecimaleCourante_X);
                                        /* Les decimales {B1,B2,B3,...} de 'X(T)' sont definies par :                                */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                            k=n-1                                                          */
                                        /*                           -------                                                         */
                                        /*                          \                                                                */
                                        /*                           \                                                               */
                                        /*                  SX   =   /       A            ({A1,A2,A3,...} sont les decimales de 'T') */
                                        /*                          /         2k                                                     */
                                        /*                           -------                                                         */
                                        /*                             k=1                                                           */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                  B    = A                                                                 */
                                        /*                   1      1                                                                */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                           / A                  si SX est PAIRE,                           */
                                        /*                          |   2n-1                                                         */
                                        /*                          |                                                                */
                                        /*                  B    = <                                                                 */
                                        /*                   n>1    |                                                                */
                                        /*                          |                                                                */
                                        /*                           \ 2 - A              si SX est IMPAIRE.                         */
                                        /*                                  2n-1                                                     */
                                        /*                                                                                           */

               EDITION_DES_EXPLICATIONS(BLOC(
                                             Bblock
                                             CAL2(Prin1("%d-",DecimaleCourante_X));
                                             Eblock
                                             )
                                        );
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     EDoI

     EDITION_DES_EXPLICATIONS(BLOC(
                                   Bblock
                                   CAL2(Prin0("}\n"));
                                   Eblock
                                   )
                              );

     EDITION_DES_EXPLICATIONS(BLOC(
                                   Bblock
                                   CAL2(Prin0("Y=0.{"));
                                   Eblock
                                   )
                              );

     DoIn(index1,INDEX_DE_LA_PREMIERE_DECIMALE,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,I)
          Bblock
          DEFV(Int,INIT(DecimaleCourante_T,UNDEF));

          DEFV(Int,INIT(somme_Y,ZERO));
          DEFV(Logical,INIT(somme_Y_est_paire,LUNDEF));
          DEFV(Int,INIT(DecimaleCourante_Y,UNDEF));

          DEFV(Int,INIT(index_SY,UNDEF));
          DEFV(Int,INIT(index_T,AXPB(dimension_de_la_courbe,index1,translation__index_TY)));

          Test(INCLff(index_T,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T))
               Bblock
               DoIn(index_SY,INDEX_DE_LA_PREMIERE_DECIMALE,ADD2(index1,translation__index_SY),I)
                    Bblock
                    DEFV(Int,INIT(index_Y,AXPB(dimension_de_la_courbe,index_SY,translation__index_Y)));

                    Test(INCLff(index_Y,INDEX_DE_LA_PREMIERE_DECIMALE,nombre_de_decimales_base_B_du_parametre_T))
                         Bblock
                         INCR(somme_Y,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_Y));
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               EDoI

               EGAL(DecimaleCourante_T
                   ,INDEXATION_DES_DECIMALES(DecimalesParametre_T,index_T)
                    );

               SELECTION_COORDONNEE(DecimaleCourante_Y,somme_Y_est_paire,somme_Y);

               EGAL(INDEXATION_DES_DECIMALES(DecimalesCoordonnee_Y,index1),DecimaleCourante_Y);
                                        /* Les decimales {C1,C2,C3,...} de 'Y(T)' sont definies par :                                */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                             k=n                                                           */
                                        /*                           -------                                                         */
                                        /*                          \                                                                */
                                        /*                           \                                                               */
                                        /*                  SY   =   /       A            ({A1,A2,A3,...} sont les decimales de 'T') */
                                        /*                          /         2k-1                                                   */
                                        /*                           -------                                                         */
                                        /*                             k=1                                                           */
                                        /*                                                                                           */
                                        /*                                                                                           */
                                        /*                           / A                  si SY est PAIRE,                           */
                                        /*                          |   2n                                                           */
                                        /*                          |                                                                */
                                        /*                  C    = <                                                                 */
                                        /*                   n>0    |                                                                */
                                        /*                          |                                                                */
                                        /*                           \ 2 - A              si SY est IMPAIRE.                         */
                                        /*                                  2n                                                       */
                                        /*                                                                                           */

               EDITION_DES_EXPLICATIONS(BLOC(
                                             Bblock
                                             CAL2(Prin1("-%d",DecimaleCourante_Y));
                                             Eblock
                                             )
                                        );
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     EDoI

     EDITION_DES_EXPLICATIONS(BLOC(
                                   Bblock
                                   CAL2(Prin0("}\n"));
                                   Eblock
                                   )
                              );

     CONVERSION_EN_BASE_10(Parametre_T,DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T);
     CONVERSION_EN_BASE_10(Coordonnee_courante___X,DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y);
     CONVERSION_EN_BASE_10(Coordonnee_courante___Y,DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y);

     FdTb1(DecimalesCoordonnee_Y,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,Int,ADRESSE_PLUS_DEFINIE);
     FdTb1(DecimalesCoordonnee_X,NOMBRE_DE_DECIMALES_BASE_B_DES_COORDONNEES_X_ET_Y,Int,ADRESSE_PLUS_DEFINIE);

     RETU_VIDE;
     Eblock

EFonctionV

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        S U R J E C T I O N   F R A C T A L E   D E   [ 0 , 1 ]   D A N S   [ 0 , 1 ] x [ 0 , 1 ]   D E   P E A N O  :             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(editer_la_definition_du_carre,EDITER_LA_DEFINITION_DU_CARRE));
     DEFV(Logical,INIT(editer_la_definition_des_sous_carres,EDITER_LA_DEFINITION_DES_SOUS_CARRES));
                                        /* Faut-il editer la definition du carre ('VRAI') ou pas ('FAUX') ? L'edition de la          */
                                        /* definition des 4 sous-carres a ete introduite le 20220519183517...                        */

     DEFV(Logical,INIT(chainer_les_points,CHAINER_LES_POINTS));
                                        /* Faut-il chainer les points ('VRAI') ou pas ('FAUX') ?                                     */

     DEFV(Float,INIT(ponderation_de_T,PONDERATION_DE_T));
     DEFV(Float,INIT(ponderation_de_X,PONDERATION_DE_X));
     DEFV(Float,INIT(ponderation_de_Y,PONDERATION_DE_Y));
                                        /* Ponderations respectives de 'T', 'X' et 'Y'.                                              */

#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("definition_carre=""dc=",editer_la_definition_du_carre);
                         GET_ARGUMENT_L("definition_sous_carres=""dsc=",editer_la_definition_des_sous_carres);
                                        /* Argument introduit le 20220519183517...                                                   */

                         GET_ARGUMENT_L("editer_explications=""ee=",editer_des_explications);

                         GET_ARGUMENT_I("base=""b=",base_de_definition);
                                        /* Option introduite le 20220402095222...                                                    */
                                        /*                                                                                           */
                                        /* On notera le 20220402103747 qu'apparemment seuls :                                        */
                                        /*                                                                                           */
                                        /*                  base=3              (valeur par defaut)                                  */
                                        /*                                                                                           */
                                        /* et :                                                                                      */
                                        /*                                                                                           */
                                        /*                  base=4                                                                   */
                                        /*                                                                                           */
                                        /* donnent quelque chose d'interessant...                                                    */

                         GET_ARGUMENT_I("nombre_decimales=""nd=",nombre_de_decimales_base_B_du_parametre_T);

                         GET_ARGUMENT_L("chainer_points=""cp=",chainer_les_points);

                         GET_ARGUMENT_I("translation_SX=""tSX=",translation__index_SX);
                         GET_ARGUMENT_I("translation_TX=""tTX=",translation__index_TX);
                         GET_ARGUMENT_I("translation_X=""tX=",translation__index_X);

                         GET_ARGUMENT_I("translation_SY=""tSY=",translation__index_SY);
                         GET_ARGUMENT_I("translation_TY=""tTY=",translation__index_TY);
                         GET_ARGUMENT_I("translation_Y=""tY=",translation__index_Y);
                                        /* Options introduites le 20220405115242...                                                  */

                         GET_ARGUMENT_F("c0=",conversion_0);
                         GET_ARGUMENT_F("c1=",conversion_1);
                         GET_ARGUMENT_F("c2=",conversion_2);
                                        /* Options introduites le 20220324112948...                                                  */

                         GET_ARGUMENT_F("Pt=""PT=",ponderation_de_T);
                         GET_ARGUMENT_F("Px=""PX=",ponderation_de_X);
                         GET_ARGUMENT_F("Py=""PY=",ponderation_de_Y);

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                         )
                    );

     Test(IFET(IFNE(base_de_definition,BASE_DE_DEFINITION_2D)
              ,I3OU(IFNE(conversion_0,CONVERSION_0)
                   ,IFNE(conversion_1,CONVERSION_1)
                   ,IFNE(conversion_2,CONVERSION_2)
                    )
               )
          )
                                        /* Test introduit le 20220402100544...                                                       */
          Bblock
          PRINT_ATTENTION("le dispositif de conversion des chiffres n'est pas disponible lorsqu'il y a changement de base.");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(NON_DIVISIBLE(nombre_de_decimales_base_B_du_parametre_T,dimension_de_la_courbe))
          Bblock
          PRINT_ATTENTION("le nombre de decimales du parametre 'T' doit etre divisible par la dimension de la courbe");
          CAL1(Prer1("(la valeur '%d' sera remplacee par ",nombre_de_decimales_base_B_du_parametre_T));
          EGAL(nombre_de_decimales_base_B_du_parametre_T
              ,iMULTIPLE(nombre_de_decimales_base_B_du_parametre_T,dimension_de_la_courbe)
               );
          CAL1(Prer1("'%d')\n",nombre_de_decimales_base_B_du_parametre_T));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     begin_nouveau_block
          Bblock
          DEFV(Int,INIT(index1,UNDEF));

          DEFV(Int,DdTb1(POINTERi,DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T,ADRESSE_NON_ENCORE_DEFINIE));
          MdTb1(DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T,Int,ADRESSE_NON_ENCORE_DEFINIE);

          DoIn(index1
              ,SOUS(INDEX_DE_LA_PREMIERE_DECIMALE,INDEX_DE_LA_PREMIERE_DECIMALE)
              ,SOUS(nombre_de_decimales_base_B_du_parametre_T,INDEX_DE_LA_PREMIERE_DECIMALE)
              ,I
               )
               Bblock
               EGAL(IdTb1(DecimalesParametre_T,index1,nombre_de_decimales_base_B_du_parametre_T),ZERO);
               Eblock
          EDoI

          Repe(NOMBRE_DE_POINTS)
               Bblock
               DEFV(Int,INIT(index2,UNDEF));
               DEFV(Int,INIT(retenue,UN));

               Test(IL_FAUT(chainer_les_points))
                    Bblock
                    Test(IFGT(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe))
                         Bblock
                         EGAL(Coordonnee_anterieure_X,Coordonnee_courante___X);
                         EGAL(Coordonnee_anterieure_Y,Coordonnee_courante___Y);
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               CALS(SurjectionDePeano(DecimalesParametre_T));
                                        /* Surjection courante a partir du parametre 'T' courant...                                  */

               Test(IL_FAUT(chainer_les_points))
                    Bblock
                    Test(IFGT(compteur_des_repetitions_du_Repe,PREMIERE_ITERATION_D_UN_Repe))
                         Bblock
                         EDITION_DES_COORDONNEES("xA=%+.^^^ yA=%+.^^^",Coordonnee_anterieure_X,Coordonnee_anterieure_Y);
                         EDITION_DES_COORDONNEES("xB=%+.^^^ yB=%+.^^^",Coordonnee_courante___X,Coordonnee_courante___Y);
                                        /* Cette edition est compatible avec 'v $xci/valeurs_Hilbert2D$K EDITION_DES_COORDONNEES'.   */
                         Eblock
                    ATes
                         Bblock
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n"))
                              ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                              ,LIZ3(ponderation_de_T,FLOT(Parametre_T)
                                   ,ponderation_de_X,FLOT(Coordonnee_courante___X)
                                   ,ponderation_de_Y,FLOT(Coordonnee_courante___Y)
                                    )
                               )
                         );
                    Eblock
               ETes

               DoDe(index2
                   ,SOUS(INDEX_DE_LA_PREMIERE_DECIMALE,INDEX_DE_LA_PREMIERE_DECIMALE)
                   ,SOUS(nombre_de_decimales_base_B_du_parametre_T,INDEX_DE_LA_PREMIERE_DECIMALE)
                   ,I
                    )
                    Bblock
                    INCR(IdTb1(DecimalesParametre_T,index2,nombre_de_decimales_base_B_du_parametre_T),retenue);
                                        /* Incrementation du parametre 'T'...                                                        */

                    Test(IFEQ(IdTb1(DecimalesParametre_T,index2,nombre_de_decimales_base_B_du_parametre_T),base_de_definition))
                         Bblock
                         EGAL(IdTb1(DecimalesParametre_T,index2,nombre_de_decimales_base_B_du_parametre_T),ZERO);
                         EGAL(retenue,UN);
                         Eblock
                    ATes
                         Bblock
                         EGAL(retenue,ZERO);
                         Eblock
                    Eblock
                    ETes
               EDoD
               Eblock
          ERep

          Test(IL_FAUT(editer_la_definition_du_carre))
               Bblock
               Test(IL_FAUT(chainer_les_points))
                    Bblock
#include  xci/valeurs_Hilbert2D.I"
                                        /* Afin d'etre compatible avec 'v $xiirv/.PEAN.21.$U', il faut que le carre soit trace apres */
                                        /* la trajectoire de 'T' et ce afin que ce carre semble etre derriere cette trajectoire...   */
                    Eblock
               ATes
                    Bblock
                    PRINT_ATTENTION("lors de l'edition de points isoles, la definition du carre ne peut etre editee");
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          EDITION_DES_EXPLICATIONS(BLOC(
                                        Bblock
                                        CAL2(Prin3("Rapport des 2 cas de selection : %d/%d=%f\n"
                                                  ,compteur_selection_1
                                                  ,compteur_selection_2
                                                  ,DIVI(FLOT(compteur_selection_1),FLOT(compteur_selection_2))
                                                   )
                                             );
                                        Eblock
                                        )
                                   );

          FdTb1(DecimalesParametre_T,nombre_de_decimales_base_B_du_parametre_T,Int,ADRESSE_PLUS_DEFINIE);
          Eblock
     end_nouveau_block

     RETU_Commande;
     Eblock
ECommande



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