C: creazione di un frattale in modo ricorsivo

Pubblicità

Russosalv

Nuovo Utente
Messaggi
1
Reazioni
0
Punteggio
24
salve ragazzi,
vi scrivo il mio problema,
avrei questa traccia:
Algoritmo per la costruzione di un frattale. Si consideri un array 2D nxn, con n=32,
in cui ogni casella può essere bianca (rappresentata da uno spazio ‘ ‘) o nera
(rappresentata da una ’X’). All’inizio l’array è costituito solo da caselle nere.
L’algoritmo esamina m=6 volte la scacchiera. Durante ogni passo aggiorna lo stato di
tutte le caselle usando un criterio di suddivisione nel seguente modo: al primo passo
l’array 2D viene visto come costituito da 4 blocchi, ognuno di 16x16 caselle; al
secondo passo, ogni blocco di 16x16 è visto come costituito da 4 blocchi di 8x8
caselle; e così via. La regola di suddivisione è la seguente: quando un blocco
‘grande’ nero viene suddiviso in 4 blocchi ‘più piccoli’ allora tre blocchi ‘piccoli’
rimangono neri e il blocco piccolo in alto a destra diventa bianco; quando un blocco
‘grande’ bianco viene suddiviso in 4 blocchi ‘più piccoli’ allora tutti i blocchi
‘piccoli’ rimangono bianchi. La figura mostra i primi tre passi dell’algoritmo, nel
caso n=16.

io avrei provato in questo modo:

void frattale_ric(char array[N][N],int ciclo)
{
int M,i=0,j;

M=N/((int)pow(2,ciclo));
j=M;
while(i<N)
{
cerca_in_linea(array,i,j,M);
j=M;
i=(i+(2*M));
}
printf("\n\t\t\tIterazione %d\n\n",ciclo+1);
stampa_array(array,N);
system("PAUSE");
system("cls");
if(M>1)
frattale_ric(array,(ciclo+1));
}


void cerca_in_linea(char array[N][N],int i,int j,int M)
{
while(j<=N)
{
if(array[j]!=' ')
libera_sottomatrice(array,i,j,M);
j=(j+(2*M));
}
}

void libera_sottomatrice(char array[N][N],int i,int j,int size)
{
int l,m;
for(l=i;l<(size+i);l++)
{
for(m=j;m<(size+j);m++)
{
array[l][m]=' ';
}
}
}
void compila_array(char array[N][N],int n,char C)
{
int i,j;
for(i=0;i<n;i++)
{
for(j=0;j<n;j++)
array[j]=C;
}

}

void stampa_array(char array[N][N],int n)
{
int i,j;
printf("+----------------------------------------------------------------+\n");
for(i=0;i<n;i++)
{
printf("|");
for(j=0;j<n;j++)
printf("%c ",array[j]);
printf("|");
printf("\n");
}
printf("+----------------------------------------------------------------+\n");

}
il main è cosi:
char frattale[N][N];
compila_array(frattale,N,('X'));
printf("\n\t\t\tIterazione 1\n\n");
stampa_array(frattale,N);
system("PAUSE");
system("cls");
frattale_ric(frattale,1);
}

la mia domanda è E' RICORSIVO TUTTA STA ROBA?
 
Pubblicità
Pubblicità
Indietro
Top