Indice del forum Olimpo Informatico
I Forum di Zeus News
Leggi la newsletter gratuita - Attiva il Menu compatto
 
 FAQFAQ   CercaCerca   Lista utentiLista utenti   GruppiGruppi   RegistratiRegistrati 
 ProfiloProfilo   Messaggi privatiMessaggi privati   Log inLog in 

    Newsletter RSS Facebook Twitter Contatti Ricerca
[C++] Somma di booleani in un int, forse.
Nuovo argomento   Rispondi    Indice del forum -> Programmazione
Precedente :: Successivo  
Autore Messaggio
Ruben
Comune mortale
Comune mortale


Registrato: 21/03/15 14:55
Messaggi: 2

MessaggioInviato: 21 Mar 2015 16:14    Oggetto: [C++] Somma di booleani in un int, forse. Rispondi citando

Salve a tutti sono nuovo ^^
Volevo chiedervi aiuto su un breve codice C++ che inizialmente ho creato per semplice divertimento ma che, una volta mostrato il problema, ha iniziato a farmi scervellare.
La mia semplice intenzione era quella di creare una versione ridotta (23x28) del "Gioco della Vita" di Conway: per chi non lo conoscesse, si tratta di una griglia in cui ciascuna casella è "viva" o "morta" (la disposizione di partenza di quelle vive la si sceglie come la si vuole) ed ad ogni iterazione ognuna delle caselle, indipendentemente dal suo precedente stato, sarà impostata a true se nel suo intorno 3x3 (8 "vicini") ci sono 2 o 3 caselle vive, altrimenti muore (o resta morta) per solitudine o sovrappopolazione.
Per approfondimenti, c'è Google.
Ho scritto dunque questo semplice codice C++ in cui imposto anche la disposizione di partenza.



Codice:
#include<iostream>
using namespace std;
void avanza(bool mat[][25]);
main()
{
      bool griglia[30][25];
      int i, j;
      for(i=0;i<30;i++)
      {
                       for(j=0;j<25;j++) griglia[i][j]=false;
      }
      griglia[4][2]=true;
      griglia[5][3]=true;
      griglia[3][4]=true;
      griglia[4][4]=true;
      griglia[5][4]=true;
      system("pause");
      while(true)
      {
                 system("cls");
                 avanza(griglia);
                 system("pause");
      }
}
void avanza(bool mat[][25])
{
     bool next[30][25];
     int vicini, i, j;
     for(i=0;i<30;i++)
     {
                      for(j=0;j<25;j++) next[i][j]=mat[i][j];
     }
     for(i=1;i<29;i++)
     {
                      for(j=1;j<24;j++)
                      {
                                       vicini=mat[i-1][j-1]+mat[i-1][j]+mat[i-1][j+1]+mat[i][j-1];
                                       vicini+=mat[i][j+1]+mat[i+1][j-1]+mat[i+1][j]+mat[i+1][j+1];
                                       if((vicini==2)||(vicini==3)) next[i][j]=true;
                                       else next[i][j]=false;
                      }
     }
     for(i=0;i<30;i++) next[i][0]=false;
     for(j=0;j<25;j++) next[0][j]=false;
     for(i=0;i<30;i++) next[i][24]=false;
     for(j=0;j<25;j++) next[29][j]=false;
     for(i=0;i<30;i++)
     {
                      for(j=0;j<25;j++) mat[i][j]=next[i][j];
     }
     for(i=0;i<30;i++)
     {
                      for(j=0;j<25;j++)
                      {
                                       cout<<" ";
                                       if(mat[i][j]==false) cout<<" ";
                                       else cout<<"X";
                      }
                      cout<<endl;
     }
     cout<<endl<<endl<<endl<<endl<<endl;
}


Il problema: non rispetta la regola "Con 2 o 3 vivi, altrimenti muori", generando così uno schema molto più confusionario rispetto a ciò che dovrebbe fare.
L'ho postato per intero perché non ho la certezza che sia l'unico problema.
Un aiuto sarebbe molto gradito, grazie ^^
Top
Profilo Invia messaggio privato
Ruben
Comune mortale
Comune mortale


Registrato: 21/03/15 14:55
Messaggi: 2

MessaggioInviato: 21 Mar 2015 16:34    Oggetto: Rispondi

Ok scusate sono desolato...
...e anche un cretino.

Sono bastati carta e penna per vedere come il programma, ovviamente, fa esattame quel che ho richiesto. Era la regola di iterazione che me la ricordavo in modo sbagliato, non ottenendo dunque il risultato che credevo di dovermi aspettare.

Scusatemi davvero, potete anche eliminare il topic.
Top
Profilo Invia messaggio privato
Mostra prima i messaggi di:   
Nuovo argomento   Rispondi    Indice del forum -> Programmazione Tutti i fusi orari sono GMT + 1 ora
Pagina 1 di 1

 
Vai a:  
Non puoi inserire nuovi argomenti
Non puoi rispondere a nessun argomento
Non puoi modificare i tuoi messaggi
Non puoi cancellare i tuoi messaggi
Non puoi votare nei sondaggi