2607

p2

Sep 19th, 2021
272
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C 4.07 KB | None | 0 0
  1. #include <stdio.h>
  2. #include <stdlib.h>
  3.  
  4. int ** dynamic_array_alloc(int N, int M);
  5. void dynamic_array_free(int **A, int N);
  6. void game_of_life(int **A, int **B, int n, int m);
  7. void current_iteration(int **A, int **B, int n, int m);
  8. int alive(int **a, int y, int x, int n, int m);
  9. void print_dynamic_array(int **A, int n, int m);
  10.  
  11. int main() {
  12.     int N = 0;
  13.     int xMax = 5;
  14.     int yMax = 5;
  15.     int **A = dynamic_array_alloc(yMax, xMax);
  16.     int **B = dynamic_array_alloc(yMax, xMax);
  17.    
  18.    
  19.     for (int i = 0; i < yMax; i++) {
  20.            for (int j = 0; j < xMax; j++) {
  21.                char c;
  22.                if (scanf("%d%c", &A[i][j], &c) == 2 && c == ' ' || c == '\n') {
  23.                    continue;
  24.                } else {
  25.                    N = -1;
  26.                    break;
  27.                }
  28.            }
  29.        }
  30.     //printf("ffffffffff");
  31.     printf("ssssssssssssss");
  32.     game_of_life(A, B, yMax, xMax);
  33.     printf("\n");
  34.     /*for (int i = 0; i < yMax; i++) {
  35.           for (int j = 0; j < xMax; j++) {
  36.               printf("%d ", B[i][j]);
  37.           }
  38.        printf("\n");
  39.    } */
  40.    
  41.     dynamic_array_free(A, yMax);
  42.     dynamic_array_free(B, yMax);
  43.  
  44. }
  45.    
  46.    
  47.    
  48. int ** dynamic_array_alloc(int N, int M) {
  49.     int **A = malloc(N*sizeof(int *));
  50.     for (int i = 0; i < N; i++) {
  51.         A[i] = malloc(M*sizeof(int));
  52.     }
  53.     return A;
  54. }
  55.  
  56. void dynamic_array_free(int **A, int N) {
  57.     for (int i = 0; i < N; i++) {
  58.         free(A[i]);
  59.     }
  60.     free(A);
  61. }
  62.  
  63. void game_of_life(int **A, int **B, int n, int m) {
  64.     int N = 0; //number of iterations
  65.     while (1) {
  66.         //printf("qqqqqqqqqqqqqq\n");
  67.         current_iteration(A, B, n, m);
  68.         ++N;
  69.         print_dynamic_array(A, n, m);
  70.         char c;
  71.         scanf("%c", &c);
  72.         if (c=='9') {
  73.             continue;
  74.         } else {
  75.             break;
  76.         }
  77.         if (N==9) {
  78.             break;
  79.         }
  80.         current_iteration(B, A, n, m);
  81.         print_dynamic_array(B, n, m);
  82.         //char c;
  83.         scanf("%c", &c);
  84.         if (c=='9') {
  85.             continue;
  86.         } else {
  87.             break;
  88.         }
  89.         ++N;
  90.     }
  91. }
  92.  
  93. void current_iteration(int **a, int **b, int n, int m) {
  94.     for (int y = 0; y < n; y++) {
  95.                 for (int x = 0; x < m; x++) {
  96.                     //printf("GGGGGGGGGGG");
  97.                     int al = alive(a, y , x, n, m);
  98.                     if (a[y][x] == 1) {
  99.                         if (al == 2 || al == 3) {
  100.                             b[y][x] = 1;
  101.                         }
  102.                         if (al > 3 || al < 2) {
  103.                             b[y][x] = 0;
  104.                         }
  105.                        
  106.                     } else {
  107.                         if (al == 3) {
  108.                             b[y][x] = 1;
  109.                         }
  110.                     }
  111.                      
  112.         }
  113.     }
  114. }
  115.    
  116. int alive(int **a, int y, int x, int n, int m) {
  117.     int ret = 0;
  118.     int tmp = 0;
  119.     //printf("aaaaa: %d %d\n", y, x);
  120.     for (int i = -1; i < 2; ++i) {
  121.         for (int j = -1; j < 2; ++j) {
  122.             //printf("cycle %d %d\n", j, i);
  123.             if (j ==0 && i == 0) {
  124.             } else {
  125.                 if (y + i < 0) {
  126.                     i +=n;
  127.                 }
  128.                 if (x +j < 0) {
  129.                     j+=m;
  130.                 }
  131.                 if (a[(y + i)%n][(x + j)%m] == 1) {
  132.                     //printf("сосед: %d %d\n", y+i, x+j);
  133.                     tmp +=1;
  134.                     //printf("коорд: %d %d %d\n", y, x, tmp);
  135.                 }
  136.                 if (i == n - 1) {
  137.                     i = -1;
  138.                 }
  139.                 if (j == m - 1) {
  140.                     j = -1;
  141.                 }
  142.             }
  143.         }
  144.     }
  145.     //printf("tmp = %d\n", tmp);
  146.     return tmp;
  147. }
  148.  
  149. void print_dynamic_array(int **A, int n, int m) {
  150.     printf("\033[2J\033[1;1H");
  151.     for (int i = 0; i < n; i++) {
  152.           for (int j = 0; j < m; j++) {
  153.               printf("%d ", A[i][j]);
  154.           }
  155.        printf("\n");
  156.    }
  157. }
Add Comment
Please, Sign In to add comment