NTOU-CS C++ Program Design
Instructor: Pei-yih Ting
Date: 88/02/26
Assignment #1, 請於88/03/05日繳交第一部分,87/03/12 日繳交第二部分
- Racing simulation using C --- I
請以C 語言製作一程式模擬龜兔賽跑之情景,程式要點如下:
-
每單位時間 (例如:分鐘) 烏龜走一單位長度,兔子走三單位長度
-
兔子每當發現自己比烏龜快五單位長度時就會停下來休息,休息時間為五至二十單位時間,確實時間由亂數決定
-
跑道總長度為七十五單位長度
-
請以DOS 文字模式模擬輸出,
兔子以 "r" 代表,而烏龜以 "t" 表示,
在Borland/Turbo C 中控制文字模式中游標位置的函式為 conio.h
中的 void gotoxy(int x, int y);
例如將游標移至第五列第二十行可呼叫 gotoxy(20, 5);
-
由於在每一單位時間內並沒有細分任何動作,
模擬程式可以用一迴圈來模擬單位時間,輪流執行龜與兔之動作,
(有時誰先走會造成結果不太一樣,
因此也可以使用亂數決定在每一單位時間內兩者執行之順序),
為了讓使用者慢慢地觀察執行模擬的結果,每一迴圈可以利用
sleep() 或是 delay() 加入一些延遲。
% 練習重點:
-
練習如何撰寫模擬實際世界中系統運作的程式
(C 程式不單單可以做資料處理)
你必須熟悉 C 程式之設計與製作,
本程式將繼續擴充,
直到 C 程式無法充分支援後轉用 C++ 來製作
-
練習狀態圖的製作
-
注意所有資料都沒有任何保護
- Racing simulation using C---II
請直接修改練習一中龜兔賽跑程式,
現在有二隻兔子二隻烏龜,
這二隻兔子的特性不太一樣,
個別依下述規則賽跑:
-
第一隻每單位時間走三單位長度,
當牠發現比所有參賽烏龜快五單位長度時會停下來休息八單位時間。
-
第二隻每單位時間走四單位長度,
當牠發現比所有參賽者快六單位長度時會停下來休息十單位時間。
兩隻烏龜一隻每單位時間走一步,
一隻每單位時間走兩步,跑道總長度為 80 單位長度。
% 練習重點:
-
以陣列表達所有資料,主程式中分別以不同變數來掌握所有物件的動態太複雜
-
以結構取代陣列來表達群組資料的抽象化
-
程式裡動作與資料是分離的兩件事情,
用資料來控制程式運作,
資料是給程式更改的,
程式任何地方都可以修改任何資料,
資料沒有保護
-
模擬實際運作系統的軟體常常會需要處理很多獨立運作的物體,
各物體間互相藉訊息溝通與協調,
試想此練習中兔子和烏龜的數目再增加後、
又各自有各自的決策方式,
若都置於主程式中造成主程式太複雜,
不容易增加及維護功能 (例如第二隻兔子每次休息的時間由亂數決定,
第一隻兔子每次決定要休息的條件由亂數決定,
或是第二隻烏龜走兩步退一步等等)