/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P T A G E   D E S   B I T S   0   E T   1  :                                                                         */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xcg/CompteBits$vv$K' :                                                                                         */
/*                                                                                                                                   */
/*                    Jean-Francois COLONNA (LACTAMME, 20130627090714).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        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   FORCER_LA_LONGUEUR_DU_FICHIER                                                                                                 \
                    FAUX
#define   LONGUEUR_FORCEE_DU_FICHIER                                                                                                    \
                    UN
                                        /* Afin d'outrepasser 'GetcharT(...)' si besoin est...                                       */

#define   EDITER_LE_NOMBRE_DE_BITS_0_                                                                                                   \
                    FAUX
#define   EDITER_LE_NOMBRE_DE_BITS__1                                                                                                   \
                    FAUX
#define   EDITER_LE_NOMBRE_DE_BITS_01                                                                                                   \
                    FAUX
#define   EDITER_LA_FRACTION_DE_BITS_0_                                                                                                 \
                    VRAI
#define   EDITER_LA_FRACTION_DE_BITS__1                                                                                                 \
                    FAUX
#define   EDITER_LES_MESSAGES_D_EN_TETE                                                                                                 \
                    VRAI
                                        /* Que faut-il editer ?                                                                      */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        M A C R O S   U T I L E S  :                                                                                               */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   EDITER_UNE_VALEUR(valeur,editer_cette_valeur,message_d_en_tete,format)                                                        \
                    Bblock                                                                                                              \
                    Test(IL_FAUT(editer_cette_valeur))                                                                                  \
                         Bblock                                                                                                         \
                         Test(IL_FAUT(editer_les_messages_d_en_tete))                                                                   \
                              Bblock                                                                                                    \
                              CAL3(Prme1("%s = ",message_d_en_tete));                                                                   \
                              Eblock                                                                                                    \
                         ATes                                                                                                           \
                              Bblock                                                                                                    \
                              Eblock                                                                                                    \
                         ETes                                                                                                           \
                                                                                                                                        \
                         CAL3(Prme1(format,valeur));                                                                                    \
                         CALS(Fsauts_de_lignes(UN));                                                                                    \
                         Eblock                                                                                                         \
                    ATes                                                                                                                \
                         Bblock                                                                                                         \
                         Eblock                                                                                                         \
                    ETes                                                                                                                \
                    Eblock                                                                                                              \
                                        /* Procedure d'edition conditionnelle (introduite le 20130627131410).                        */

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        C O M P T A G E   D E S   B I T S   0   E T   1  :                                                                         */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
BCommande(nombre_d_arguments,arguments)
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     Bblock
     DEFV(Logical,INIT(forcer_la_longueur_du_fichier,FORCER_LA_LONGUEUR_DU_FICHIER));
     DEFV(Positive,INIT(longueur_forcee_du_fichier,LONGUEUR_FORCEE_DU_FICHIER));
     DEFV(Positive,INIT(nombre_de_caracteres_recuperes,ZERO));
     DEFV(Logical,INIT(boucler_sur_le_fichier,VRAI));
                                        /* Afin d'outrepasser 'GetcharT(...)' si besoin est...                                       */

     DEFV(Logical,INIT(editer_le_nombre_de_bits_0_,EDITER_LE_NOMBRE_DE_BITS_0_));
     DEFV(Logical,INIT(editer_le_nombre_de_bits__1,EDITER_LE_NOMBRE_DE_BITS__1));
     DEFV(Logical,INIT(editer_le_nombre_de_bits_01,EDITER_LE_NOMBRE_DE_BITS_01));
     DEFV(Logical,INIT(editer_la_fraction_de_bits_0_,EDITER_LA_FRACTION_DE_BITS_0_));
     DEFV(Logical,INIT(editer_la_fraction_de_bits__1,EDITER_LA_FRACTION_DE_BITS__1));
     DEFV(Logical,INIT(editer_les_messages_d_en_tete,EDITER_LES_MESSAGES_D_EN_TETE));
                                        /* Que faut-il editer ?                                                                      */

     DEFV(Positive,INIT(compteur_des_bits_0_,ZERO));
     DEFV(Positive,INIT(compteur_des_bits__1,ZERO));
     DEFV(Positive,INIT(compteur_des_bits_01,ZERO));
                                        /* Differents compteurs...                                                                   */
     /*..............................................................................................................................*/
     GET_ARGUMENTS_(nombre_d_arguments
                   ,BLOC(GET_ARGUMENT_L("forcer_longueur=""forcer=""fl=",forcer_la_longueur_du_fichier);
                         GET_ARGUMENT_I("longueur_fichier=""longueur=""lf=",longueur_forcee_du_fichier);

                         GET_ARGUMENT_L("editer_0=""e0=",editer_le_nombre_de_bits_0_);
                         GET_ARGUMENT_L("editer_1=""e1=",editer_le_nombre_de_bits__1);
                         GET_ARGUMENT_L("editer_01=""e01=",editer_le_nombre_de_bits_01);
                         GET_ARGUMENT_L("editer_fraction_0=""ef0=",editer_la_fraction_de_bits_0_);
                         GET_ARGUMENT_L("editer_fraction_1=""ef1=",editer_la_fraction_de_bits__1);
                         GET_ARGUMENT_L("messages=""message=""Men_tete=",editer_les_messages_d_en_tete);
                         )
                    );

     Tant(IL_FAUT(boucler_sur_le_fichier))
          Bblock
          DEFV(Char,INIT(caractere_courant,Getchar()));
          DEFV(CHAR,INIT(caractere_courant_non_signe,caractere_courant));
                                        /* Caractere courant de l'entree courante...                                                 */

          INCR(nombre_de_caracteres_recuperes,I);
                                        /* Le comptage doit avoir lieu avant le test 'PROBLEMES' ci-dessous si l'on veut que         */
                                        /* test d'arret portant sur 'nombre_de_caracteres_recuperes' fonctionne correctement...      */

          Test(IFOU(IFET(IL_NE_FAUT_PAS(forcer_la_longueur_du_fichier)
                        ,IFNE(caractere_courant,PROBLEMES)
                         )
                   ,IL_FAUT(forcer_la_longueur_du_fichier)
                    )
               )
               Bblock

               Repe(NBITOC)
                    Bblock
                    DEFV(Char,INIT(bit_courant,ETLO(caractere_courant_non_signe,BIT)));

                    INCR(compteur_des_bits_0_,COND(IFEQ(bit_courant,ZERO),I,ZERO));
                    INCR(compteur_des_bits__1,COND(IFEQ(bit_courant,UN),I,ZERO));
                    INCR(compteur_des_bits_01,I);
                                        /* Differents comptages...                                                                   */

                    EGAL(caractere_courant_non_signe,SLRS(caractere_courant_non_signe,BIT));
                                        /* Decalage du caractere courant...                                                          */
                    Eblock
               ERep
               Eblock
          ATes
               Bblock
               Eblock
          ETes

          Test(IFOU(IFET(IL_NE_FAUT_PAS(forcer_la_longueur_du_fichier)
                        ,IFEQ(caractere_courant,PROBLEMES)
                         )
                   ,IFET(IL_FAUT(forcer_la_longueur_du_fichier)
                        ,IFGE(nombre_de_caracteres_recuperes,longueur_forcee_du_fichier)
                         )
                    )
               )
               Bblock
               EGAL(boucler_sur_le_fichier,FAUX);
                                        /* On arrete lorsque l'on a recupere tout ce l'on souhaitait...                              */
               Eblock
          ATes
               Bblock
               Eblock
          ETes
          Eblock
     ETan

     Test(IFNE(compteur_des_bits_01,ADD2(compteur_des_bits_0_,compteur_des_bits__1)))
          Bblock
          PRINT_ERREUR("le comptage des bits est incoherents");
          Eblock
     ATes
          Bblock
          Eblock
     ETes

     EDITER_UNE_VALEUR(compteur_des_bits_0_,editer_le_nombre_de_bits_0_,"NombreBits_0","%d");
     EDITER_UNE_VALEUR(compteur_des_bits__1,editer_le_nombre_de_bits__1,"NombreBits_1","%d");
     EDITER_UNE_VALEUR(compteur_des_bits_01,editer_le_nombre_de_bits_01,"NombreBits_01","%d");

     EDITER_UNE_VALEUR(DIVI(FLOT(compteur_des_bits_0_),FLOT(compteur_des_bits_01))
                      ,editer_la_fraction_de_bits_0_
                      ,"FractionBits_0"
                      ,"%f"
                       );
     EDITER_UNE_VALEUR(DIVI(FLOT(compteur_des_bits__1),FLOT(compteur_des_bits_01))
                      ,editer_la_fraction_de_bits__1
                      ,"FractionBits_1"
                      ,"%f"
                       );

     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.