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