void generation_suivante_M(int **tab1, int **tab2, int n, int m, int B[9], int S[9]){ int i, j, k; // Compteurs for (i = 0; i < n; i++) { // Parcours du tableau principal for (j = 0; j < m; j++) { for (k = 0; k < 9; k++) { // Parcours du tableau pour les regles de naissance ou de survie if ((tab1[i][j] == 0) && (B[k] == 1) && (nb_voisins_M(tab1, i, j, n, m) == k)) { // Si la celleule est morte et que les regles correspondent alors elle peut naitre a la generation suivante tab2[i][j] = 1; } if ((tab1[i][j] == 1) && (S[k] == 1) && (nb_voisins_M(tab1, i, j, n, m) == k)) { // Si la celleule est vivanteet que les regles correspondent alors elle peut survivre a la generation suivante tab2[i][j] = 1; } } } } }
void generation_suivante_M_V2(int** tab1,int** tab2,int n, int m, int B[9],int S[9]) { int i=0,j=0,nbVoisins=0; const int vivant=1,mort=0,fantome=2; //On regarde en premier lieu si les cellules survives ou meurs for(i=0;i<n;i++) { for(j=0;j<m;j++) { //si elle est vivante, alors on regard le nombre de voisin. if(tab1[i][j]==vivant) { nbVoisins=nb_voisins_M(tab1,i,j,n,m); //si le nombre de voisin ne permet pas a la cellule de vivre, elle devient morte a la prochaine génération if(S[nbVoisins]==mort) { tab2[i][j]=fantome; } } else if(tab1[i][j]==fantome) { tab2[i][j]=mort; } else { nbVoisins=nb_voisins_M(tab1,i,j,n,m); //Si le nombre de voisin lui permet de vivre, alors elle sera vivante a la prochaine génération if(B[nbVoisins]==vivant) { tab2[i][j]=vivant; } } } } }
// Moore double tests_nb_voisins_M(void) { double results = 0; int i, j; int nbVoisins = 0; int **colonie = colonie_creer(N, M); for (i = 0; i < N; i++) for (j = 0; j < M; j++) colonie[i][j] = CELLULE_VIVANTE; nbVoisins = nb_voisins_M(colonie, 0, 0, N, M); results += (nbVoisins == 3); nbVoisins = nb_voisins_M(colonie, 0, 1, N, M); results += (nbVoisins == 5); nbVoisins = nb_voisins_M(colonie, 0, 2, N, M); results += (nbVoisins == 3); nbVoisins = nb_voisins_M(colonie, 1, 0, N, M); results += (nbVoisins == 5); nbVoisins = nb_voisins_M(colonie, 1, 1, N, M); results += (nbVoisins == 8); nbVoisins = nb_voisins_M(colonie, 1, 2, N, M); results += (nbVoisins == 5); nbVoisins = nb_voisins_M(colonie, 2, 0, N, M); results += (nbVoisins == 3); nbVoisins = nb_voisins_M(colonie, 2, 1, N, M); results += (nbVoisins == 5); nbVoisins = nb_voisins_M(colonie, 2, 2, N, M); results += (nbVoisins == 3); colonie_detruire(colonie, N, M); return results / 9; }