| 5 | 1/1 | 返回列表 |
| 查看: 2042 | 回復(fù): 3 | |||
| 當(dāng)前只顯示滿足指定條件的回帖,點(diǎn)擊這里查看本話題的所有回帖 | |||
[求助]
修改一個(gè)C語(yǔ)言生命游戲程序
|
|||
|
學(xué)校的project,一個(gè)生命游戲的程序: ------------------------------------------------------------------------------------------------------ #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 */ 直接運(yùn)行可以輸出存活細(xì)胞數(shù),如下 printf("\nNumber of living cells = %d\n", isum); return 0; 想把程序改成滿足以下條件的新程序: 運(yùn)行程序的時(shí)候接受輸入,格式為: [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ù)。 請(qǐng)問(wèn)這個(gè)程序要怎么修改呢?請(qǐng)熟悉c語(yǔ)言的前輩多多指教,在線等回復(fù)。拜謝! [ Last edited by MajorMei on 2012-11-28 at 12:06 ] |
至尊木蟲 (著名寫手)
驃騎將軍
|
讀取參數(shù)得到執(zhí)行步數(shù)和文件名 讀取文件是通用的,先讀到行列數(shù),動(dòng)態(tài)分配內(nèi)存生成矩陣,然后讀取內(nèi)容作為初始狀態(tài). 你只需要寫一個(gè)函數(shù)Run(int **mat, int m, int n),這個(gè)函數(shù)里面就是根據(jù)生命游戲的規(guī)則,判斷鄰域來(lái)設(shè)置當(dāng)前元素的值.唯一復(fù)雜的就是判斷4個(gè)角點(diǎn)和4條邊界,其他內(nèi)部元素的鄰域都是3*3方塊中的其他8個(gè).然后求和,根據(jù)設(shè)定好的規(guī)則來(lái)設(shè)置當(dāng)前的值. 仔細(xì)分析一下不難的.用循環(huán)控制運(yùn)行次數(shù)等于指定的執(zhí)行步數(shù),每次都去調(diào)用Run()就行了 Run的偽代碼實(shí)現(xiàn),分情況可以有其他分法,例如把左右上角的情況寫進(jìn)第一行里面當(dāng)做特殊情況處理,不過(guò)對(duì)于if...else...沒(méi)有什么簡(jiǎn)化的空間,寫出來(lái)看著清楚一些. |

新蟲 (初入文壇)

|
想把程序改成用戶自定義某些參數(shù)運(yùn)行的模式,輸入的數(shù)據(jù)分為兩部分,比如輸入 5 grid.txt 就說(shuō)明生命游戲要執(zhí)行五步,初始矩陣是grid.txt這個(gè)文件里面的樣子 grid.txt由三部分構(gòu)成:m,n和矩陣 m 為行數(shù) n 為列數(shù) 舉例: 5 6 01100 01110 01000 00000 00000 00000 例子中是grid.txt這個(gè)文件的內(nèi)容 通過(guò)命令行中的grid.txt調(diào)用此文件中的信息,然后運(yùn)行程序,輸出存活的細(xì)胞數(shù)。 謝謝您的回復(fù),如果需要更詳細(xì)的信息我會(huì)盡快回復(fù)您。請(qǐng)指點(diǎn)! |
| 最具人氣熱帖推薦 [查看全部] | 作者 | 回/看 | 最后發(fā)表 | |
|---|---|---|---|---|
|
[考研] 一志愿天津大學(xué)化學(xué)工藝專業(yè)(081702)315分求調(diào)劑 +7 | yangfz 2026-03-17 | 7/350 |
|
|---|---|---|---|---|
|
[考研] 301求調(diào)劑 +4 | A_JiXing 2026-03-16 | 4/200 |
|
|
[考研] 344求調(diào)劑 +4 | knight344 2026-03-16 | 4/200 |
|
|
[考研] 材料專碩326求調(diào)劑 +6 | 墨煜姒莘 2026-03-15 | 7/350 |
|
|
[考研] 293求調(diào)劑 +6 | 世界首富 2026-03-11 | 6/300 |
|
|
[考研] 一志愿211 0703方向310分求調(diào)劑 +3 | 努力奮斗112 2026-03-15 | 3/150 |
|
|
[考研] 0703化學(xué)調(diào)劑 +6 | 妮妮ninicgb 2026-03-15 | 9/450 |
|
|
[考研] 0703化學(xué)調(diào)劑,求各位老師收留 +8 | 秋有木北 2026-03-14 | 8/400 |
|
|
[考研] 070303 總分349求調(diào)劑 +3 | LJY9966 2026-03-15 | 5/250 |
|
|
[考研] 材料與化工一志愿南昌大學(xué)327求調(diào)劑推薦 +7 | Ncdx123456 2026-03-13 | 8/400 |
|
|
[考研] 294求調(diào)劑 +3 | Zys010410@ 2026-03-13 | 4/200 |
|
|
[考研] 本科南京大學(xué)一志愿川大藥學(xué)327 +3 | 麥田耕者 2026-03-14 | 3/150 |
|
|
[考研] 265求調(diào)劑 +4 | 威化餅07 2026-03-12 | 4/200 |
|
|
[考研] 材料080500調(diào)劑求收留 +3 | 一顆meteor 2026-03-13 | 3/150 |
|
|
[基金申請(qǐng)]
有必要更換申報(bào)口嗎
20+3
|
fannyamoy 2026-03-11 | 3/150 |
|
|
[考研] 一志愿中科院,化學(xué)方向,295求調(diào)劑 +4 | 一氧二氮 2026-03-11 | 4/200 |
|
|
[考研] 336求調(diào)劑 +6 | Iuruoh 2026-03-11 | 6/300 |
|
|
[考研] 329求調(diào)劑 +3 | miaodesi 2026-03-12 | 4/200 |
|
|
[考研] 工科278分求調(diào)劑 +5 | 周慢熱啊 2026-03-12 | 7/350 |
|
|
[考博] 福州大學(xué)楊黃浩課題組招收2026年專業(yè)學(xué)位博士研究生,2026.03.20截止 +3 | Xiangyu_ou 2026-03-12 | 3/150 |
|