/*************************************************************************************************************************************/
/* */
/* T E N T A T I V E D E */
/* S U R J E C T I O N F R A C T A L E D E [ 0 , 1 ] D A N S [ 0 , 1 ] x [ 0 , 1 ] x [ 0 , 1 ] D E P E A N O : */
/* */
/* */
/* Author of '$xtc/Peano_SurjectionFractale.13$vv$c' : */
/* */
/* Jean-Francois COLONNA (LACTAMME, 20220401113541). */
/* */
/*************************************************************************************************************************************/
#include "INCLUDES.01.I"
extern double pow();
#define BASE \
4
#define BASEm1 \
(BASE-1)
int Parametre_t[]={0,0,0,0,0,0,0,0,0};
#define INDEX_0 \
1
#define INDEXATION(vecteur,index) \
(vecteur[MAX2(index,INDEX_0)-INDEX_0])
#define N \
(sizeof(Parametre_t)/sizeof(int))
#define Nr \
(N/BASEm1)
#define ALL \
((int)pow((double)BASE,(double)N))
int editer_04=VRAI;
#define EDITER_04(print) \
{ \
if (editer_04 == VRAI) \
{ \
print; \
} \
else \
{ \
} \
} \
/* Edition conditionnelle en base 04. */
#define dSELECTION \
BASEm1
#define SELECTION(DCoordonnee,somme) \
{ \
int reste=somme % dSELECTION; \
/* Le 20220405153522 je note un grave probleme : par defaut le reste est calcule avec un */ \
/* diviseur egal a 4-1=3. Les restes possibles sont donc {0,1,2} et sont donc en nombre */ \
/* impair. Et donc les deux instructions : */ \
/* */ \
/* DCoordonnee = Dparametre; */ \
/* */ \
/* et : */ \
/* */ \
/* DCoordonnee = BASEm1-Dparametre; */ \
/* */ \
/* ne seront pas en nombre egal (a priori deux fois plus de la premiere que de la seconde) ! */ \
switch (reste) \
{ \
case 0: \
case 2: \
{ \
DCoordonnee = Dparametre; \
break; \
} \
default: \
{ \
DCoordonnee = BASEm1-Dparametre; \
} \
} \
}
#define CONVERSION(titre,variable,liste,borne) \
{ \
int n; \
double puissance=1.0; \
\
variable=0.0; \
\
for (n=INDEX_0 ; n <= borne ; n++) \
{ \
puissance = puissance / ((double)BASE); \
variable = variable + (((double)INDEXATION(liste,n))*puissance); \
} \
\
printf("%s%f\n",titre,variable); \
} \
/* Conversion de la base 4 vers la base 10. */
void Surjection(parametre)
int parametre[];
{
double t;
int Coordonnee_x[Nr];
double x;
int Coordonnee_y[Nr];
double y;
int Coordonnee_z[Nr];
double z;
int n;
EDITER_04(printf("\n"););
EDITER_04(printf("t=0.{"););
for (n=INDEX_0 ; n <= N ; n++)
{
if ((INDEXATION(parametre,n) >= 0) && (INDEXATION(parametre,n) < BASE))
{
EDITER_04(printf("%d",INDEXATION(parametre,n)););
}
else
{
printf("Le chiffre %d de rang %d n'est pas dans [0,%d].\n",INDEXATION(parametre,n),n-INDEX_0,BASEm1);
}
}
EDITER_04(printf("}\n"););
for (n=INDEX_0 ; n <= (Nr) ; n++)
{
int DCoordonnee_x;
int DCoordonnee_y;
int DCoordonnee_z;
if (n >= (INDEX_0+0))
/* Question : "+0" ou autre chose ? */
{
int somme_x=0;
int Dparametre=INDEXATION(parametre,(BASEm1*n)-2);
int p;
for (p=INDEX_0 ; p < n ; p++)
{
somme_x = somme_x + INDEXATION(parametre,(BASEm1*p)-0);
}
SELECTION(DCoordonnee_x,somme_x);
}
else
{
DCoordonnee_x = INDEXATION(parametre,INDEX_0);
}
INDEXATION(Coordonnee_x,n) = DCoordonnee_x;
if (n >= (INDEX_0+0))
/* Question : "+0" ou autre chose ? */
{
int somme_y=0;
int Dparametre=INDEXATION(parametre,(BASEm1*n)-1);
int p;
for (p=INDEX_0 ; p < n ; p++)
{
somme_y = somme_y + INDEXATION(parametre,(BASEm1*p)-1);
}
SELECTION(DCoordonnee_y,somme_y);
}
else
{
DCoordonnee_y = INDEXATION(parametre,INDEX_0);
}
INDEXATION(Coordonnee_y,n) = DCoordonnee_y;
if (n >= (INDEX_0+0))
/* Question : "+0" ou autre chose ? */
{
int somme_z=0;
int Dparametre=INDEXATION(parametre,(BASEm1*n)-0);
int p;
for (p=INDEX_0 ; p < n ; p++)
{
somme_z = somme_z + INDEXATION(parametre,(BASEm1*p)-2);
}
SELECTION(DCoordonnee_z,somme_z);
}
else
{
DCoordonnee_z = INDEXATION(parametre,INDEX_0);
}
INDEXATION(Coordonnee_z,n) = DCoordonnee_z;
}
if (editer_04 == VRAI)
{
EDITER_04(printf("x=0.{"););
for (n=INDEX_0 ; n <= (Nr) ; n++)
{
EDITER_04(printf("%d ",INDEXATION(Coordonnee_x,n)););
}
EDITER_04(printf("}\n"););
EDITER_04(printf("y=0.{"););
for (n=INDEX_0 ; n <= (Nr) ; n++)
{
EDITER_04(printf(" %d ",INDEXATION(Coordonnee_y,n)););
}
EDITER_04(printf("}\n"););
EDITER_04(printf("z=0.{"););
for (n=INDEX_0 ; n <= (Nr) ; n++)
{
EDITER_04(printf(" %d",INDEXATION(Coordonnee_z,n)););
}
EDITER_04(printf("}\n"););
}
else
{
CONVERSION("t=",t,parametre,N);
CONVERSION("x(t)=",x,Coordonnee_x,Nr);
CONVERSION("y(t)=",y,Coordonnee_y,Nr);
CONVERSION("z(t)=",z,Coordonnee_z,Nr);
}
return;
}
void main()
{
int i1;
if ((N%BASEm1) != 0)
{
printf("ERREUR : la liste 't' a un nombre incorrect d'elements.\n\n");
}
else
{
}
for (i1=1 ; i1 <= ALL ; i1++)
{
int i2;
int retenue=1;
Surjection(Parametre_t);
for (i2=(N-1) ; i2 >= 0 ; i2--)
{
Parametre_t[i2] = Parametre_t[i2] + retenue;
/* Incrementation du parametre 't'... */
if (Parametre_t[i2] == BASE)
{
Parametre_t[i2] = 0;
retenue = 1;
}
else
{
retenue = 0;
}
}
}
}