C 課程設計之模擬乙個微型生態系統

2021-06-19 17:28:24 字數 3032 閱讀 8288

題目: 模擬乙個微型生態系統。有青草、兔子、狐狸三種生物。可以用網格表示整個環境,每個格仔內用不同字母表示不同事物:空地e青草g兔子r狐狸f。系統規則如下:

1)初始狀態隨機出現grf;

2)若格仔為g,下一輪其周邊八個格仔中為e的格仔中會至少有乙個變為g;

3)若格仔為r,若其周圍八個格仔都沒有g或其中乙個出現f,則下一輪此格仔為e;否則其中乙個為g的格仔變為r;

4)若格仔為f,其周圍八個格仔都沒有r,則下一輪此格仔為e;否則其中乙個為r的格仔變成f;

5)若格仔為e,則下一輪會以一定的概率變為g。

請分析並畫出類結構圖,利用物件導向程式設計思想,完成模擬過程。(必須用到類的繼承、虛函式)

問題分析:

感覺沒有很大的必要對每一種生物建立乙個類,並進行派生,所以這裡我只建立了兩個類,乙個世界(world)作為基類,乙個生態系統(shengtai)作為派生類,繼承於基類(world),輸出函式(display)作為虛函式,建立基類指標呼叫派生類的虛函式。類結構圖如下:

**實現:(執行環境為microsoft visual studio 2010)

/*初始化生態系統大小為10*10(可以改變),空地變為青草地的概率為60%(可以改變),規則中某些地方指出某些情況下,至少乙個改變或者其中乙個地方改變,這裡均按照從上到下從左到右的順序,以出現滿足條件的第乙個進行改變,其餘不變。*/

#include#include#includeusing namespace std;

const int col = 10;

const int row = 10;//初始化生態系統大小const int turngrass = 60;//空地變為青草地的概率

class world

;void world::init()

case 1:

if(s[i-1][j] == 0&&turned == 0)

if(s[i-1][j+1] == 0&&turned == 0)

if(s[i][j-1] == 0&&turned == 0)

if(s[i][j+1] == 0&&turned == 0)

if(s[i+1][j-1] == 0&&turned == 0)

if(s[i+1][j] == 0&&turned == 0)

if(s[i+1][j+1] == 0&&turned == 0)

break;

}case 2:

if(s[i-1][j] == 3&&turned == 0)

if(s[i-1][j+1] == 3&&turned == 0)

if(s[i][j-1] == 3&&turned == 0)

if(s[i][j+1] == 3&&turned == 0)

if(s[i+1][j-1] == 3&&turned == 0)

if(s[i+1][j] == 3&&turned == 0)

if(s[i+1][j+1] == 3&&turned == 0)

if(turned == 0&&

s[i-1][j-1] != 1&&s[i-1][j] != 1&&

s[i-1][j+1] != 1&&s[i][j-1] != 1&&

s[i][j+1] != 1&&s[i+1][j-1] != 1&&

s[i+1][j] != 1&&s[i+1][j+1] != 1)

if(s[i-1][j] == 1&&turned == 0)

if(s[i-1][j+1] == 1&&turned == 0)

if(s[i][j-1] == 1&&turned == 0)

if(s[i][j+1] == 1&&turned == 0)

if(s[i+1][j-1] == 1&&turned == 0)

if(s[i+1][j] == 1&&turned == 0)

if(s[i+1][j+1] == 1&&turned == 0)

}break;

}case 3:

}else if(j == row-1)

}else}}

else if(i == col-1)

}else if(j == row-1)

}else}}

else

}if(s[i-1][j-1] == 2&&turned == 0)

if(s[i-1][j] == 2&&turned == 0)

if(s[i-1][j+1] == 2&&turned == 0)

if(s[i][j-1] == 2&&turned == 0)

if(s[i][j+1] == 2&&turned == 0)

if(s[i+1][j-1] == 2&&turned == 0)

if(s[i+1][j] == 2&&turned == 0)

if(s[i+1][j+1] == 2&&turned == 0)

break;

}default:cout<

p = &your;

p->display();//通過基類指標呼叫派生類的虛函式

shengtai w;

w.init();

int i;

cout

while(i != 3)

return 0;

}

執行結果:

1.     類的繼承與虛函式的實現

2.     生態系統中空地、青草、兔子、狐狸演化的過程

演化一次

演化二次

Linux下模擬實現乙個微型shell

首先我們先看一下shell的執行過程 shell從使用者讀入字串 ls 並建立乙個新的程序,在那個程序中執行ls程式並等待那個程序結束。然後shell讀取新的一行輸入,建立乙個新的程序,在這個程序中執行程式並等待這個程序結束。所以我們要寫乙個微型shell,需要迴圈以下過程 獲取終端輸入。解析輸入 ...

C 課程設計之C語言函式查詢管理系統

求助!c語言函式查詢管理系統 c語言函式比較多且豐富,全部記住是不可能的,請設計乙個c語言函式查詢系統幫助大家快速熟悉和掌握這些函式的用途和使用方法。要求設計的類中至少包含 函式編號 函式名 函式功能 所在標頭檔案名字 功能型別編號。要求 1 讀入裝有c函式資料的檔案 2 增加新的c語言函式 3 刪...

如何設計乙個微型分布式架構?

序言 初衷 快取伺服器儲存模型架構 背景 隨著業務頻寬自然增長,使用者端頻寬增長,假設業務回源率不變的情況下,磁碟快取淘汰更新 淘汰 速率變快,表現為以下業務瓶頸 iowait變高 回源頻寬變高,由於磁碟空間大小受限的快取淘汰導致回源率變高 為了說明這個原理。我們假設兩個極端 乙個是裝置磁碟容量無限...