/*
988 名前:デフォルトの名無しさん [sage]: 2012/02/04(土) 20:06:33.75
[1] 授業単元:C言語
[2] 問題文 初期状態をファイルより読み込みライフゲームを実行しなさい
[3] 環境
[3.1] OS: Windows7
[3.2] コンパイラ名とバージョン: VisualStudio2010
[3.3] 言語: C言語
[4] 期限: 2/5
[5] その他の制限: ライフゲームの作成です。セルの生死を判定するための条件付けをうまく記述することができません。
他にもツッコミどころ満載ですがどなたか指摘していただけると助かります。お願いします
http://i...content-available-to-author-only...e.com/LFPu6
*/
#include <stdio.h>
#include <stdlib.h>
#include <unistd.h>
#define FieldSize 20
#define TimeMax 20
#define ALIVE " O "
#define DEAD " . "
/*フィールドの初期化 (ファイルの読み込み)*/
void
init_field(int field[FieldSize][FieldSize], char *fname)
{
int i, j;
FILE *fp;
if (fp == NULL) {
printf("init_field(): Cannot open \"%s\"\n",fname
); }
for (i=0;i<FieldSize;i++) {
for (j=0;j<FieldSize;j++) {
fscanf(fp
,"%d ", &field
[i
][j
]); }
}
}
int count(int i, int j, int field[FieldSize][FieldSize]){
int move_horizontal, move_vertical;
int sum;
sum=0;
for(move_vertical=-1;move_vertical<=1;move_vertical++){
for(move_horizontal=-1;move_horizontal<=1;move_horizontal++){
if (move_vertical == 0 && move_horizontal == 0)
continue;
sum += field[i + move_vertical][j + move_horizontal];
}
}
return sum;
}
void update_field(int field[FieldSize][FieldSize])
{
int i, j;
int around = 0;
int new_field[FieldSize][FieldSize];
printf("field = %p in update_field()\n", field
);
memset(new_field
, 0, sizeof(new_field
));
for(i=0;i<FieldSize;i++){
for(j=0;j<FieldSize;j++){
if (i == 0 || j == 0 ||
i == FieldSize - 1 ||
j == FieldSize - 1)
continue;
around = count(i, j, field);
if (field[i][j] == 0){
// 死んでいる状態
if (around == 3) {
// 誕生
new_field[i][j] = 1;
}
}
else{
// 生きている状態
if (around == 2 || around == 3){
// 生存
new_field[i][j] = 1;
}
else if (around <= 1) {
// 過疎
new_field[i][j] = 0;
}
else if (around >= 4) {
// 過密
new_field[i][j] = 0;
}
}
}
}
/*
for(i = 0;i < 20;i++){
for(j = 0;j < 20;j++){
field[i][j] = new_field[i][j];
}
}
*/
memcpy(field
, new_field
, sizeof(new_field
)); }
void
display(int field[FieldSize][FieldSize])
{
int i,j;
for(j=0;j<20;j++)
for(i=0;i<20;i++){
for(j=0;j<20;j++){
if (field[i][j] == 0) {
}
else{
}
}
}
}
int main(int argc, char *argv[])
{
int t;
int field[FieldSize][FieldSize];
if(argc!=2){
printf("実行方法 : ./a.out 初期状態のファイル\n"); }
//system("clear");
printf("field = %p in main()\n", field
); init_field(field, argv[1]);
display(field);
//sleep(1);
for(t=0;t<TimeMax;t++){
update_field(field);
display(field);
sleep(1);
}
return 0;
}
LyoKOTg4IOWQjeWJje+8muODh+ODleOCqeODq+ODiOOBruWQjeeEoeOBl+OBleOCkyBbc2FnZV3vvJogMjAxMi8wMi8wNCjlnJ8pIDIwOjA2OjMzLjc1ClsxXSDmjojmpa3ljZjlhYPvvJrvvKPoqIDoqp4KWzJdIOWVj+mhjOaWh+OAgOWIneacn+eKtuaFi+OCkuODleOCoeOCpOODq+OCiOOCiuiqreOBv+i+vOOBv+ODqeOCpOODleOCsuODvOODoOOCkuWun+ihjOOBl+OBquOBleOBhApbM10g55Kw5aKDCuOAgFszLjFdIE9T77yaIFdpbmRvd3PvvJcK44CAWzMuMl0g44Kz44Oz44OR44Kk44Op5ZCN44Go44OQ44O844K444On44Oz77yaIFZpc3VhbFN0dWRpbzIwMTAK44CAWzMuM10g6KiA6Kqe77yaIEPoqIDoqp4KWzRdIOacn+mZkO+8miAyLzUKWzVdIOOBneOBruS7luOBruWItumZkO+8miDjg6njgqTjg5XjgrLjg7zjg6Djga7kvZzmiJDjgafjgZnjgILjgrvjg6vjga7nlJ/mrbvjgpLliKTlrprjgZnjgovjgZ/jgoHjga7mnaHku7bku5jjgZHjgpLjgYbjgb7jgY/oqJjov7DjgZnjgovjgZPjgajjgYzjgafjgY3jgb7jgZvjgpPjgIIK5LuW44Gr44KC44OE44OD44Kz44Of44Gp44GT44KN5rqA6LyJ44Gn44GZ44GM44Gp44Gq44Gf44GL5oyH5pGY44GX44Gm44GE44Gf44Gg44GR44KL44Go5Yqp44GL44KK44G+44GZ44CC44GK6aGY44GE44GX44G+44GZCmh0dHA6Ly9pLi4uY29udGVudC1hdmFpbGFibGUtdG8tYXV0aG9yLW9ubHkuLi5lLmNvbS9MRlB1NgoqLwoKI2luY2x1ZGUgPHN0ZGlvLmg+CiNpbmNsdWRlIDxzdGRsaWIuaD4KI2luY2x1ZGUgPHVuaXN0ZC5oPgoKI2RlZmluZSBGaWVsZFNpemUgMjAKI2RlZmluZSBUaW1lTWF4IDIwCgojZGVmaW5lIEFMSVZFICIgTyAiCiNkZWZpbmUgREVBRCAiIC4gIgoKLyrjg5XjgqPjg7zjg6vjg4njga7liJ3mnJ/ljJYgKOODleOCoeOCpOODq+OBruiqreOBv+i+vOOBvykqLwp2b2lkCmluaXRfZmllbGQoaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXSwgY2hhciAqZm5hbWUpCnsKICAgIGludCBpLCBqOwogICAgRklMRSAqZnA7CgogICAgZnAgPSBmb3BlbihmbmFtZSwgInIiKTsKICAgIGlmIChmcCA9PSBOVUxMKSB7CiAgICAgICAgcHJpbnRmKCJpbml0X2ZpZWxkKCk6IENhbm5vdCBvcGVuIFwiJXNcIlxuIixmbmFtZSk7CiAgICAgICAgZXhpdCgxKTsKICAgIH0KCiAgICBmb3IgKGk9MDtpPEZpZWxkU2l6ZTtpKyspIHsKICAgICAgICBmb3IgKGo9MDtqPEZpZWxkU2l6ZTtqKyspIHsKICAgICAgICAgICAgZnNjYW5mKGZwLCIlZCAiLCAmZmllbGRbaV1bal0pOwogICAgICAgIH0KICAgIH0KICAgIGZjbG9zZShmcCk7Cn0KCmludCBjb3VudChpbnQgaSwgaW50IGosIGludCBmaWVsZFtGaWVsZFNpemVdW0ZpZWxkU2l6ZV0pewogICAgaW50IG1vdmVfaG9yaXpvbnRhbCwgbW92ZV92ZXJ0aWNhbDsKICAgIGludCBzdW07CgogICAgc3VtPTA7CiAgICBmb3IobW92ZV92ZXJ0aWNhbD0tMTttb3ZlX3ZlcnRpY2FsPD0xO21vdmVfdmVydGljYWwrKyl7CiAgICAgICAgZm9yKG1vdmVfaG9yaXpvbnRhbD0tMTttb3ZlX2hvcml6b250YWw8PTE7bW92ZV9ob3Jpem9udGFsKyspewogICAgICAgICAgICBpZiAobW92ZV92ZXJ0aWNhbCA9PSAwICYmIG1vdmVfaG9yaXpvbnRhbCA9PSAwKQogICAgICAgICAgICAgICAgY29udGludWU7CiAgICAgICAgICAgIHN1bSArPSBmaWVsZFtpICsgbW92ZV92ZXJ0aWNhbF1baiArIG1vdmVfaG9yaXpvbnRhbF07CiAgICAgICAgfQogICAgfQogICAgcmV0dXJuIHN1bTsKfQoKdm9pZCB1cGRhdGVfZmllbGQoaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXSkKewogICAgaW50IGksIGo7CiAgICBpbnQgYXJvdW5kID0gMDsKICAgIGludCBuZXdfZmllbGRbRmllbGRTaXplXVtGaWVsZFNpemVdOwoKICAgIHByaW50ZigiZmllbGQgPSAlcCBpbiB1cGRhdGVfZmllbGQoKVxuIiwgZmllbGQpOwoKICAgIG1lbXNldChuZXdfZmllbGQsIDAsIHNpemVvZihuZXdfZmllbGQpKTsKCiAgICBmb3IoaT0wO2k8RmllbGRTaXplO2krKyl7CiAgICAgICAgZm9yKGo9MDtqPEZpZWxkU2l6ZTtqKyspewogICAgICAgICAgICBpZiAoaSA9PSAwIHx8IGogPT0gMCB8fAogICAgICAgICAgICAgICAgaSA9PSBGaWVsZFNpemUgLSAxIHx8CiAgICAgICAgICAgICAgICBqID09IEZpZWxkU2l6ZSAtIDEpCiAgICAgICAgICAgICAgICBjb250aW51ZTsKCiAgICAgICAgICAgIGFyb3VuZCA9IGNvdW50KGksIGosIGZpZWxkKTsKICAgICAgICAgICAgaWYgKGZpZWxkW2ldW2pdID09IDApewogICAgICAgICAgICAgICAgLy8g5q2744KT44Gn44GE44KL54q25oWLCiAgICAgICAgICAgICAgICBpZiAoYXJvdW5kID09IDMpIHsKICAgICAgICAgICAgICAgICAgICAvLyDoqpXnlJ8KICAgICAgICAgICAgICAgICAgICBuZXdfZmllbGRbaV1bal0gPSAxOwogICAgICAgICAgICAgICAgfQogICAgICAgICAgICB9CiAgICAgICAgICAgIGVsc2V7CiAgICAgICAgICAgICAgICAvLyDnlJ/jgY3jgabjgYTjgovnirbmhYsKICAgICAgICAgICAgICAgIGlmIChhcm91bmQgPT0gMiB8fCBhcm91bmQgPT0gMyl7CiAgICAgICAgICAgICAgICAgICAgLy8g55Sf5a2YCiAgICAgICAgICAgICAgICAgICAgbmV3X2ZpZWxkW2ldW2pdID0gMTsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyb3VuZCA8PSAxKSB7CiAgICAgICAgICAgICAgICAgICAgLy8g6YGO55aOCiAgICAgICAgICAgICAgICAgICAgbmV3X2ZpZWxkW2ldW2pdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgICAgIGVsc2UgaWYgKGFyb3VuZCA+PSA0KSB7CiAgICAgICAgICAgICAgICAgICAgLy8g6YGO5a+GCiAgICAgICAgICAgICAgICAgICAgbmV3X2ZpZWxkW2ldW2pdID0gMDsKICAgICAgICAgICAgICAgIH0KICAgICAgICAgICAgfQogICAgICAgIH0KCiAgICB9CgogICAgLyoKICAgIGZvcihpID0gMDtpIDwgMjA7aSsrKXsKICAgICAgICBmb3IoaiA9IDA7aiA8IDIwO2orKyl7CiAgICAgICAgICAgIGZpZWxkW2ldW2pdID0gbmV3X2ZpZWxkW2ldW2pdOwogICAgICAgIH0KICAgIH0KICAgICovCiAgICBtZW1jcHkoZmllbGQsIG5ld19maWVsZCwgc2l6ZW9mKG5ld19maWVsZCkpOwp9CgoKdm9pZApkaXNwbGF5KGludCBmaWVsZFtGaWVsZFNpemVdW0ZpZWxkU2l6ZV0pCnsKICAgIGludCBpLGo7CgogICAgcHJpbnRmKCIgICAiKTsKICAgIGZvcihqPTA7ajwyMDtqKyspCiAgICAgICAgcHJpbnRmKCIlM2QiLCBqKTsKICAgIHByaW50ZigiXG4iKTsKCiAgICBmb3IoaT0wO2k8MjA7aSsrKXsKICAgICAgICBwcmludGYoIiUzZCAiLCBpKTsKICAgICAgICBmb3Ioaj0wO2o8MjA7aisrKXsKICAgICAgICAgICAgaWYgKGZpZWxkW2ldW2pdID09IDApIHsKICAgICAgICAgICAgICAgIHByaW50ZigiJXMiLCBERUFEKTsKICAgICAgICAgICAgfQogICAgICAgICAgICBlbHNlewogICAgICAgICAgICAgICAgcHJpbnRmKCIlcyIsIEFMSVZFKTsKICAgICAgICAgICAgfQogICAgICAgIH0KICAgICAgICBwcmludGYoIlxuIik7CiAgICB9Cn0KCmludCBtYWluKGludCBhcmdjLCBjaGFyICphcmd2W10pCnsKICAgIGludCB0OwogICAgaW50IGZpZWxkW0ZpZWxkU2l6ZV1bRmllbGRTaXplXTsKCiAgICBpZihhcmdjIT0yKXsKICAgICAgICBwcmludGYoIuWun+ihjOaWueazlSA6IC4vYS5vdXQg5Yid5pyf54q25oWL44Gu44OV44Kh44Kk44OrXG4iKTsKICAgIH0KCiAgICAvL3N5c3RlbSgiY2xlYXIiKTsKICAgIHByaW50ZigiZmllbGQgPSAlcCBpbiBtYWluKClcbiIsIGZpZWxkKTsKICAgIGluaXRfZmllbGQoZmllbGQsIGFyZ3ZbMV0pOwogICAgcHJpbnRmKCJmaWVsZCA9XG4iKTsKICAgIGRpc3BsYXkoZmllbGQpOwogICAgcHJpbnRmKCJcbiIpOwoKICAgIC8vc2xlZXAoMSk7CiAgICBzeXN0ZW0oImNsZWFyIik7CgogICAgZm9yKHQ9MDt0PFRpbWVNYXg7dCsrKXsKICAgICAgICBwcmludGYoInQgPSAlZFxuIiwgdCk7CiAgICAgICAgdXBkYXRlX2ZpZWxkKGZpZWxkKTsKICAgICAgICBkaXNwbGF5KGZpZWxkKTsKICAgICAgICBzbGVlcCgxKTsKICAgICAgICBzeXN0ZW0oImNsZWFyIik7CiAgICB9CgogICAgcmV0dXJuIDA7Cn0=