CPP Turnin作業3
國立屏東大學 資訊工程系 物件導向程式設計
Turnin作業3(選擇、迴圈、陣列、函式)
- Turnin Code: cpp.hw3
- Due Date: 4/3 00:00 Hard Deadline
繳交方式說明
本次Turnin作業包含多個程式題,請為每一題建立一個資料夾,並將該題所要上傳的檔案放置其中後,再使用turnin指令上傳作業。請同學先為本次作業建立一個資料夾hw3,然後在hw3裡分別為每一題建立一個子資料夾,用以進行每一題的作答以及上傳。每一題的子資料夾名稱已寫於題目前方,請務必依照題目的規定建立子資料夾,例如第1題為p1、第2題為p2,餘依此類推。當我們完成某一個題目的作答後,就可以使用turnin指令將該題的答案上傳。以第1題為例,當我們在p1子資料夾裡完成作答後,就可以回到hw3資料夾,使用以下指令將其上傳:
[3:23 user@ws hw3] turnin▴cpp.hw3▴p1↵
當然,你也可以等到所有題目都完成後,回到hw3資料夾,使用以下指令將所有題目都加以上傳:
[3:23 user@ws hw3] turnin▴cpp.hw3▴.↵
註:本文使用▴及↵代表空白字元與Enter換行字元,並且將使用者輸入的部份使用灰階方式
顯示。
p1 完美數
若一個整數所有真因數(除了本身以外的因數)的和等於其本身的數值,則稱為完美數(Perfect Number)。例如6的真因數有1、2與3,又1+2+3=6,所以6是一個完美數。
[9:19 user@ws hw]
請注意本題只須上傳barchart.cpp檔案。 ===== p4 10點半遊戲點數計算 ===== 請參考下面的main.cpp以及value.h程式:
#include <iostream> #include <iomanip> #include "10andhalf.h" using namespace std; int main() { getCards(); showCards(); cout.precision(1); cout << fixed << calculatePoint() << " Points" << endl; }
extern int card[5]; void getCards(); void showCards(); void showACard(int); double calculatePoint();你必須完成名為10andhalf.cpp的C語言程式,其中包含相關的函式實作。此程式完成後,可讓使用者輸入至多5張撲克牌(以-1代表沒有),請依據十點半游戲規則計算並輸出其點數。
注意: 此題如同過去我們所使用過的方法(和C課本上的撲克牌遊戲程式設計一樣),使用整數0~51做為一副52張的撲克牌,其中0~12為♠、13~25為♥、26~38為♦、39~51為♣;代表每張撲克牌的整數除以13的餘數再加1,即為其牌面點數。
十點半的點數計算規則很簡單,每張牌以其牌面點數計算,但J、Q、K算半點。例如牌型A、3、10、J的點數為14.5點;3、Q、K為4點。
本題的相關程式將使用以下的Makefile進行編譯:
all: main.cpp 10andhalf.o c++ main.cpp 10andhalf.o 10andhalf.o: 10andhalf.cpp 10andhalf.h c++ -c 10andhalf.cpp clean: rm -f *.o *~ *.*~ a.out
此題的執行結果如下:
[3:23 user@ws hw] ./a.out↵
13▴17▴27▴40▴25↵
[♥A][♥5][♦2][♣2][♥K]10.5▴Points↵
[3:23 user@ws hw] ./a.out↵
0▴20▴-1▴-1▴-1↵
[♠A][♥8]9.0▴Points↵
[3:23 user@ws hw] ./a.out↵
-1▴12▴28▴-1▴51↵
[♠K][♦3][♣K]4.0▴Points↵
[3:23 user@ws hw]
注意1:本題只需繳交10andhalf.cpp,其它檔案則不需繳交。
注意2:本題所有測試檔所輸入的撲克牌皆為正確的數值(0-51,或使用-1表示沒有)。