| 4 | 1/1 | 返回列表 |
| 查看: 2040 | 回復(fù): 3 | ||
[求助]
修改一個C語言生命游戲程序
|
|
學(xué)校的project,一個生命游戲的程序: ------------------------------------------------------------------------------------------------------ #include #include #define ARRAYSIZE1 3 /* array size, predefined by the user */ #define ARRAYSIZE2 7 #define NSTEPS 2 /* number of steps take */ int main(int argc, char *argv[]) { int i, j, n, im, ip, jm, jp, ni, nj, nsum, isum; int **old, **new; float x; FILE *outFile; ni = ARRAYSIZE1 + 2; /* add 2 for left and right ghost cells */ // nj = ARRAYSIZE2 + 2; old = malloc(ni*sizeof(int*)); new = malloc(ni*sizeof(int*)); for(i=0; i new = malloc(nj*sizeof(int)); } /* initialize elements of old to 0 or 1 */ for(i=1; i<=ARRAYSIZE1; i++){ for(j=1; j<=ARRAYSIZE2; j++){ x = rand()/((float)RAND_MAX + 1); if(x<0.5){ old[j] = 0; } else { old[j] = 1; } } } /* time steps */ for(n=0; n /* corner boundary conditions */ old[0][0] = old[ARRAYSIZE1][ARRAYSIZE2]; old[0][ARRAYSIZE2+1] = old[ARRAYSIZE1][1]; old[ARRAYSIZE1+1][ARRAYSIZE2+1] = old[1][1]; old[ARRAYSIZE1+1][0] = old[1][ARRAYSIZE2]; /* left-right boundary conditions */ for(i=1; i<=ARRAYSIZE1; i++){ old[0] = old[ARRAYSIZE2]; old[ARRAYSIZE2+1] = old[1]; } /* top-bottom boundary conditions */ for(j=1; j<=ARRAYSIZE2; j++){ old[0][j] = old[ARRAYSIZE1][j]; old[ARRAYSIZE1+1][j] = old[1][j]; } for(i=1; i<=ARRAYSIZE1; i++){ for(j=1; j<=ARRAYSIZE2; j++){ im = i-1; ip = i+1; jm = j-1; jp = j+1; nsum = old[im][jp] + old[jp] + old[ip][jp] + old[im][j ] + old[ip][j ] + old[im][jm] + old[jm] + old[ip][jm]; switch(nsum){ case 3: new[j] = 1; break; case 2: new[j] = old[j]; break; default: new[j] = 0; } } } for(i=1; i<=ARRAYSIZE1; i++){ for(j=1; j<=ARRAYSIZE2; j++){ old[j] = new[j]; } } } /* sum the number of living cells */ isum = 0; for(i=1; i<=ARRAYSIZE1; i++){ for(j=1; j<=ARRAYSIZE2; j++){ isum = isum + new[j]; } } printf("\nNumber of living cells = %d\n", isum); return 0; } ------------------------------------------------------------------------------------------------------ 現(xiàn)在的程序直接定義了生命游戲中的初始條件,如下 #define ARRAYSIZE1 3 /* array size, predefined by the user */ #define ARRAYSIZE2 7 #define NSTEPS 2 /* number of steps take */ 直接運行可以輸出存活細(xì)胞數(shù),如下 printf("\nNumber of living cells = %d\n", isum); return 0; 想把程序改成滿足以下條件的新程序: 運行程序的時候接受輸入,格式為: [first argument: 演化次數(shù)steps] [second argument:調(diào)用的文件名] 其中調(diào)用的文件包含了初始的grid,格式為 m 行數(shù) n 列數(shù) 舉例: 5 6 01100 01110 01000 00000 00000 00000 輸出格式不變,輸出存活細(xì)胞數(shù)。 請問這個程序要怎么修改呢?請熟悉c語言的前輩多多指教,在線等回復(fù)。拜謝! [ Last edited by MajorMei on 2012-11-28 at 12:06 ] |
新蟲 (初入文壇)

|
想把程序改成用戶自定義某些參數(shù)運行的模式,輸入的數(shù)據(jù)分為兩部分,比如輸入 5 grid.txt 就說明生命游戲要執(zhí)行五步,初始矩陣是grid.txt這個文件里面的樣子 grid.txt由三部分構(gòu)成:m,n和矩陣 m 為行數(shù) n 為列數(shù) 舉例: 5 6 01100 01110 01000 00000 00000 00000 例子中是grid.txt這個文件的內(nèi)容 通過命令行中的grid.txt調(diào)用此文件中的信息,然后運行程序,輸出存活的細(xì)胞數(shù)。 謝謝您的回復(fù),如果需要更詳細(xì)的信息我會盡快回復(fù)您。請指點! |
至尊木蟲 (著名寫手)
驃騎將軍
|
讀取參數(shù)得到執(zhí)行步數(shù)和文件名 讀取文件是通用的,先讀到行列數(shù),動態(tài)分配內(nèi)存生成矩陣,然后讀取內(nèi)容作為初始狀態(tài). 你只需要寫一個函數(shù)Run(int **mat, int m, int n),這個函數(shù)里面就是根據(jù)生命游戲的規(guī)則,判斷鄰域來設(shè)置當(dāng)前元素的值.唯一復(fù)雜的就是判斷4個角點和4條邊界,其他內(nèi)部元素的鄰域都是3*3方塊中的其他8個.然后求和,根據(jù)設(shè)定好的規(guī)則來設(shè)置當(dāng)前的值. 仔細(xì)分析一下不難的.用循環(huán)控制運行次數(shù)等于指定的執(zhí)行步數(shù),每次都去調(diào)用Run()就行了 Run的偽代碼實現(xiàn),分情況可以有其他分法,例如把左右上角的情況寫進(jìn)第一行里面當(dāng)做特殊情況處理,不過對于if...else...沒有什么簡化的空間,寫出來看著清楚一些. |

| 4 | 1/1 | 返回列表 |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 304求調(diào)劑 +8 | 小熊joy 2026-03-14 | 8/400 |
|
|---|---|---|---|---|
|
[考研] 344求調(diào)劑 +4 | knight344 2026-03-16 | 4/200 |
|
|
[考研] 302求調(diào)劑 +9 | 負(fù)心者當(dāng)誅 2026-03-11 | 9/450 |
|
|
[考研] [導(dǎo)師推薦]西南科技大學(xué)國防/材料導(dǎo)師推薦 +3 | 尖角小荷 2026-03-16 | 6/300 |
|
|
[考研] 326求調(diào)劑 +4 | 諾貝爾化學(xué)獎覬?/a> 2026-03-15 | 7/350 |
|
|
[考研] 0703化學(xué)調(diào)劑 +6 | 妮妮ninicgb 2026-03-15 | 9/450 |
|
|
[考研] 0703一志愿211 285分求調(diào)劑 +5 | ly3471z 2026-03-13 | 5/250 |
|
|
[考研] 材料與化工一志愿南昌大學(xué)327求調(diào)劑推薦 +7 | Ncdx123456 2026-03-13 | 8/400 |
|
|
[考研] 中科大材料專碩319求調(diào)劑 +3 | 孟鑫材料 2026-03-13 | 3/150 |
|
|
[考研] 328求調(diào)劑 +3 | 5201314Lsy! 2026-03-13 | 6/300 |
|
|
[考研] 招收0805(材料)調(diào)劑 +3 | 18595523086 2026-03-13 | 3/150 |
|
|
[考研] 285 求調(diào)劑 資源與環(huán)境 一志愿北京化工大學(xué) +3 | 未名考生 2026-03-10 | 3/150 |
|
|
[考研] 求材料調(diào)劑 +5 | 隔壁陳先生 2026-03-12 | 5/250 |
|
|
[考研] 290求調(diào)劑 +9 | ADT 2026-03-11 | 9/450 |
|
|
[考研] (081700)化學(xué)工程與技術(shù)-298分求調(diào)劑 +12 | 11啦啦啦 2026-03-11 | 35/1750 |
|
|
[考研] 材料工程調(diào)劑 +4 | 咪咪空空 2026-03-11 | 4/200 |
|
|
[考研] 材料專碩350 求調(diào)劑 +4 | 王金科 2026-03-12 | 4/200 |
|
|
[考研] 工科278分求調(diào)劑 +5 | 周慢熱啊 2026-03-12 | 7/350 |
|
|
[考研] 工科調(diào)劑 +4 | Jiang191123! 2026-03-11 | 4/200 |
|
|
[考研] 0856化學(xué)工程280分求調(diào)劑 +4 | shenzxsn 2026-03-11 | 4/200 |
|