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