/*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N I T E R A T I V E D ' U N N O M B R E : */ /* */ /* */ /* Definition : */ /* */ /* Cette commande (inspiree de programmes */ /* tel 'v $xtc/MarchesAleatoires_Pi.01$c' */ /* et donc des travaux de Benoit Cloitre) */ /* transforme iterativement le nombre 'R' */ /* suivant : */ /* */ /* 9 8 7 6 5 4 3 2 1 0 */ /* R.(a .n + a .n + a .n + a .n + a .n + a .n + a .n + a .n + a .n + a .n ) */ /* 9 8 7 6 5 4 3 2 1 0 */ /* */ /* ou 'n' est un entier (qui croit) de meme */ /* que les coefficients 'a(i)'... */ /* */ /* Le 20131117095814, on notera une evidence. */ /* Dans le cas ou tous les a(i) sont nuls sauf */ /* a(1), on peut noter que des nombres differents */ /* peuvent amener a la meme suite de parites. */ /* Ainsi, soit les deux nombres R1 et R3 : */ /* */ /* R1 = 0.12331121332112 (qui ne contient que des {1,2,3}) */ /* R3 = 0.36993363996336 (qui ne contient que des {3,6,9} et qui est le triple de R1) */ /* */ /* Alors les suites : */ /* */ /* R1.(a n + a ) avec a(1)=3 et a(0)=0 */ /* 1 0 */ /* */ /* et : */ /* */ /* R3.(a n + a ) avec a(1)=1 et a(0)=0 */ /* 1 0 */ /* */ /* sont identiques. On notera qu'en cas d'un trop */ /* grand nombre d'iterations cela pourrait ne plus */ /* etre vrai : cela viendrait du fait que R3 ne */ /* serait pas, en flottant, l'exact triple de R1... */ /* */ /* */ /* Author of '$xci/valeurs_RAnB$K' : */ /* */ /* Jean-Francois COLONNA (LACTAMME, 20131115135638). */ /* */ /*************************************************************************************************************************************/ /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* 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 : */ /* */ /*************************************************************************************************************************************/ #include xci/sequence.01.I" #define COEFFICIENT_9 \ FZERO #define COEFFICIENT_8 \ FZERO #define COEFFICIENT_7 \ FZERO #define COEFFICIENT_6 \ FZERO #define COEFFICIENT_5 \ FZERO #define COEFFICIENT_4 \ FZERO #define COEFFICIENT_3 \ FZERO #define COEFFICIENT_2 \ FZERO #define COEFFICIENT_1 \ FU #define COEFFICIENT_0 \ FZERO /* Definition du polynome. */ #define NOMBRE_REEL \ FU \ /* Definition du nombre a transformer... */ #define TRANSFORMER_LE_NOMBRE_REEL_ITERATIVEMENT \ FAUX \ /* Le nombre a transformer doit-il rester constant ('FAUX') ou bien evoluer iterativement */ \ /* ('VRAI') ? Cei a ete introduit le 20131126143437... */ #define EDITER_LA_PARITE_DE_LA_PARTIE_ENTIERE \ VRAI #define MESSAGE_DE_LA_PARITE_0 \ C_0 #define MESSAGE_DE_LA_PARITE_1 \ C_1 /* Faut-il editer les valeurs transformees ('VRAI') ou bien leur parite ('FAUX') ? */ #include xci/valeurs.01.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* M A C R O S U T I L E S : */ /* */ /*************************************************************************************************************************************/ #include xci/valeurs.02.I" /*===================================================================================================================================*/ /*************************************************************************************************************************************/ /* */ /* T R A N S F O R M A T I O N I T E R A T I V E D ' U N N O M B R E : */ /* */ /*************************************************************************************************************************************/ BCommande(nombre_d_arguments,arguments) /*-----------------------------------------------------------------------------------------------------------------------------------*/ Bblock DEFV(Int,INIT(premiere_image,PREMIERE_IMAGE)); /* Numero de la premiere image, */ DEFV(Int,INIT(derniere_image,DERNIERE_IMAGE)); /* Numero de la derniere image. */ DEFV(Int,INIT(numero_d_image,UNDEF)); /* Numero de l'image courante. */ DEFV(Int,INIT(pas_des_images,PAS_DES_IMAGES)); /* Pas de passage d'un numero d'image a une autre. */ DEFV(Float,INIT(coefficient_0,COEFFICIENT_0)); DEFV(Float,INIT(coefficient_1,COEFFICIENT_1)); DEFV(Float,INIT(coefficient_2,COEFFICIENT_2)); DEFV(Float,INIT(coefficient_3,COEFFICIENT_3)); DEFV(Float,INIT(coefficient_4,COEFFICIENT_4)); DEFV(Float,INIT(coefficient_5,COEFFICIENT_5)); DEFV(Float,INIT(coefficient_6,COEFFICIENT_6)); DEFV(Float,INIT(coefficient_7,COEFFICIENT_7)); DEFV(Float,INIT(coefficient_8,COEFFICIENT_8)); DEFV(Float,INIT(coefficient_9,COEFFICIENT_9)); /* Definition du polynome. */ DEFV(Float,INIT(nombre_reel,NOMBRE_REEL)); /* Definition du nombre a transformer... */ DEFV(Logical,INIT(transformer_le_nombre_reel_iterativement,TRANSFORMER_LE_NOMBRE_REEL_ITERATIVEMENT)); /* Le nombre a transformer doit-il rester constant ('FAUX') ou bien evoluer iterativement */ /* ('VRAI') ? Cei a ete introduit le 20131126143437... */ DEFV(Logical,INIT(editer_la_parite_de_la_partie_entiere,EDITER_LA_PARITE_DE_LA_PARTIE_ENTIERE)); DEFV(CHAR,INIC(POINTERc(message_de_la_parite_0),MESSAGE_DE_LA_PARITE_0)); DEFV(CHAR,INIC(POINTERc(message_de_la_parite_1),MESSAGE_DE_LA_PARITE_1)); /* Faut-il editer les valeurs transformees ('VRAI') ou bien leur parite ('FAUX') ? */ #include xci/valeurs.03.I" /*..............................................................................................................................*/ GET_ARGUMENTS_(nombre_d_arguments ,BLOC(GET_ARGUMENT_I("premiere=""p=""D=",premiere_image); GET_ARGUMENT_I("derniere=""d=""A=",derniere_image); GET_ARGUMENT_I("pas=",pas_des_images); GET_ARGUMENT_F("coefficient0=""a0=""c0=""b=",coefficient_0); GET_ARGUMENT_F("coefficient1=""a1=""c1=""a=",coefficient_1); GET_ARGUMENT_F("coefficient2=""a2=""c2=",coefficient_2); GET_ARGUMENT_F("coefficient3=""a3=""c3=",coefficient_3); GET_ARGUMENT_F("coefficient4=""a4=""c4=",coefficient_4); GET_ARGUMENT_F("coefficient5=""a5=""c5=",coefficient_5); GET_ARGUMENT_F("coefficient6=""a6=""c6=",coefficient_6); GET_ARGUMENT_F("coefficient7=""a7=""c7=",coefficient_7); GET_ARGUMENT_F("coefficient8=""a8=""c8=",coefficient_8); GET_ARGUMENT_F("coefficient9=""a9=""c9=",coefficient_9); GET_ARGUMENT_F("nombre=""n=""x=",nombre_reel); GET_ARGUMENT_L("transformer_nombre=""tn=""tx=",transformer_le_nombre_reel_iterativement); /* Arguments introduits le 20131126143437... */ GET_ARGUMENT_L("parite=""par=",editer_la_parite_de_la_partie_entiere); GET_ARGUMENT_N("valeurs=""v=",editer_la_parite_de_la_partie_entiere); GET_ARGUMENT_C("message_parite_0=""p0=",message_de_la_parite_0); GET_ARGUMENT_C("message_parite_1=""p1=",message_de_la_parite_1); PROCESS_ARGUMENTS_DE_PARAMETRAGE_DE_LA_GENERATION_DE_SUITE_DE_VALEURS_1; ) ); Test(IFLE(premiere_image,derniere_image)) Bblock DEFV(Float,INIT(nombre_reel_effectif,nombre_reel)); /* Definition du nombre a transformer... */ DoIn(numero_d_image,premiere_image,derniere_image,pas_des_images) Bblock DEFV(Float,INIT(nombre_reel_transforme ,MUL2(nombre_reel_effectif ,HORNER_1_09(FLOT(numero_d_image) ,coefficient_9 ,coefficient_8 ,coefficient_7 ,coefficient_6 ,coefficient_5 ,coefficient_4 ,coefficient_3 ,coefficient_2 ,coefficient_1 ,coefficient_0 ) ) ) ); /* Le 20131126161422, je note qu'utiliser un polynome de degre strictement superieur a */ /* un introduit du "desordre" dans la suite produite... */ Test(IL_FAUT(transformer_le_nombre_reel_iterativement)) Bblock EGAL(nombre_reel_effectif,DECI(nombre_reel_transforme)); /* Cas ou le nombre reel est transforme iterativement (introduit le 20131126143437). */ /* */ /* Le 20131126161422, je note qu'utiliser cette possibilite introduit du "desordre" dans */ /* la suite produite... */ Eblock ATes Bblock Eblock ETes Test(IL_FAUT(editer_la_parite_de_la_partie_entiere)) Bblock Test(EST_PAIR(INTE(nombre_reel_transforme))) Bblock CAL2(Prin1("%s\n",message_de_la_parite_0)); /* Edition de la parite de la valeur transformee... */ Eblock ATes Bblock CAL2(Prin1("%s\n",message_de_la_parite_1)); /* Edition de la parite de la valeur transformee... */ Eblock ETes Eblock ATes CAL2(Prin2(Cara(chain_Aconcaten5(INTRODUCTION_FORMAT,valeurs_signees,".*",format_d_edition,"\n")) ,NOMBRE_DE_DECIMALES_EFFECTIF(nombre_de_decimales) ,MULTIPLE_DE(ENTIER_FLOTTANT(nombre_reel_transforme)) ) ); /* Edition de la valeur transformee... */ Bblock Eblock ETes Eblock EDoI Eblock ATes Bblock PRINT_ERREUR("la relation d'ordre stricte ('premier < dernier') n'est pas respectee"); Eblock ETes RETU_Commande; Eblock ECommande