Buonasera...ho un progetto da consegnare entro un mese...riguarda il game of life..
Il testo mi dice:
Il Gioco della Vita consiste in una scacchiera in cui ogni casella rappresenta una cellula, che può essere viva o morta. Ogni cellula ha, in generale, quattro cellule vicine (a meno che la cellula non si trovi sul bordo della scacchiera). L’algoritmo usa un array 2D nxn, con n=45, per simulare la scacchiera. L’algoritmo esamina n volte la scacchiera. Durante ogni passo aggiorna lo stato di tutte le cellule sulla scacchiera nel seguente modo:
se una cellula ha uno, due o tre cellule vicine vive allora la cellula deve essere posta nello stato “viva”; altrimenti deve essere posta nello stato “morta” (si noti che questa regola consente a una cellula morta di diventare viva). Dopo l’ultimo passo, l’algoritmo visualizza l’array 2D aggiornato. Ogni cellula viva è visualizzata con un asterisco; ogni cellula morta con uno spazio. Fare attenzione al fatto che la scacchiera deve essere aggiornata solo alla fine di ogni passo: ciò significa che l’algoritmo deve usare un array per memorizzare la scacchiera attuale e un array per memorizzare la scacchiera modificata. Usare le tre seguenti configurazioni iniziali(per i tre test): solo la cellula centrale è viva, ovvero quella di indici 22,22; solo le cellule 22,22 e 22,23 sono vive; solo le cellule 0,0 44,44 e 44,43 sono vive.
Io il progetto lo terminato pero quando stampa la matrice sotto ad essa mi vengono fuori dei numeri...forse saranno indirizzi ma non riesco a trovare il problema...
Questo è il codice:
codice:#include <stdio.h> //struct struct cellula { int stato; }tab[45][45]; //prototipi funzione void inizializza(); void game(); void stampa_finale(); //nn cè bisogno di passarlo puntatore int main() ///PROGRAMMA PRINCIPALE { inizializza(); //richiama prima funzione game(); stampa_finale(); return 0; } ///_________________________FUNCTION_________________________________________/// void inizializza() //ti posiziona le cellule che desideri dove vuoi! { int i,j; //inizializza tt a zero for(i=0;i<45;i++) for(j=0;j<45;j++) tab[i][j].stato = 0; int scelta; do //scegli quale porre a viva { printf("Inserisci le coordinate :\n i --> "); scanf("%d",&i); printf("j --> "); scanf("%d",&j); tab[i][j].stato = 1; printf("\n vuoi inserire un'altra cellula?? 1(si) 2(no)\n"); scanf("%d",&scelta); } while(scelta == 1); //stampa stampa_finale() ; //richiama la funzione stampa } ///-----------------------------------------------------------------------------/// void game() //qi segue le cose ke vuole la traccia { int appoggio[45][45],flag,z,i,j; //matrice fittizzia for(i=0;i<45;i++) //inizializza appoggio { for(j=0;j<45;j++) { appoggio[i][j] = 0; } } for(z=0;z<45;z++) //te lo ripete per 45 volte!!! { for(i=0;i<45;i++) { for(j=0;j<45;j++) { flag=0; if(i==0 && j==0 && flag== 0) //Casella[0][0] in alto a sinistra if ( (tab[i+1][j].stato==1) || (tab[i][j+1].stato==1) ) { printf("1"); appoggio[i][j]=1; flag= 1; } if(i==0 && j ==44 && flag== 0)//Casella [0][44] in alto a destra if((tab[i+1][j].stato==1) || (tab[i][j-1].stato==1) ) { printf("2");appoggio[i][j]=1; flag= 1; } if(i==44 && j ==44 && flag== 0)//Casella[44][44]in basso a destra if((tab[i-1][j].stato==1) || (tab[i][j+1].stato==1)) { printf("3");appoggio[i][j]=1; flag= 1; } if(i==44 && j ==0 && flag== 0) //Casella [44][0] in basso a sinistra if((tab[i-1][j].stato==1) || (tab[i][j+1].stato==1)) { printf("4");appoggio[i][j]=1; flag= 1; } //Bordi if(i==0 && flag== 0 && j!=0 && j!=44) if((tab[i+1][j].stato==1)||(tab[i][j+1].stato==1)||(tab[i][j-1].stato==1)) { printf("5");appoggio[i][j]=1; flag= 1; } if(i==44 && flag== 0 && j!=0 && j!=44) if((tab[j][i-1].stato==1)||(tab[j+1][i].stato==1)||(tab[j-1][i].stato==1)) { printf("6");appoggio[i][j]=1; flag= 1; } if(j==0 && flag== 0 && i!=0 && i!=44) if((tab[i-1][j].stato==1)||(tab[i+1][j].stato==1)||(tab[i][j+1].stato==1)) { printf("7");appoggio[i][j]=1; flag= 1; } if(j==44 && flag== 0 && i!=0 && i!=44) if((tab[i][j-1].stato==1)||(tab[i-1][j].stato==1)||(tab[i+1][j].stato==1)) { printf("8");appoggio[i][j]=1; flag= 1; } // Casella generale if(flag==0 && i!=0 && i!=44 && j!=0 && j!=44) if((tab[i-1][j].stato==1) || (tab[i][j+1].stato==1) || (tab[i+1][j].stato==1) || (tab[i][j-1].stato==1)) { printf("9"); appoggio[i][j]=1; flag=1; } } } for(i=0;i<45;i++) { for(j=0;j<45;j++) { tab[i][j].stato=appoggio[i][j]; } } stampa_finale(); system("pause"); } } ///--------------------------------------------------------------------------------/// void stampa_finale() { int i,j; printf("\n\n\t\t ***STAMPA TABLE...*** \n\n\n"); for(i=0;i<45;i++) { for(j=0;j<45;j++) { if(tab[i][j].stato == 1) printf("*"); else printf("°"); } printf("\n"); } }

Rispondi quotando
Ti ricordo che:
