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");
}
}