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