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