2007年9月15日 星期六

C 程式設計作業六,使用函數和隨機數

作業內容:
以下是我們自己編的科幻故事。

在阿米爾‧艾克塞爾(Amir A. Aczel)的書「機率1:第二個地球」中,告訴你另一個地球存在的機率是 1 ,而這個故事是發生在七姐妹星團中的艾達星球,再艾達星球的人類每年都會為高中生舉辦一場智力寵物的培養大賽。

這種寵物的名字叫凱立歐(Cleo),在 α (Alpha)、β (Bravo)、γ(Gamma)三種射線照射一會兒之後,會產生出下一帶,經過約一天的餵養成長,即可長大,約有一呎長,所以平均一天可以產生一個新的子代。

長大的凱立歐可以透過簡單的電子掃描得知其智力,它的智力會依三種射線照射強度不同,而有所變化,三種射線的強度在 -32.0 到 32.0 之間。

這個競賽的內容如下,在300天的期限內,你必須養出一隻凱立歐,它的智力必須超過180,可能的智力範圍在 0~200之間,每隻凱立歐都會標示它所受到三種射線的強度。你可以經過適當控制讓這隻凱立歐產生 n 隻凱立歐, n 在 1~50之間,每天只能留下智力最佳一隻,做為生產下一代用,其餘的凱立歐必須由回收中心收回。

你只有300天的時間完成這項競賽,你必須改變這三種射線的值,以期待下一代的凱立歐會更聰明。

重要步驟:
1. 在開始寫這個程式之前,你必須下載三個檔案 fvaldll.afval.dllfval.h,放在與你主程式相同的目錄中。
2. 在你的主程式中,必須加上這一行:#inlcude "fval.h"。
3. 在Dev-C++中的Tools -> Compiler Options 中,設定連結加入fvaldll.a 檔案,如下圖。


4. 使用程式設計的方法來找出最佳的三種射線的強度組合,一次流程如下:
第一步:獲得第一隻凱立歐;呼叫 initPetPar()函數三次,來產生每一個射線的初始強度。
第二步:產生 n 隻子代凱立歐,n >= 1(自行決定)。方法是以父代的射線值(三個射線的處理方式相同),去加減一個隨機數,以產生不同的子代。
例如:yi = xi ± m,d <= m <= u,亦即 m 是 d 至 u 之間的隨機數。且 1 <= i <= 50。
第三步:計算每一隻凱立歐的智力,智力的計算方式是呼叫
IQEval(double, double, double),例如 myiq = IQEval(a1, b1, r1);。
第四步:在父代和子代的集合中,找出智力最佳的一隻做為第二天的父代。
第五步:如果300天沒用完,就回到第二步。
第六步:列印出凱立歐的智力與其使用的三個射線值。
5. 請連續執行三十次,每次都有不同的亂數序列,最後使用算出最佳智力的平均值。
解答下載
回到作業目錄
回到首頁

1 則留言:

一個人的胡言亂語 提到...

那個..dll載點失效了哦~