/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E S   P R E M I E R S   N O M B R E S   S U R R E E L S  :                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande (inspiree du programme                                                                          */
/*                  'v $xtc/NombresSurReels.01$c') edite les                                                                         */
/*                  premiers nombres surreels ('v $xiirv/SURR.12').                                                                  */
/*                                                                                                                                   */
/*                    Le 20110309093724, sa vocation a ete etendue                                                                   */
/*                  en lui permettant de generer des cascades                                                                        */
/*                  binomiales ('v $xiirv/CASB.12') en attribuant                                                                    */
/*                  a chaque nombre surreel une masse ("invisible"                                                                   */
/*                  par defaut) qu'il "herite" de son parent...                                                                      */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/valeurs_SurR$K' :                                                                                          */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20081108111232).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   PREMIER_JOUR                                                                                                                  \
                    ZERO
#define   DERNIER_JOUR                                                                                                                  \
                    QUATRE
                                        /* Definition du temps : evidemment, 'DERNIER_JOUR' devrait etre infini...                   */

#define   EDITER_LES_EN_TETES                                                                                                           \
                    FAUX                                                                                                                \
                                        /* Faut-il editer les en-tetes ('VRAI') ou pas ('FAUX') ?                                    */
#define   EDITER_LA_DATE                                                                                                                \
                    VRAI                                                                                                                \
                                        /* Faut-il editer la date ('VRAI') ou pas ('FAUX') ?                                         */
#define   SIMPLIFIER_LES_FRACTIONS                                                                                                      \
                    VRAI                                                                                                                \
                                        /* Faut-il simplifier les fractions ('VRAI') ou pas ('FAUX') ?                               */
#define   EDITER_DES_FRACTIONS                                                                                                          \
                    VRAI                                                                                                                \
                                        /* Faut-il editer des fractions -nombres rationnels- ('VRAI') ou des nombres decimaux        */ \
                                        /* ('FAUX') ?                                                                                */
#define   EDITER_LES_FILIATIONS                                                                                                         \
                    FAUX                                                                                                                \
                                        /* Faut-il editer les nombres surreels "isoles" ('FAUX') ou bien les filiations ('VRAI') ?   */ \
                                        /* Dans ce dernier cas, sont sortis sur deux lignes sucessives en premier un certain         */ \
                                        /* nombre surreel puis en second l'un de ses deux fils et ce de facon recursive...           */

#define   EDITER_LES_MASSES                                                                                                             \
                    FAUX
#define   MASSE_DE_LA_RACINE_DE_L_ARBRE                                                                                                 \
                    FU
#define   EXPOSANT_DES_MASSES                                                                                                           \
                    FU
#define   PONDERATION_BARYCENTRIQUE_DES_MASSES                                                                                          \
                    FDU
                                        /* Faut-il editer les masses ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le 20110309093724 */
                                        /* afin de generer eventuellement des "cascades binomiales"...                               */

#include  xci/valeurs.01.I"

#undef    DES_NOMBRES_ENTIERS                                                                                                           \
                                        /* Ceci fut introduit le 20081120142701 suite a 'v $xci/valeurs.02$I 20081120100649' ou      */ \
                                        /* dans 'FORMAT_D_EDITION_EVENTUELLEMENT_ENTIER' la variable 'des_nombres_entiers' est       */ \
                                        /* testee ; d'ou il en est de meme dans 'NOMBRE_DE_DECIMALES_EFFECTIF'. Or cette variable    */ \
                                        /* 'des_nombres_entiers' est definie dans 'v $xci/valeurs.03$I des_nombres_entiers' qui      */ \
                                        /* doit etre situee dans 'BCommande(...)' et donc apres 'EditionDUnNombreSurReel(...)'.      */ \
                                        /* L'annulation de la definition de 'DES_NOMBRES_ENTIERS' permet d'ignorer la reference      */ \
                                        /* a 'des_nombres_entiers'...                                                                */

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

#define   OrigineSpatiale                                                                                                               \
                    ZERO
#define   DenominateurNombreEntier                                                                                                      \
                    UNITE

#define   DYADIQUE                                                                                                                      \
                    DEUX
#define   DYAD(x)                                                                                                                       \
                    MUL2(DYADIQUE,x)
                                        /* Definition de la fonction {Dyadique}.                                                     */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F O N C T I O N   D ' E D I T I O N   D ' U N   N O M B R E   S U R R E E L  :                                             */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
DEFV(Local,DEFV(Logical,INIT(editer_les_en_tetes,EDITER_LES_EN_TETES)));
                                        /* Faut-il editer les en-tetes ('VRAI') ou pas ('FAUX') ?                                    */
DEFV(Local,DEFV(Logical,INIT(editer_la_date,EDITER_LA_DATE)));
                                        /* Faut-il editer la date ('VRAI') ou pas ('FAUX') ?                                         */
DEFV(Local,DEFV(Logical,INIT(simplifier_les_fractions,SIMPLIFIER_LES_FRACTIONS)));
                                        /* Faut-il simplifier les fractions ('VRAI') ou pas ('FAUX') ?                               */
DEFV(Local,DEFV(Logical,INIT(editer_des_fractions,EDITER_DES_FRACTIONS)));
                                        /* Faut-il editer des fractions -nombres rationnels- ('VRAI') ou des nombres decimaux        */
                                        /* ('FAUX') ?                                                                                */
DEFV(Local,DEFV(Logical,INIT(editer_les_filiations,EDITER_LES_FILIATIONS)));
                                        /* Faut-il editer les nombres surreels "isoles" ('FAUX') ou bien les filiations ('VRAI') ?   */
                                        /* Dans ce dernier cas, sont sortis sur deux lignes sucessives en premier un certain         */
                                        /* nombre surreel puis en second l'un de ses deux fils et ce de facon recursive...           */
DEFV(Local,DEFV(Logical,INIT(editer_les_masses,EDITER_LES_MASSES)));
DEFV(Local,DEFV(Float,INIT(masse_de_la_racine_de_l_arbre,MASSE_DE_LA_RACINE_DE_L_ARBRE)));
DEFV(Local,DEFV(Float,INIT(exposant_des_masses,EXPOSANT_DES_MASSES)));
DEFV(Local,DEFV(Float,INIT(ponderation_barycentrique_des_masses,PONDERATION_BARYCENTRIQUE_DES_MASSES)));
                                        /* Faut-il editer les masses ('VRAI') ou pas ('FAUX') ? Ceci fut introduit le 20110309093724 */
                                        /* afin de generer eventuellement des "cascades binomiales"...                               */

BFonctionV

DEFV(Local,DEFV(FonctionV,EditionDUnNombreSurReel(JourCourant
                                                 ,NombreSurReelDuJourCourant
                                                 ,MasseCourante
                                                 ,valeurs_signees
                                                 ,format_d_edition
                                                 ,nombre_de_decimales
                                                  )
                )
     )
DEFV(Argument,DEFV(Int,JourCourant));
                                        /* Jour courant dans [premier_jour,dernier_jour].                                            */
DEFV(Argument,DEFV(fractionI,NombreSurReelDuJourCourant));
                                        /* Nombre surreel courant dont on va calculer ici les deux fils "Left_" et "Right".          */
DEFV(Argument,DEFV(Float,MasseCourante));
                                        /* Masse du nombre surreel courant (introduite le 20110309093724).                           */
DEFV(Argument,DEFV(CHAR,POINTERc(valeurs_signees)));
DEFV(Argument,DEFV(CHAR,POINTERc(format_d_edition)));
DEFV(Argument,DEFV(Positive,nombre_de_decimales));
                                        /* Ces trois arguments sont rendus necessaires par le fait que les trois variables           */
                                        /* correspondantes ne peuvent etre definies que dans 'BCommande(...)' car, en effet,         */
                                        /* elles ne sont en general pas definies a partir de constantes (voir en particulier         */
                                        /* 'v $xci/valeurs.03$I INIC'...). Mais etant dans 'BCommande(...)', elles ne sont pas       */
                                        /* vues a l'interieur de 'GenerationDesNombresSurReels(...)', d'ou ce stratageme...          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(fractionI,NombreSurReelDuJourCourantSimplifie);
                                        /* Valeur rationnelle simplifiee (si cela est possible...) de 'NombreSurReelDuJourCourant'.  */
     /*..............................................................................................................................*/
     INITIALISATION_FRACTION(NombreSurReelDuJourCourantSimplifie
                            ,NumerateurFraction__(NombreSurReelDuJourCourant)
                            ,DenominateurFraction(NombreSurReelDuJourCourant)
                             );

     Test(IFET(IL_FAUT(editer_des_fractions)
              ,IL_FAUT(simplifier_les_fractions)
               )
          )
          Bblock
          Test(IFET(IFNE(NumerateurFraction__(NombreSurReelDuJourCourant),OrigineSpatiale)
                   ,IFNE(DenominateurFraction(NombreSurReelDuJourCourant),DenominateurNombreEntier)
                    )
               )
               Bblock
               DEFV(Logical,INIT(poursuivre_la_simplification,VRAI));

               Tant(IL_FAUT(poursuivre_la_simplification))
                    Bblock
                    Test(IFET(IZEQ(REST(NumerateurFraction__(NombreSurReelDuJourCourantSimplifie),DYADIQUE))
                             ,IZEQ(REST(DenominateurFraction(NombreSurReelDuJourCourantSimplifie),DYADIQUE))
                              )
                         )
                         Bblock
                         INITIALISATION_FRACTION(NombreSurReelDuJourCourantSimplifie
                                                ,DIVI(NumerateurFraction__(NombreSurReelDuJourCourantSimplifie),DYADIQUE)
                                                ,DIVI(DenominateurFraction(NombreSurReelDuJourCourantSimplifie),DYADIQUE)
                                                 );
                                        /* Simplification de la fraction 'NombreSurReelDuJourCourant'. En fait, j'ai l'impression    */
                                        /* que la simplification ne sert a rien car, en effet, les numerateurs sont toujours impairs */
                                        /* a cause des 'PRED(DYAD(...))'s et des 'SUCC(DYAD(...))'s qui suivent (donc de la forme    */
                                        /* 2.n+/-1) lorsque la fraction n'est pas entiere. Je laisse cela malgre tout, on ne sait    */
                                        /* jamais...                                                                                 */
                         Eblock
                    ATes
                         Bblock
                         EGAL(poursuivre_la_simplification,FAUX);
                         Eblock
                    ETes
                    Eblock
               ETan
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_la_date))
          Bblock
          Test(IL_FAUT(editer_les_en_tetes))
               Bblock
               CAL2(Prin0("Date="));
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          CAL2(Prin1("%d",JourCourant));

          CAL2(Prin0(" "));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_les_en_tetes))
          Bblock
          CAL2(Prin0("NombreSurReel="));
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IL_FAUT(editer_des_fractions))
          Bblock
          Test(IFGT(DenominateurFraction(NombreSurReelDuJourCourantSimplifie),DenominateurNombreEntier))
               Bblock
               CAL2(Prin2(Cara(chain_Aconcaten3(INTRODUCTION_FORMAT,valeurs_signees,"d/%d"))
                         ,NumerateurFraction__(NombreSurReelDuJourCourantSimplifie)
                         ,DenominateurFraction(NombreSurReelDuJourCourantSimplifie)
                          )
                    );
                                        /* Edition de la fraction irreductible 'NombreSurReelDuJourCourant'.                         */
               Eblock
          ATes
               Bblock
               CAL2(Prin1(Cara(chain_Aconcaten3(INTRODUCTION_FORMAT,valeurs_signees,"d"))
                         ,DIVI(NumerateurFraction__(NombreSurReelDuJourCourantSimplifie)
                              ,DenominateurFraction(NombreSurReelDuJourCourantSimplifie)
                               )
                          )
                    );
                                        /* Edition du nombre entier 'NombreSurReelDuJourCourant'.                                    */
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          CAL2(Prin2(Cara(chain_Aconcaten4(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition))
                    ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                    ,DIVI(FLOT(NumerateurFraction__(NombreSurReelDuJourCourantSimplifie))
                         ,FLOT(DenominateurFraction(NombreSurReelDuJourCourantSimplifie))
                          )
                     )
               );
                                        /* Edition du 'NombreSurReelDuJourCourant' sous forme decimale afin de permettre en sortie   */
                                        /* un tri croissant et numerique...                                                          */
          Eblock
     ETes

     Test(IL_FAUT(editer_les_masses))
          Bblock
          CAL2(Prin0(" "));
          CAL2(Prin2(Cara(chain_Aconcaten4(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition))
                    ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales)
                    ,PUIX(MasseCourante,exposant_des_masses)
                     )
               );
                                        /* Possibilite introduite le 20110309093724 afin de generer des "cascades binomiales" si     */
                                        /* besoin est...                                                                             */
                                        /*                                                                                           */
                                        /* Le 'PUIX(...)' a ete introduit le 20110314132016. On notera alors les associations        */
                                        /* possibles suivantes :                                                                     */
                                        /*                                                                                           */
                                        /*                  exposant=1/1   -->  Rayon de spheres,                                    */
                                        /*                  exposant=1/2   -->  Surface de spheres,                                  */
                                        /*                  exposant=1/3   -->  Volume de spheres.                                   */
                                        /*                                                                                           */
                                        /* ('v $xiirv/$Fnota Debut_listG_CASB_22' par exemple...).                                   */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     CAL2(Prin0("\n"));
                                        /* Mis sous cette forme ici le 20110309093724...                                             */

     RETU_VIDE;
     Eblock

EFonctionV

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

#define   MASSE_A_GAUCHE_(MasseCourante)                                                                                                \
                    MUL2(NEUT(ponderation_barycentrique_des_masses),MasseCourante)
#define   MASSE_AU_CENTRE(MasseCourante)                                                                                                \
                    NEUT(MasseCourante)
#define   MASSE_A_DROITE_(MasseCourante)                                                                                                \
                    MUL2(COMP(ponderation_barycentrique_des_masses),MasseCourante)
                                        /* Procedures introduites le 20110309093724...                                               */
                                        /*                                                                                           */
                                        /* Si M est la masse d'un nombre surreel et 'f' la ponderation des masses, alors les         */
                                        /* masses de ses deux fils sont :                                                            */
                                        /*                                                                                           */
                                        /*                  MasseGauche = f.M                                                        */
                                        /*                  MasseDroite = (1-f).M                                                    */
                                        /*                                                                                           */
                                        /* ou 'f' est a priori dans [0,1]...                                                         */

DEFV(Local,DEFV(Int,INIT(premier_jour,PREMIER_JOUR)));
DEFV(Local,DEFV(Int,INIT(dernier_jour,DERNIER_JOUR)));
                                        /* Definition du calendrier...                                                               */

#define   GENERATION_DES_NOMBRES_SURREELS(Jour,NombreSurReel,MasseCourante)                                                             \
                                        /* L'argument 'MasseCourante' a ete introduit le 20110309093724...                           */ \
                    Bblock                                                                                                              \
                    CALS(GenerationDesNombresSurReels(Jour                                                                              \
                                                     ,NombreSurReel                                                                     \
                                                     ,MasseCourante                                                                     \
                                                     ,valeurs_signees                                                                   \
                                                     ,format_d_edition                                                                  \
                                                     ,nombre_de_decimales                                                               \
                                                      )                                                                                 \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Generation de la filiation d'un nombre surreel...                                         */

BFonctionV

#define   EDITION_D_UN_NOMBRE_SURREEL(Jour,NombreSurReel,MasseCourante)                                                                 \
                                        /* L'argument 'MasseCourante' a ete introduit le 20110309093724...                           */ \
                    Bblock                                                                                                              \
                    CALS(EditionDUnNombreSurReel(Jour                                                                                   \
                                                ,NombreSurReel                                                                          \
                                                ,MasseCourante                                                                          \
                                                ,valeurs_signees                                                                        \
                                                ,format_d_edition                                                                       \
                                                ,nombre_de_decimales                                                                    \
                                                 )                                                                                      \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Edition d'un nombre surreel...                                                            */

DEFV(Local,DEFV(FonctionV,GenerationDesNombresSurReels(JourCourant
                                                      ,NombreSurReelDuJourCourant
                                                      ,MasseCourante
                                                      ,valeurs_signees
                                                      ,format_d_edition
                                                      ,nombre_de_decimales
                                                       )
                )
     )
DEFV(Argument,DEFV(Int,JourCourant));
                                        /* Jour courant dans [premier_jour,dernier_jour].                                            */
DEFV(Argument,DEFV(fractionI,NombreSurReelDuJourCourant));
                                        /* Nombre surreel courant dont on va calculer ici les deux fils "Left_" et "Right".          */
DEFV(Argument,DEFV(Float,MasseCourante));
                                        /* Masse du nombre surreel courant (introduite le 20110309093724).                           */
DEFV(Argument,DEFV(CHAR,POINTERc(valeurs_signees)));
DEFV(Argument,DEFV(CHAR,POINTERc(format_d_edition)));
DEFV(Argument,DEFV(Positive,nombre_de_decimales));
                                        /* Ces trois arguments sont rendus necessaires par le fait que les trois variables           */
                                        /* correspondantes ne peuvent etre definies que dans 'BCommande(...)' car, en effet,         */
                                        /* elles ne sont en general pas definies a partir de constantes (voir en particulier         */
                                        /* 'v $xci/valeurs.03$I INIC'...). Mais etant dans 'BCommande(...)', elles ne sont pas       */
                                        /* vues a l'interieur de 'GenerationDesNombresSurReels(...)', d'ou ce stratageme...          */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     /*..............................................................................................................................*/
     Test(IL_NE_FAUT_PAS(editer_les_filiations))
          Bblock
          EDITION_D_UN_NOMBRE_SURREEL(JourCourant,NombreSurReelDuJourCourant,MASSE_AU_CENTRE(MasseCourante));
                                        /* Edition du nombre surreel courant...                                                      */
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     Test(IFLT(JourCourant,dernier_jour))
                                        /* ATTENTION : on notera le 'IFLT(...)' ci-dessus qui est du au fait que la fonction         */
                                        /* courante 'GenerationDesNombresSurReels(...)' va etre appelee recursivement ci-apres       */
                                        /* avec l'argument 'SUCC(JourCourant)'...                                                    */
          Bblock
          DEFV(fractionI,NombreSurReelDuJourSuivantLeft_);
          DEFV(fractionI,NombreSurReelDuJourSuivantRight);
                                        /* Nombres surreels fils "Left_" et "Right" de 'NombreSurReelDuJourCourant'...               */

          Test(IFEQ(DenominateurFraction(NombreSurReelDuJourCourant),DenominateurNombreEntier))
               Bblock
                                        /* Cas des nombres SurReels extremaux (negatif, positif et evidemment cas particulier de     */
                                        /* l'origine...) :                                                                           */
               Test(IZLT(NumerateurFraction__(NombreSurReelDuJourCourant)))
                    Bblock
                    INITIALISATION_FRACTION(NombreSurReelDuJourSuivantLeft_
                                           ,PRED(NumerateurFraction__(NombreSurReelDuJourCourant))
                                           ,NEUT(DenominateurFraction(NombreSurReelDuJourCourant))
                                            );
                    INITIALISATION_FRACTION(NombreSurReelDuJourSuivantRight
                                           ,SUCC(DYAD(NumerateurFraction__(NombreSurReelDuJourCourant)))
                                           ,NEUT(DYAD(DenominateurFraction(NombreSurReelDuJourCourant)))
                                            );
                                        /* Fils de gauche ("Left_") et de droite ("Right") du nombre SurReel le plus negatif...      */
                    Eblock
               ATes
                    Bblock
                    Test(IZEQ(NumerateurFraction__(NombreSurReelDuJourCourant)))
                         Bblock
                         INITIALISATION_FRACTION(NombreSurReelDuJourSuivantLeft_
                                                ,PRED(NumerateurFraction__(NombreSurReelDuJourCourant))
                                                ,NEUT(DenominateurFraction(NombreSurReelDuJourCourant))
                                                 );
                         INITIALISATION_FRACTION(NombreSurReelDuJourSuivantRight
                                                ,SUCC(NumerateurFraction__(NombreSurReelDuJourCourant))
                                                ,NEUT(DenominateurFraction(NombreSurReelDuJourCourant))
                                                 );
                                        /* Fils de gauche ("Left_") et de droite ("Right") du nombre SurReel 0={O|O}...              */
                         Eblock
                    ATes
                         Bblock
                         Test(IZGT(NumerateurFraction__(NombreSurReelDuJourCourant)))
                              Bblock
                              INITIALISATION_FRACTION(NombreSurReelDuJourSuivantLeft_
                                                     ,PRED(DYAD(NumerateurFraction__(NombreSurReelDuJourCourant)))
                                                     ,NEUT(DYAD(DenominateurFraction(NombreSurReelDuJourCourant)))
                                                      );
                              INITIALISATION_FRACTION(NombreSurReelDuJourSuivantRight
                                                     ,SUCC(NumerateurFraction__(NombreSurReelDuJourCourant))
                                                     ,NEUT(DenominateurFraction(NombreSurReelDuJourCourant))
                                                      );
                              Eblock
                                        /* Fils de gauche ("Left_") et de droite ("Right") du nombre SurReel le plus positif...      */
                         ATes
                              Bblock
                              PRINT_ERREUR("un cas impossible est rencontre");
                              Eblock
                         ETes
                         Eblock
                    ETes
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               INITIALISATION_FRACTION(NombreSurReelDuJourSuivantLeft_
                                      ,PRED(DYAD(NumerateurFraction__(NombreSurReelDuJourCourant)))
                                      ,NEUT(DYAD(DenominateurFraction(NombreSurReelDuJourCourant)))
                                       );
               INITIALISATION_FRACTION(NombreSurReelDuJourSuivantRight
                                      ,SUCC(DYAD(NumerateurFraction__(NombreSurReelDuJourCourant)))
                                      ,NEUT(DYAD(DenominateurFraction(NombreSurReelDuJourCourant)))
                                       );
                                        /* Cas des autres nombres SurReels, c'est-a-dire ceux qui ne sont pas extremaux...           */
               Eblock
          ETes

          Test(IL_FAUT(editer_les_filiations))
               Bblock
               EDITION_D_UN_NOMBRE_SURREEL(NEUT(JourCourant),NombreSurReelDuJourCourant,MASSE_AU_CENTRE(MasseCourante));
                                        /* Edition du nombre surreel courant,                                                        */
               EDITION_D_UN_NOMBRE_SURREEL(SUCC(JourCourant),NombreSurReelDuJourSuivantLeft_,MASSE_A_GAUCHE_(MasseCourante));
                                        /* Et de son fils "Left_"...                                                                 */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          GENERATION_DES_NOMBRES_SURREELS(SUCC(JourCourant),NombreSurReelDuJourSuivantLeft_,MASSE_A_GAUCHE_(MasseCourante));
                                        /* Calcul des deux "fils" du nombre SurReel 'NombreSurReelDuJourSuivantLeft_'...             */

          Test(IL_FAUT(editer_les_filiations))
               Bblock
               EDITION_D_UN_NOMBRE_SURREEL(NEUT(JourCourant),NombreSurReelDuJourCourant,MASSE_AU_CENTRE(MasseCourante));
                                        /* Edition du nombre surreel courant,                                                        */
               EDITION_D_UN_NOMBRE_SURREEL(SUCC(JourCourant),NombreSurReelDuJourSuivantRight,MASSE_A_DROITE_(MasseCourante));
                                        /* Et de son fils "Right"...                                                                 */
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          GENERATION_DES_NOMBRES_SURREELS(SUCC(JourCourant),NombreSurReelDuJourSuivantRight,MASSE_A_DROITE_(MasseCourante));
                                        /* Calcul des deux "fils" du nombre SurReel 'NombreSurReelDuJourSuivantRight'...             */
          Eblock
     ATes
          Bblock
                                        /* Cas ou l'on a genere suffisamment de generations de nombres SurReels...                   */
          Eblock
     ETes

     RETU_VIDE;
     Eblock

#undef    EDITION_D_UN_NOMBRE_SURREEL

EFonctionV

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        G E N E R A T I O N   D E S   P R E M I E R S   N O M B R E S   S U R R E E L S  :                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
#include  xci/valeurs.03.I"
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_I("premier=""p=""D=",premier_jour);
                         GET_ARGUMENT_I("dernier=""d=""A=",dernier_jour);

                         GET_ARGUMENT_L("en_tete=""et=",editer_les_en_tetes);
                         GET_ARGUMENT_L("date=""jour=",editer_la_date);
                         GET_ARGUMENT_L("simplifier=""simp=""irreductibles=""irr=",simplifier_les_fractions);
                         GET_ARGUMENT_L("F=""Q=""nombres_rationnels=""rationnels=""fractions=""fra=",editer_des_fractions);
                         GET_ARGUMENT_N("R=""nombres_decimaux=""decimaux=""dec=",editer_des_fractions);

                         GET_ARGUMENT_L("filiation=""filiations=""fils=",editer_les_filiations);
                         GET_ARGUMENT_N("isole=""isoles=",editer_les_filiations);

                         GET_ARGUMENT_L("editer_masses=""masses=",editer_les_masses);
                         GET_ARGUMENT_F("masse_racine=""masse=",masse_de_la_racine_de_l_arbre);
                         GET_ARGUMENT_F("exposant_masses=""exposant=",exposant_des_masses);
                         GET_ARGUMENT_F("ponderation_masses=""ponderation=",ponderation_barycentrique_des_masses);
                                        /* Arguments introduits le 20110309093724 et completes le 20110314132016 par l'introduction  */
                                        /* de 'exposant_des_masses'...                                                               */

                         PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1;
                         )
                    );

     Test(IFLE(premier_jour,dernier_jour))
                                        /* Validation introduite le 20081109145843...                                                */
          Bblock
          DEFV(Int,INIT(nombre_de_jours_demande,NBRE(premier_jour,dernier_jour)));
          DEFV(Int,INIT(nombre_de_jours_maximal,ADD2(INTE(LO2X(INFINI)),DEUX)));
                                        /* En effet, les denominateurs des 'fractionI' ne peuvent exceder la valeur 'INFINI'. Or     */
                                        /* d'autre part, partant de 'jour=0', pour 'jour=2' (soit une duree de '3'), on rencontre    */
                                        /* des denominateurs '2^1' : l'exposant '1' est egal a la duree '3' moins 'DEUX')...         */

          Test(IL_FAUT(editer_les_masses))
               Bblock
               Test(IFEXff(ponderation_barycentrique_des_masses,COORDONNEE_BARYCENTRIQUE_MINIMALE,COORDONNEE_BARYCENTRIQUE_MAXIMALE))
                    Bblock
                    PRINT_ATTENTION("la ponderation des masses est anormale");
                                        /* Validation introduite le 20110310083645...                                                */
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IFLE(nombre_de_jours_demande,nombre_de_jours_maximal))
                                        /* Validation introduite le 20081109144448...                                                */
               Bblock
               DEFV(fractionI,NombreSurReelOrigine);
               INITIALISATION_FRACTION(NombreSurReelOrigine,OrigineSpatiale,DenominateurNombreEntier);

               GENERATION_DES_NOMBRES_SURREELS(premier_jour,NombreSurReelOrigine,MASSE_AU_CENTRE(masse_de_la_racine_de_l_arbre));
                                        /* Calcul des deux "fils" du nombre SurReel "origine"...                                     */
               Eblock
          ATes
               Bblock
               PRINT_ERREUR("la duree demandee est trop importante");
               CAL1(Prer2("(%d jours sont demandes alors que la capacite entiere ne permet que %d jours)\n"
                         ,nombre_de_jours_demande
                         ,nombre_de_jours_maximal
                          )
                    );
               Eblock
          ETes
          Eblock
     ATes
          Bblock
          PRINT_ERREUR("le dernier jour doit etre posterieur ou identique au premier jour");
          CAL1(Prer2("(le dernier jour (%d) est anterieur au premier jour (%d))\n"
                    ,dernier_jour
                    ,premier_jour
                     )
               );
          Eblock
     ETes

     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.