/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        FONCTION D'EXPLORATION DE L'ESPACE DES COORDONNEES :                                                                       */
/*                                                                                                                                   */
/*                                                                                                                                   */
/*        Author of '$xrD/universel$K' :                                                                                             */
/*                                                                                                                                   */
/*                    Jean-Francois Colonna (LACTAMME, 19????????????).                                                              */
/*                                                                                                                                   */
/*************************************************************************************************************************************/

#define   coord0    0                                                                                                                   \
                                        /* Rang de la premiere coordonnee.                                                           */
#define   coordN    2                                                                                                                   \
                                        /* Rang de la derniere coordonnee.                                                           */
#define   dimension (coordN - coord0 + BEGIN_AT_0)                                                                                      \
                                        /* Dimension de l'espace physique.                                                           */
#define   coordMIN  0                                                                                                                   \
                                        /* Borne inferieure inclusive des coordonnees.                                               */
#define   logMAX    1                                                                                                                   \
                                        /* Logarithme en base 2 de "coordMAX".                                                       */
#define   coordMAX  ((BIT<<logMAX) - BEGIN_AT_0 + coordMIN)                                                                             \
                                        /* Borne superieure inclusive des coordonnees.                                               */
Int
FONCTION  EXPLORE(COORDONNEES)
DEFV(Argument,DEFV(Int,COORDONNEES[dimension]));
                                        /* Vecteur de coordonnees.                                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     {
     DEFV(Int,INIT(i,UNDEF));
                                        /* Index d'acces aux composantes du vecteur COORDONNEES.                                     */
     DEFV(Int,INIT(fin,UNDEF));
                                        /* Indicateur de fin de l'exploration de l'espace physique.                                  */
     POINTC(COORDONNEES);
     fin = TRUE;
                                        /* A priori c'est la fin de l'exploration.                                                   */
     for (i = coordN ; i >= coord0 ; i--)
          {
          if (COORDONNEES[i] < coordMAX)
               {
               COORDONNEES[i]++;
               fin = FALSE;
                                        /* Non, ce n'est pas la fin.                                                                 */
               break;
               }
          else
               {
               COORDONNEES[i] = coordMIN;
               }
          if (fin == FALSE)
               {
               break;
               }
          }
     if (fin == FALSE)
          {
          EXPLORE(COORDONNEES);
                                        /* Exploration recursive de l'espace physique.                                               */
          }
     }

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        FONCTION D'EXPLORATION DE L'ESPACE DES VALEURS :                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
#define   nombre    (BIT<<(logMAX * dimension))                                                                                         \
                                        /* Dimension de l'espace des valeurs.                                                        */
#define   val0      0                                                                                                                   \
                                        /* Rang de la premiere valeur.                                                               */
#define   valN      (nombre + val0 - BEGIN_AT_0)                                                                                        \
                                        /* Rang de la derniere valeur.                                                               */
#define   valMIN    0                                                                                                                   \
                                        /* Valeur la plus basse possible.                                                            */
#define   valMAX    2                                                                                                                   \
                                        /* Valeur la plus grande possible.                                                           */
Int
FONCTION  GENERE(VALEURS)
DEFV(Argument,DEFV(Int,VALEURS[nombre]));
                                        /* Vecteur des valeurs.                                                                      */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     {
     DEFV(Int,INIT(i,UNDEF));
                                        /* Index d'acces aux composantes du vecteur VALEURS.                                         */
     DEFV(Int,INIT(fin,UNDEF));
                                        /* Indicateur de fin de l'exploration de l'espace des valeurs.                               */
     POINTV(VALEURS);
     fin = TRUE;
                                        /* A priori c'est la fin de l'exploration.                                                   */
     for (i = valN ; i >= val0 ; i--)
          {
          if (VALEURS[i] < valMAX)
               {
               VALEURS[i]++;
               fin = FALSE;
                                        /* Non, ce n'est pas la fin.                                                                 */
               break;
               }
          else
               {
               VALEURS[i] = valMIN;
               }
          if (fin == FALSE)
               {
               break;
               }
          }
     if (fin == FALSE)
          {
          GENERE(VALEURS);
                                        /* Exploration recursive de l'espace des valeurs.                                            */
          }
     }

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        FONCTION D'EDITION DES COORDONNEES :                                                                                       */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Int
FONCTION  POINTC(COORDONNEES)
DEFV(Argument,DEFV(Int,COORDONNEES[dimension]));
                                        /* Vecteur de composantes.                                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     {
     DEFV(Int,INIT(i,UNDEF));
                                        /* Index des composantes du vecteur.                                                         */
     CAL2(Prin0("COORDONNEES :\n"));
     for (i = coord0 ; i <= coordN ; i++)
          {
          CAL2(Prin1(" %d",COORDONNEES[i]));
          }
     }

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        FONCTION D'EDITION DES VALEURS :                                                                                           */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
Int
FONCTION  POINTV(VALEURS)
DEFV(Argument,DEFV(Int,VALEURS[nombre]));
                                        /* Vecteur de composantes.                                                                   */
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     {
     DEFV(Int,INIT(i,UNDEF));
                                        /* Index des composantes du vecteur.                                                         */
     CAL2(Prin0("VALEURS :\n"));
     for (i = val0 ; i <= valN ; i++)
          {
          CAL2(Prin1(" %d",VALEURS[i]));
          }
     }

/*===================================================================================================================================*/
/*************************************************************************************************************************************/
/*                                                                                                                                   */
/*        PROGRAMME PRINCIPAL :                                                                                                      */
/*                                                                                                                                   */
/*************************************************************************************************************************************/
main()
/*-----------------------------------------------------------------------------------------------------------------------------------*/
     {
     DEFV(Int,COORDONNEES[dimension]);
                                        /* Vecteur de composantes.                                                                   */
     DEFV(Int,VALEURS[nombre]);
                                        /* Vecteur de composantes.                                                                   */
     DEFV(Int,INIT(i,UNDEF));
                                        /* Index des composantes du vecteur.                                                         */
     for (i = coord0 ; i <= coordN ; i++)
          {
          COORDONNEES[i] = coordMIN;
          }
     EXPLORE(COORDONNEES);
                                        /* Exploration recursive de l'espace physique.                                               */
     for (i = val0 ; i <= valN ; i++)
          {
          VALEURS[i] = valMIN;
          }
     GENERE(VALEURS);
                                        /* Exploration recursive de l'espace des valeurs.                                            */
     }



Copyright © Jean-François Colonna, 2019-2021.
Copyright © CMAP (Centre de Mathématiques APpliquées) UMR CNRS 7641 / Ecole Polytechnique, 2019-2021.