/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M B I N A I S O N   U N I V E R S E L L E   V A R I A B L E   D E   D E U X   I M A G E S   F L O T T A N T E S  :     */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Definition :                                                                                                               */
/*                                                                                                                                   */
/*                    Cette commande genere une image                                                                                */
/*                  dont le nom est le premier argument                                                                              */
/*                  d'appel ; elle est le resultat de                                                                                */
/*                  la combinaison universelle variable                                                                              */
/*                  des deux images Arguments.                                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xci/CombinaisonUniverselleVariable.01$K' :                                                                     */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20181118120434).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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  :                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   GENERER_LES_GET_ARGUMENTS_DE_CONTROLE_DE_L_ARITHMETIQUE_ETENDUE_DES_NOMBRES_FLOTTANTS
                                        /* Introduit le 20191101103844 pour 'MULH24(...)'...                                         */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        F I C H I E R S   D ' I N C L U D E S  :                                                                                   */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#include  INCLUDES_BASE
#include  image_image_IMAGESF_EXT

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        P A R A M E T R E S  :                                                                                                     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   CALCULER_LA_PUISSANCE_2_PUISSANCE_N_D_UNE_IMAGE_PLUTOT_QU_UN_PRODUIT_DE_DEUX                                                  \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') calculer plutot le "carre" d'une image.        */
#define   CALCULER_LA_PUISSANCE_N_PLUTOT_QUE_LA_PUISSANCE_2_PUISSANCE_N                                                                 \
                    FAUX                                                                                                                \
                                        /* Indique s'il faut en fait calculer une puissance ('VRAI') plutot qu'un "carre" ('FAUX').  */
#define   NOMBRE_D_ITERATIONS_DE_LA_PUISSANCE                                                                                           \
                    UN                                                                                                                  \
                                        /* Soit N le nombre d'iterations de la puissance ; deux cas se presentent alors :            */ \
                                        /*                                                                                           */ \
                                        /*        IL_NE_FAUT_PAS(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N)      */ \
                                        /*                                      L'image Argument est elevee a la puissance 2^N.      */ \
                                        /*                                                                                           */ \
                                        /*        IL_FAUT(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N)             */ \
                                        /*                                      L'image Argument est elevee a la puissance N.        */ \
                                        /*                                                                                           */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   COMBINAISON_UNIVERSELLE_VARIABLE(imageR,imageA1,imageA2)                                                                      \
                    Bblock                                                                                                              \
                    CALS(IFcombinaison_universelle_variable(imageR                                                                      \
                                                           ,imageA1                                                                     \
                                                           ,imageA2                                                                     \
                                                           ,image____ADD2                                                               \
                                                           ,image____SOUS                                                               \
                                                           ,image____MUL2                                                               \
                                                           ,image____DIVZ                                                               \
                                                           ,image____MIN2                                                               \
                                                           ,image____MAX2                                                               \
                                                           ,image__MINMAX                                                               \
                                                           ,image__MAXMIN                                                               \
                                                           ,image____MOYE                                                               \
                                                           ,image____MOYZ                                                               \
                                                           ,image__MOYZSI                                                               \
                                                           ,image____MOYQ                                                               \
                                                           ,image__MOYQSI                                                               \
                                                           ,image____MOYH                                                               \
                                                           ,image___SPUIX                                                               \
                                                           ,image____ATAN                                                               \
                                                           ,image__MULH24                                                               \
                                                            )                                                                           \
                         );                                                                                                             \
                    Eblock                                                                                                              \
                                        /* Combinaison universelle variable...                                                       */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M B I N A I S O N   U N I V E R S E L L E   V A R I A B L E   D E   D E U X   I M A G E S   F L O T T A N T E S  :     */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(CHAR,INIC(POINTERc(nom_imageR),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA1),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_imageA2),NOM_PIPE));

     DEFV(CHAR,INIC(POINTERc(nom_image____ADD2),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____SOUS),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MUL2),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____DIVZ),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MIN2),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MAX2),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image__MINMAX),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image__MAXMIN),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MOYE),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MOYZ),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image__MOYZSI),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MOYQ),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image__MOYQSI),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____MOYH),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image___SPUIX),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image____ATAN),NOM_PIPE));
     DEFV(CHAR,INIC(POINTERc(nom_image__MULH24),NOM_PIPE));

     DEFV(Logical,INIT(calculer_la_puissance_2_puissance_N_d_une_image_plutot_qu_un_produit_de_deux
                      ,CALCULER_LA_PUISSANCE_2_PUISSANCE_N_D_UNE_IMAGE_PLUTOT_QU_UN_PRODUIT_DE_DEUX
                       )
          );
                                        /* Indique s'il faut ('VRAI') ou pas ('FAUX') calculer plutot le "carre" d'une image.        */
     DEFV(Logical,INIT(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N
                      ,CALCULER_LA_PUISSANCE_N_PLUTOT_QUE_LA_PUISSANCE_2_PUISSANCE_N
                       )
          );
                                        /* Indique s'il faut en fait calculer une puissance ('VRAI') plutot qu'un "carre" ('FAUX').  */
     DEFV(Positive,INIT(nombre_d_iterations_de_la_puissance,NOMBRE_D_ITERATIONS_DE_LA_PUISSANCE));
                                        /* Soit N le nombre d'iterations de la puissance ; deux cas se presentent alors :            */
                                        /*                                                                                           */
                                        /*        IL_NE_FAUT_PAS(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N)      */
                                        /*                                      L'image Argument est elevee a la puissance 2^N.      */
                                        /*                                                                                           */
                                        /*        IL_FAUT(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N)             */
                                        /*                                      L'image Argument est elevee a la puissance N.        */
                                        /*                                                                                           */
     /*..............................................................................................................................*/
     GET_ARGUMENTSi(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_C("imageA1=""A1=""imageA=""A=",nom_imageA1);
                         GET_ARGUMENT_C("imageA2=""A2=",nom_imageA2);
                         GET_ARGUMENT_C("imageR=""R=",nom_imageR);

                         GET_ARGUMENT_C("pADD2=",nom_image____ADD2);
                         GET_ARGUMENT_C("pSOUS=",nom_image____SOUS);
                         GET_ARGUMENT_C("pMUL2=",nom_image____MUL2);
                         GET_ARGUMENT_C("pDIVZ=",nom_image____DIVZ);
                         GET_ARGUMENT_C("pMIN2=",nom_image____MIN2);
                         GET_ARGUMENT_C("pMAX2=",nom_image____MAX2);
                         GET_ARGUMENT_C("pMINMAX=",nom_image__MINMAX);
                         GET_ARGUMENT_C("pMAXMIN=",nom_image__MAXMIN);
                         GET_ARGUMENT_C("pMOYE=",nom_image____MOYE);
                         GET_ARGUMENT_C("pMOYZ=",nom_image____MOYZ);
                         GET_ARGUMENT_C("pMOYZSI=",nom_image__MOYZSI);
                         GET_ARGUMENT_C("pMOYQ=",nom_image____MOYQ);
                         GET_ARGUMENT_C("pMOYQSI=",nom_image__MOYQSI);
                         GET_ARGUMENT_C("pMOYH=",nom_image____MOYH);
                         GET_ARGUMENT_C("pSPUIX=",nom_image___SPUIX);
                         GET_ARGUMENT_C("pATAN=",nom_image____ATAN);
                         GET_ARGUMENT_C("pMULH24=",nom_image__MULH24);
                                        /* Le 20181121152353, l'entree du nom des images de Ponderation a ete precede d'un "p"       */
                                        /* (ainsi, par exemple, "ADD2=" est devenu "pADD2=") afin de faciliter leur recuperation     */
                                        /* automatique (comme dans 'v $xiirv/.HORN.11.2.$U .xci.ProduitHorner_2_04.01'pour ce qui    */
                                        /* est du programme 'v $xci/ProduitHorner_2_04.01$K a44=' par exemple)...                    */

                         GET_ARGUMENT_L("carre_image=""ci=""c=""exponentiation_image=""expi="
                                       ,calculer_la_puissance_2_puissance_N_d_une_image_plutot_qu_un_produit_de_deux
                                        );
                         GET_ARGUMENT_N("produit_images=""pi=""p="
                                       ,calculer_la_puissance_2_puissance_N_d_une_image_plutot_qu_un_produit_de_deux
                                        );
                         PROCESS_ARGUMENT_L("puissance_image=""puis="
                                           ,calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N
                                           ,BLOC(VIDE;)
                                           ,BLOC(
                                                 Bblock
                                                 EGAL(calculer_la_puissance_2_puissance_N_d_une_image_plutot_qu_un_produit_de_deux
                                                     ,VRAI
                                                      );
                                        /* Cette argument est force a priori...                                                      */
                                                 Eblock
                                                 )
                                            );
                         GET_ARGUMENT_I("iterations=""nombre_carres=""nombre=""n=",nombre_d_iterations_de_la_puissance);
                         PROCESS_ARGUMENT_I("exposant=""exp="
                                           ,nombre_d_iterations_de_la_puissance
                                           ,BLOC(VIDE;)
                                           ,BLOC(
                                                 Bblock
                                                 Test(IL_FAUT(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N))
                                                      Bblock
                                                      Eblock
                                                 ATes
                                                      Bblock
                                                      Test(IZGT(nombre_d_iterations_de_la_puissance))
                                                           Bblock
                                                           Eblock
                                                      ATes
                                                           Bblock
                                                           PRINT_ATTENTION("l'exposant est negatif ou nul");

                                                           EGAL(nombre_d_iterations_de_la_puissance
                                                               ,NOMBRE_D_ITERATIONS_DE_LA_PUISSANCE
                                                                );

                                                           CAL1(Prer1("(la valeur par defaut (%d) est forcee)\n"
                                                                     ,nombre_d_iterations_de_la_puissance
                                                                      )
                                                                );
                                                           Eblock
                                                      ETes

                                                      EGAL(nombre_d_iterations_de_la_puissance
                                                          ,INTE(LO2X(nombre_d_iterations_de_la_puissance))
                                                           );
                                        /* On notera qu'evidemment, la valeur de 'LO2X(...)' est rarement entiere...                 */
                                                      Eblock
                                                 ETes
                                                 Eblock
                                                 )
                                            );
                         )
                    );

     CALi(IFinitialisation(IFmageR,FZERO));
                                        /* Initialisation de l'image Resultat.                                                       */

     begin_nouveau_block
          Bblock
          BDEFV(imageF,image____ADD2);
          BDEFV(imageF,image____SOUS);
          BDEFV(imageF,image____MUL2);
          BDEFV(imageF,image____DIVZ);
          BDEFV(imageF,image____MIN2);
          BDEFV(imageF,image____MAX2);
          BDEFV(imageF,image__MINMAX);
          BDEFV(imageF,image__MAXMIN);
          BDEFV(imageF,image____MOYE);
          BDEFV(imageF,image____MOYZ);
          BDEFV(imageF,image__MOYZSI);
          BDEFV(imageF,image____MOYQ);
          BDEFV(imageF,image__MOYQSI);
          BDEFV(imageF,image____MOYH);
          BDEFV(imageF,image___SPUIX);
          BDEFV(imageF,image____ATAN);
          BDEFV(imageF,image__MULH24);

          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____ADD2,nom_image____ADD2,NOM_PIPE,FU);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____SOUS,nom_image____SOUS,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MUL2,nom_image____MUL2,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____DIVZ,nom_image____DIVZ,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MIN2,nom_image____MIN2,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MAX2,nom_image____MAX2,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image__MINMAX,nom_image__MINMAX,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image__MAXMIN,nom_image__MAXMIN,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MOYE,nom_image____MOYE,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MOYZ,nom_image____MOYZ,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image__MOYZSI,nom_image__MOYZSI,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MOYQ,nom_image____MOYQ,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image__MOYQSI,nom_image__MOYQSI,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____MOYH,nom_image____MOYH,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image___SPUIX,nom_image___SPUIX,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image____ATAN,nom_image____ATAN,NOM_PIPE,FZERO);
          CHARGEMENT_D_UNE_IMAGE_FLOTTANTE_OU_INITIALISATION_EN_CAS_D_ABSENCE(image__MULH24,nom_image__MULH24,NOM_PIPE,FZERO);

          Test(IL_NE_FAUT_PAS(calculer_la_puissance_2_puissance_N_d_une_image_plutot_qu_un_produit_de_deux))
               Bblock
               Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA1,nom_imageA1))))
                    Bblock
                                        /* Chargement de la premiere image Argument.                                                 */
                    Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageA2,nom_imageA2))))
                         Bblock
                                        /* Chargement de la deuxieme image Argument.                                                 */
                         CALS(COMBINAISON_UNIVERSELLE_VARIABLE(IFmageR
                                                              ,IFmageA1
                                                              ,IFmageA2
                                                               )
                              );
                                        /* Et produit des deux images arguments 'ImageA1' et 'ImageA2'.                              */

                         CALi(IupdateF_image(nom_imageR,IFmageR));
                         Eblock
                    ATes
                         Bblock
                         Test__CODE_ERREUR__ERREUR07;
                         Eblock
                    ETes
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               Eblock
          ATes
               Bblock
               Test(IFNE_chaine(nom_imageA2,NOM_PIPE))
                    Bblock
                    PRINT_ATTENTION("lors du calcul du carre d'une image, un seul nom doit etre donne");
                    Eblock
               ATes
                    Bblock
                    Eblock
               ETes

               Test(PAS_D_ERREUR(CODE_ERROR(IloadF_image(IFmageR,nom_imageA1))))
                    Bblock
                                        /* Chargement de l'image Argument unique.                                                    */
                    Test(IL_FAUT(calculer_la_puissance_N_plutot_que_la_puissance_2_puissance_N))
                         Bblock
                         CALS(IFmove(IFmageA1,IFmageR));
                         CALS(IFinitialisation(IFmageR,FU));

                         Repe(nombre_d_iterations_de_la_puissance)
                              Bblock
                              CALS(COMBINAISON_UNIVERSELLE_VARIABLE(IFmageR
                                                                   ,IFmageR
                                                                   ,IFmageA1
                                                                    )
                                   );
                                        /* Elevation a la puissance N de l'image Argument unique.                                    */
                              Eblock
                         ERep
                         Eblock
                    ATes
                         Bblock
                         Repe(NEUT(nombre_d_iterations_de_la_puissance))
                              Bblock
                              CALS(IFmove(IFmageA1,IFmageR));

                              CALS(COMBINAISON_UNIVERSELLE_VARIABLE(IFmageR
                                                                   ,IFmageA1
                                                                   ,IFmageA1
                                                                    )
                                   );
                                        /* Elevation a la puissance 2^N de l'image Argument unique.                                  */
                              Eblock
                         ERep
                         Eblock
                    ETes

                    CALi(IupdateF_image(nom_imageR,IFmageR));
                    Eblock
               ATes
                    Bblock
                    Test__CODE_ERREUR__ERREUR07;
                    Eblock
               ETes
               Eblock
          ETes

          EDEFV(imageF,image__MULH24);
          EDEFV(imageF,image____ATAN);
          EDEFV(imageF,image___SPUIX);
          EDEFV(imageF,image____MOYH);
          EDEFV(imageF,image__MOYQSI);
          EDEFV(imageF,image____MOYQ);
          EDEFV(imageF,image__MOYZSI);
          EDEFV(imageF,image____MOYZ);
          EDEFV(imageF,image____MOYE);
          EDEFV(imageF,image__MAXMIN);
          EDEFV(imageF,image__MINMAX);
          EDEFV(imageF,image____MAX2);
          EDEFV(imageF,image____MIN2);
          EDEFV(imageF,image____DIVZ);
          EDEFV(imageF,image____MUL2);
          EDEFV(imageF,image____SOUS);
          EDEFV(imageF,image____ADD2);
          Eblock
     end_nouveau_block

     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.