Salve ragazzi ho un piccolo problema con questo codice c: in pratica queato algoritmo visualizza le cellule in cui all'inizio nella prima riga
c'è solo una cellula nera, poi proseguendo al passo due alla seconda riga ci sono 2 cellule nere ecc. Devo visualizzare al passo 4,8,16,31,64 e 80
solo che al momento della visualizzazione mi fa vedere solo il passo 80 ( anche se esegue perfettamente tutto)
Ecco il codice:
#include <stdio.h>
#define N 80
#define BIANCO ' '
#define NERO 'N'
void algoritmo(char*, int);
void stampa(char*, int);
int main(){
int i,j;
char cellule[N][N];
for(i=0;i<N;i++)
for(j=0;j<N;j++)
cellule[j] = BIANCO;
cellule[0][N/2] = NERO;
algoritmo(&cellule[0][0],N);
printf("Digita un carattere e INVIO per uscire");
scanf("%d", &i);
return 0;
}
void algoritmo(char* c, int n){
int i,k;
char j, jmeno1, jpiu1;
//Tutte e 4 le regole coinvolgono un j-1 e j+1, per cui per le cellule ai bordi queste regole non potranno mai essere verificate. ( 0<j<n-1 )
for(i=1;i<n;i++){
for(k=1;k<n-1;k++){
j = *(c+(i-1)*n + k);
jmeno1 = *(c+(i-1)*n + (k-1) );
jpiu1 = *(c+(i-1)*n + (k+1) );
if(
/* a. nella riga (i-1)-sima la cellula j e la cellula j-1 sono nere e la cellula j+1 è bianca; */
(j==NERO && jmeno1==NERO && jpiu1==BIANCO) ||
/* b. nella riga (i-1)-sima la cellula j-1 è nera e le cellule j e j+1 sono bianche; */
(jmeno1==NERO && j==BIANCO && jpiu1 == BIANCO) ||
/* c. nella riga (i-1)-sima la cellula j e la cellula j+1 sono nere e la cellula j-1 è bianca; */
(jmeno1==BIANCO && j== NERO && jpiu1 == NERO) ||
/* d. nella riga (i-1)-sima la cellula j+1 è nera e le cellule j e j-1 sono bianche */
(j==BIANCO && jmeno1==BIANCO && jpiu1 == NERO)
){
*(c+i*n+k) = NERO;
}
}
if(i==3 || i==7 || i==15 || i==31 || i==63 || i==79){
printf("Passo %d\n",i+1);
stampa(c,n);
}
}
}
void stampa(char* c, int n)
{
int i,j;
for(i=0;i<n;i++){
for(j=0;j<n;j++){
printf("%c", *(c+i*n+j));
}
printf("\n");
}
}