NTOU-CS C++ Program Design

Instructor: Pei-yih Ting

Date: 88/02/26

Assignment #1, 請於88/03/05日繳交第一部分,87/03/12 日繳交第二部分

  1. Racing simulation using C --- I

    請以C 語言製作一程式模擬龜兔賽跑之情景,程式要點如下:

    1. 每單位時間 (例如:分鐘) 烏龜走一單位長度,兔子走三單位長度

    2. 兔子每當發現自己比烏龜快五單位長度時就會停下來休息,休息時間為五至二十單位時間,確實時間由亂數決定

    3. 跑道總長度為七十五單位長度

    4. 請以DOS 文字模式模擬輸出, 兔子以 "r" 代表,而烏龜以 "t" 表示, 在Borland/Turbo C 中控制文字模式中游標位置的函式為 conio.h 中的 void gotoxy(int x, int y); 例如將游標移至第五列第二十行可呼叫 gotoxy(20, 5);

    5. 由於在每一單位時間內並沒有細分任何動作, 模擬程式可以用一迴圈來模擬單位時間,輪流執行龜與兔之動作, (有時誰先走會造成結果不太一樣, 因此也可以使用亂數決定在每一單位時間內兩者執行之順序), 為了讓使用者慢慢地觀察執行模擬的結果,每一迴圈可以利用 sleep() 或是 delay() 加入一些延遲。

    % 練習重點:

    1. 練習如何撰寫模擬實際世界中系統運作的程式 (C 程式不單單可以做資料處理) 你必須熟悉 C 程式之設計與製作, 本程式將繼續擴充, 直到 C 程式無法充分支援後轉用 C++ 來製作

    2. 練習狀態圖的製作

    3. 注意所有資料都沒有任何保護


  2. Racing simulation using C---II

    請直接修改練習一中龜兔賽跑程式, 現在有二隻兔子二隻烏龜, 這二隻兔子的特性不太一樣, 個別依下述規則賽跑:

    1. 第一隻每單位時間走三單位長度, 當牠發現比所有參賽烏龜快五單位長度時會停下來休息八單位時間。

    2. 第二隻每單位時間走四單位長度, 當牠發現比所有參賽者快六單位長度時會停下來休息十單位時間。

    兩隻烏龜一隻每單位時間走一步, 一隻每單位時間走兩步,跑道總長度為 80 單位長度。

    % 練習重點:

    1. 以陣列表達所有資料,主程式中分別以不同變數來掌握所有物件的動態太複雜

    2. 以結構取代陣列來表達群組資料的抽象化

    3. 程式裡動作與資料是分離的兩件事情, 用資料來控制程式運作, 資料是給程式更改的, 程式任何地方都可以修改任何資料, 資料沒有保護

    4. 模擬實際運作系統的軟體常常會需要處理很多獨立運作的物體, 各物體間互相藉訊息溝通與協調, 試想此練習中兔子和烏龜的數目再增加後、 又各自有各自的決策方式, 若都置於主程式中造成主程式太複雜, 不容易增加及維護功能 (例如第二隻兔子每次休息的時間由亂數決定, 第一隻兔子每次決定要休息的條件由亂數決定, 或是第二隻烏龜走兩步退一步等等)