/*************************************************************************************************************************************/
/* */
/* G E N E R A T I O N D ' U N H Y P E R C U B E : */
/* */
/* */
/* Author of '$xtc/hyper_cube.02$c' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20230303174558). */
/* */
/*************************************************************************************************************************************/
#include "INCLUDES.01.I"
extern double log();
extern double pow();
#define BASE \
2
#define EXPOSANT \
3
#define N \
((int)pow((double)BASE,(double)EXPOSANT))
void ConversionBase(nombre,base,exposant)
int nombre;
int base;
int exposant;
{
int diviseur=(int)pow((double)base,(double)(exposant-1));
int NombreCourant=nombre;
int quotient,reste;
int iteration;
for (iteration=1 ; iteration<=exposant ; iteration++)
{
quotient=NombreCourant/diviseur;
reste=NombreCourant%diviseur;
if ((quotient<0) || (quotient >= BASE))
{
printf("\nquotient errone ; %d\n",quotient);
}
else
{
}
printf("%d ",quotient);
NombreCourant=reste;
diviseur=diviseur/BASE;
}
}
int main()
{
int n1,n2;
for (n1=(N-1) ; n1>=0 ; n1--)
{
for (n2=(n1-1) ; n2>=0 ; n2--)
{
double logarithme=log((double)(n1^n2))/log((double)BASE);
if ((int)logarithme == logarithme)
{
ConversionBase(MIN2(n1,n2),BASE,EXPOSANT);
printf(" --o--> ");
ConversionBase(MAX2(n1,n2),BASE,EXPOSANT);
printf("\n");
/* Edition des couples {n1,n2} de sommets connectes de l'hypercube et qui correspondent */
/* aux cas ou 'n1' et 'n2' ne different que d'un seul bit, ce qui se voit en faisant le */
/* ou-exclusif entre eux, puis en regardant si ce dernier est une puissance de 2 (son */
/* logarithme en base 2 est alors un nombre entier...). */
}
else
{
}
}
}
return(0);
}