Advertisement
Guest User

Untitled

a guest
Aug 23rd, 2019
80
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.20 KB | None | 0 0
  1. #define SRAND_VALUE 1985
  2. #define dim 2048
  3. #define ger 2000
  4. #include <stdio.h>
  5. #include <stdlib.h>
  6.  
  7. int vizinhos(int** matriz, int i, int j)
  8. {
  9. int soma=0;
  10.  
  11. soma = matriz[i-1][j-1] + matriz[i][j-1] + matriz[i+1][j-1] + matriz[i-1][j] + matriz[i+1][j] + matriz[i-1][j+1] + matriz[i][j+1] + matriz[i+1][j+1];
  12.  
  13.  
  14.  
  15.  
  16.  
  17. if(matriz[i][j]==1){
  18. if(soma < 2){
  19. return 0;
  20. }
  21. if(soma==2 || soma==3){
  22. return 1;
  23. }
  24. if(soma>3){
  25. return 0;
  26. }
  27. }
  28. else{
  29. if(soma==3){
  30. return 1;
  31. }else{
  32. return 0;
  33. }
  34. }
  35.  
  36.  
  37.  
  38.  
  39.  
  40. return 0;
  41. }
  42.  
  43.  
  44. int conta(int** matriz)
  45. {
  46. int soma = 0, i, j;
  47.  
  48. for(i = 1; i < dim+1; i++)
  49. {
  50. for(j = 1; j < dim+1; j++)
  51. {
  52. soma += matriz[i][j];
  53. }
  54. }
  55. return soma;
  56. }
  57.  
  58.  
  59. void copiaborda(int** matriz)
  60. {
  61. int i, j, k;
  62.  
  63. //lin cima
  64. for(i=1; i<dim+1; i++) //
  65. {
  66. matriz[0][i]=matriz[dim][i];
  67. }
  68. //lin baixo
  69. for(i=1; i<dim+1; i++) //j iterado i travado
  70. {
  71. matriz[dim+1][i]=matriz[1][i];
  72. }
  73. //col direita
  74. for(i=1; i<dim+1; i++) //j travado i iterado
  75. {
  76. matriz[i][dim+1]=matriz[i][1];
  77. }
  78.  
  79. //col esquerda
  80. for(i=1; i<dim+1; i++) //ok
  81. {
  82. matriz[i][0]=matriz[i][dim];
  83. }
  84.  
  85. matriz[0][0]=matriz[dim][dim];
  86. matriz[0][dim+1]=matriz[dim][1];
  87. matriz[dim+1][0]=matriz[1][dim];
  88. matriz[dim+1][dim+1]=matriz[1][1];
  89.  
  90. }
  91.  
  92.  
  93. void printar(int** matriz)
  94. {
  95. int i, j;
  96.  
  97. for(i=0; i<dim+2; i++)
  98. {
  99. for(j=0; j<dim+2; j++)
  100. {
  101. printf(" %d", matriz[i][j]);
  102.  
  103. }
  104. printf("\n");
  105. }
  106. return;
  107.  
  108. }
  109.  
  110.  
  111. void desalocamatriz(int** matriz)
  112. {
  113. int i, j;
  114.  
  115. for(i=0; i<dim+2; i++)
  116. {
  117. free(matriz[i]);
  118. }
  119.  
  120. free(matriz);
  121.  
  122. return;
  123. }
  124.  
  125.  
  126. int** alocamatriz()
  127. {
  128. int i, j;
  129. int **matriz = (int**)calloc(dim+2, sizeof(int*));
  130. for (i = 0; i < dim+2; i++) //Percorre as linhas do Vetor de Ponteiros
  131. {
  132. matriz[i] = (int*) calloc(dim+2,sizeof(int)); //Aloca um Vetor de Inteiros para cada posição do Vetor de Ponteiros.
  133. }
  134.  
  135.  
  136. return(matriz);
  137. }
  138.  
  139. int main()
  140. {
  141. int i, j, k;
  142. int **matriz=alocamatriz();
  143. int **matriz_nova;
  144. int** aux;
  145.  
  146. ///GERANDO A MATRIZ ALEATÓRIA
  147. srand(SRAND_VALUE);
  148. for(i = 1; i<dim+1; i++)
  149. {
  150. for(j = 1; j<dim+1; j++)
  151. {
  152. matriz[i][j] = rand() % 2;
  153. }
  154. }
  155.  
  156.  
  157. system ("pause");
  158. for(k=0; k<=ger; k++)
  159. {
  160. matriz_nova = alocamatriz();
  161. copiaborda(matriz);
  162. printf("Geracao %d: %d\n", k, conta(matriz));
  163.  
  164. for(i = 1; i<dim+1; i++)
  165. {
  166. for(j = 1; j<dim+1; j++)
  167. {
  168. matriz_nova[i][j] = vizinhos(matriz, i, j);
  169. }
  170. }
  171. aux = matriz;
  172. matriz = matriz_nova;
  173. desalocamatriz(aux);
  174.  
  175.  
  176. }
  177.  
  178. desalocamatriz(matriz);
  179. //desalocamatriz(matriz_nova);
  180.  
  181. return(0);
  182. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement