前提・実現したいこと
c言語のライフゲームをセルオートマトンの応用によって作ろうとしています。
関数に分けて作成したいです。
発生している問題・エラーメッセージ
コンパイルは成功するが全然違う実行結果になってしまう
### 該当のソースコード #include <stdio.h> #include <stdlib.h> #define MAXT 100 #define M 40 #define N 40 int cell[M+2][N+2]={0}; void init(){ cell[15][N/2]=1; cell[16][N/2]=1; cell[17][N/2]=1; cell[18][N/2]=1; cell[19][N/2]=1; cell[20][N/2]=1; cell[21][N/2]=1; cell[22][N/2]=1; cell[23][N/2]=1; cell[24][N/2]=1; return; } void dump(){ int i; int j; for(i=0;i<M;i++){ for(j=0;j<N;j++){ if(1 ==cell[i][j]){ printf("@"); }else{ printf("."); } } print("\n"); return; } } void update(){ int c[M][N] = {0}; int i; int j; int count = 0; if(cell[i-1][j] == 1 && i != 0) count++; if(cell[i+1][j] == 1 && i != N-1) count++; if(cell[i][j-1] == 1 && j != 0) count++; if(cell[i][j+1] == 1 && j != N-1) count++; if(cell[i-1][j-1] == 1 && i != 0 && j != 0) count++; if(cell[i-1][j+1] == 1 && i != 0 && j != N-1) count++; if(cell[i+1][j-1] == 1 && i != N-1 && j != 0) count++; if(cell[i+1][j+1] == 1 && i != N-1 && j != N-1) count++; if(cell[i][j]==0){ if(count==3){ c[i][j]=1; } } if(cell[i][j]==1){ if(count==2||count==3){ c[i][j]=1; } } if(cell[i][j]==1){ if(count<=1){ c[i][j]=0; } } if(cell[i][j]==1){ if(count>=4){ c[i][j]=0; } } for(i=0;i<M;i++){ for(j=0;j<N;j++){ cell[i][j]=c[i][j]; } } } int main(){ int t; system("clear"); init(); dump(); system("sleep 0.1s"); for(t=1;t<=MAXT;t++){ update(); system("clear"); dump(); system("sleep 0.1s"); } return 0; } ```ここに言語名を入力 c言語 ソースコード ```#include <stdio.h> #include <stdlib.h> #define MAXT 100 #define M 40 #define N 40 int cell[M+2][N+2]={0}; void init(){ cell[15][N/2]=1; cell[16][N/2]=1; cell[17][N/2]=1; cell[18][N/2]=1; cell[19][N/2]=1; cell[20][N/2]=1; cell[21][N/2]=1; cell[22][N/2]=1; cell[23][N/2]=1; cell[24][N/2]=1; return; } void dump(){ int i; int j; for(i=0;i<M;i++){ for(j=0;j<N;j++){ if(1 ==cell[i][j]){ printf("@"); }else{ printf("."); } } print("\n"); return; } } void update(){ int c[M][N] = {0}; int i; int j; int count = 0; if(cell[i-1][j] == 1 && i != 0) count++; if(cell[i+1][j] == 1 && i != N-1) count++; if(cell[i][j-1] == 1 && j != 0) count++; if(cell[i][j+1] == 1 && j != N-1) count++; if(cell[i-1][j-1] == 1 && i != 0 && j != 0) count++; if(cell[i-1][j+1] == 1 && i != 0 && j != N-1) count++; if(cell[i+1][j-1] == 1 && i != N-1 && j != 0) count++; if(cell[i+1][j+1] == 1 && i != N-1 && j != N-1) count++; if(cell[i][j]==0){ if(count==3){ c[i][j]=1; } } if(cell[i][j]==1){ if(count==2||count==3){ c[i][j]=1; } } if(cell[i][j]==1){ if(count<=1){ c[i][j]=0; } } if(cell[i][j]==1){ if(count>=4){ c[i][j]=0; } } for(i=0;i<M;i++){ for(j=0;j<N;j++){ cell[i][j]=c[i][j]; } } } int main(){ int t; system("clear"); init(); dump(); system("sleep 0.1s"); for(t=1;t<=MAXT;t++){ update(); system("clear"); dump(); system("sleep 0.1s"); } return 0; } ### 試したこと ### 補足情報(FW/ツールのバージョンなど) main関数は変えないでください ここにより詳細な情報を記載してください。
回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2020/07/24 18:13
2020/07/25 00:25
2020/07/25 07:01
2020/07/25 07:06