SHARE
TWEET

Untitled

a guest Dec 9th, 2019 85 Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. #include <stdio.h>
  2. #include <omp.h>
  3. #include <bits/types/clock_t.h>
  4. #include <time.h>
  5.  
  6. #define TAILLE_SOUS_MATRICE 50
  7. /* On peut avoir 7 * 7 cellules vivantes */
  8. #define TAILLE_SUR_MATRICE  52
  9. /* On place une bordure autour qui facilite la vie du programmeur... */
  10.  
  11.  
  12. /* Initialisation de la matrice */
  13. void init(int matrice [][TAILLE_SUR_MATRICE ]) {
  14. /****************************************/
  15.     int i,j;
  16.  
  17.     for(i=0; i<TAILLE_SUR_MATRICE; i++) {
  18.         for(j=0; j<TAILLE_SUR_MATRICE; j++) {
  19.             if (i<=j && i>0 && j<=TAILLE_SOUS_MATRICE)
  20.                 matrice[i][j]=1;
  21.             else
  22.                 matrice[i][j]=0;
  23.         }
  24.     }
  25.     /* On pourrait aussi faire une initialisation aléatoire */
  26. }
  27. /****************************************/
  28. /* Calcul du nombre de voisins vivants */
  29. int nombre_voisins (int matrice[][TAILLE_SUR_MATRICE ], int ligne, int colonne) {
  30. /****************************************/
  31.     int compte=0; /* compteur de cellules */
  32.     int i,j;
  33. /* On additionne les 9 cellules centrées en ligne,colonne */
  34.     for (i=ligne-1;i<=ligne+1;i++)
  35.         for(j=colonne-1;j<=colonne+1;j++)
  36.             compte=compte+matrice[i][j];
  37.  
  38.     /* Puis on retire celle du milieu... */
  39.     compte -= matrice[ligne][colonne];
  40.     return compte;
  41. }
  42. /****************************************/
  43. /* Correspond à l'étape n+1 */
  44. void mise_a_jour(int matrice[ ][TAILLE_SUR_MATRICE ]) {
  45. /****************************************/
  46.     int i,j;
  47.     int nbr_voisins;
  48.     int matrice_densite[TAILLE_SOUS_MATRICE][TAILLE_SOUS_MATRICE];
  49.     /* matrice qui comptabilise le nombre de voisins */
  50.     /* et cela, case par case */
  51.     for(i=0; i< TAILLE_SOUS_MATRICE; i++)
  52. #pragma omp parallel for
  53.         for(j=0; j< TAILLE_SOUS_MATRICE; j++)
  54.             matrice_densite[i][j]=nombre_voisins(matrice,i+1,j+1);
  55.     /* i+1 et j+1 car on passe de la SOUS_MATRICE à la MATRICE   */
  56.  
  57.     for(i=0; i< TAILLE_SOUS_MATRICE; i++)
  58. #pragma omp parallel for
  59.         for(j=0; j< TAILLE_SOUS_MATRICE; j++) {
  60.             nbr_voisins=matrice_densite[i][j];
  61.             if(nbr_voisins==2)
  62.                 matrice[i+1][j+1]=1;
  63.             else if (nbr_voisins==0 || nbr_voisins==4)
  64.                 matrice[i+1][j+1]=0;
  65.         }
  66. }
  67.  
  68. /****************************************/
  69. /* Tracé d'une ligne */
  70. void ligne(int largeur) {
  71. /****************************************/
  72.     int i;
  73.     for(i=0; i<largeur; i++)
  74.         printf("--");
  75.     printf("\n");
  76. }
  77.  
  78. /****************************************/
  79. /* Affichage à l'écran des cellules vivantes */
  80. void affiche_matrice(int matrice[ ][TAILLE_SUR_MATRICE ]) {
  81. /****************************************/
  82.     int i,j;
  83.     for(i=1; i<=TAILLE_SOUS_MATRICE; i++) {
  84.         ligne(TAILLE_SOUS_MATRICE);
  85.         for(j=1; j<= TAILLE_SOUS_MATRICE; j++)
  86.             if (matrice[i][j]==1)
  87.                 printf("|%c",'1');
  88.             else
  89.                 printf("|%c",'0');
  90.         printf("|\n");
  91.     }
  92.     ligne(TAILLE_SOUS_MATRICE);
  93. }
  94.  
  95. int main() {
  96.     int i;
  97.     int nbr_cycles;
  98.     double wtime;
  99.  
  100.     wtime = omp_get_wtime();
  101.  
  102.     int matrice[TAILLE_SUR_MATRICE] [TAILLE_SUR_MATRICE ];
  103.     char s[2];
  104.     printf("Nombre de cycles : ");
  105.     scanf("%i",&nbr_cycles);
  106.     init(matrice);
  107.    // printf("La population au départ : \n");
  108.    // affiche_matrice(matrice);
  109.  //   printf("Pressez sur ENTER pour continuer...\n");
  110.    // gets(s);
  111.     for(i=0; i<nbr_cycles; i++) {
  112.         mise_a_jour (matrice);
  113.        // printf("La population après %d cycles: \n", i+1);
  114.  
  115.        // printf("Pressez sur ENTER pour continuer...\n");
  116.        // gets(s);
  117.     }
  118.     affiche_matrice (matrice);
  119.  
  120.  
  121.  
  122.     wtime = omp_get_wtime() - wtime;
  123.     printf("Temps: %lf",wtime);
  124.     return 0;
  125. }
RAW Paste Data
We use cookies for various purposes including analytics. By continuing to use Pastebin, you agree to our use of cookies as described in the Cookies Policy. OK, I Understand
 
Top