Ascii art fractale

Contenu du snippet

Ce code affiche la fractale triangulaire en mode console (ça rend spécial...)

principe : normalement, on découpe le triangle, mais moi, je ne pouvais pas le découper facilement, je suis alors parti d'un petit triangle pour le recopier à coté et en haut, pour former un plus grand triangle, et rappeller la fonction sur ce plus grand triangle...

Source / Exemple :


#include <stdio.h>
#include <stdlib.h>

typedef struct {
	int x, y;
} dim;

void afficher(char **a, dim d){
	int i, j;
	for (j=0;j<d.x;j++){
		printf("_");
	}
	printf("\n");
	for (i=0;i<d.y;i++){
		for (j=0;j<d.x;j++){
			printf("%c", a[i][j]);
		}
		printf("\n");
	}
}

int puissance(int a, int b){
	if (b==0) return 1;
	return a*(puissance(a, b-1));
}

void affichertriangle(char **a, int now, int but, dim d1, dim d){
	if (now!=but){
		int i, j;
		for (i=d.y-d1.y;i<d.y;i++){
			for (j=0;j<d1.x;j++){
				a[i-d1.y][j+d1.x/2]=a[i][j];
				a[i][j+d1.x]=a[i][j];
			}
		}
		d1.x*=2;
		d1.y*=2;
		affichertriangle(a, now+1, but, d1, d);
	}
}

int main(){
	int s;
	scanf("%d", &s);
	char **a;
	int i, j;
	dim d, d1;

	

	d.x=puissance(2, s)*6;
	d.y=puissance(2, s)*3;

	a=(char **)malloc(sizeof(char *)*d.y);
	for (i=0;i<d.y;i++)
		a[i]=(char *)malloc(d.x);

	//remise à 0

	for (i=0;i<d.y;i++){
		for (j=0;j<d.x;j++){
			a[i][j]=' ';
		}
	}

	//triangle de départ

	a[d.y-3][0]=' ';a[d.y-3][1]=' ';a[d.y-3][2]='*';a[d.y-3][3]=' ';a[d.y-3][4]=' ';
	a[d.y-2][0]=' ';a[d.y-2][1]='*';a[d.y-2][2]='*';a[d.y-2][3]='*';a[d.y-2][4]=' ';
	a[d.y-1][0]='*';a[d.y-1][1]='*';a[d.y-1][2]='*';a[d.y-1][3]='*';a[d.y-1][4]='*';

	//des dimentions arbitraires du petit triangle

	d1.x=6;
	d1.y=3;

	affichertriangle(a, 0, s, d1, d);

	afficher(a, d);

	return 1;
}

A voir également

Vous n'êtes pas encore membre ?

inscrivez-vous, c'est gratuit et ça prend moins d'une minute !

Les membres obtiennent plus de réponses que les utilisateurs anonymes.

Le fait d'être membre vous permet d'avoir un suivi détaillé de vos demandes et codes sources.

Le fait d'être membre vous permet d'avoir des options supplémentaires.