目錄表
國立屏東大學 資訊工程系 物件導向程式設計
Turnin 作業 1
緊急通知:本週cpp.hw0及cpp.hw截限時間延長一週
本校計網中心於今日(2/26) 下午4:45分中斷ws對外連線,使用校內網路的同學仍可以正常連線使用ws,但校外網路將無法連線使用。目前本系系計算機中心(dcc@csie)已有新的因應方式,提供使用校外網路的同學以安全方式取得專屬連線port來進行連線,詳細做法將於下週課堂上和同學們說明。因此本週應繳交的turnin作業cpp.hw0及cpp.hw1,其截限時間皆順延一週,請同學幫忙轉告其它修課同學。
- Turnin Code: cpp.hw1
- Due Date: 3/2 Monday 23:59:00 (midnight) Hard Deadline
- 本次作業繳交期限為
3 月 2 日3月9日 週一晚上 11 點 59 分 0 秒!
繳交方式說明
本次 Turnin 作業包含多個程式題,建議先為本次 turnin 要繳交的內容建立一個外層資料夾(例如:hw1),切換到該資料夾後再為每一題建立一個內層資料夾(每一題的資料夾名稱已寫於題目前方,例如第一題的資料夾名稱為「p1」,第二題的為「p2」,餘以此類推),進入到內層資料夾才依照題目要求進行編撰。
同學們可參考如下命令列操作:
<ssh 登入系計中後> [user@ws ~]$ mkdir hw1 # 在家目錄建立了一個名為「hw1」的資料夾 [user@ws ~]$ cd hw1 # 進入「hw1」資料夾 [user@ws hw1]$ mkdir p1 # 建立一個名為「p1」資料夾 [user@ws hw1]$ cd p1 # 切換到「p1」資料夾 [user@ws p1]$ joe rectangle_area.cpp # 使用 JOE 編輯器對檔名 rectangle_area.cpp 的檔案進行編輯
等到我們完成 p1 的撰寫後,請自行加以編譯與執行程式,確認正確無誤後回到外層資料夾使用 turnin▴cpp.hw1▴p1↵ 指令完成繳交第一題的整個資料夾:
[user@ws p1]$ cd .. # 回到上一層資料夾 [user@ws hw1]$ turnin cpp.hw1 p1 # 使用 turnin 指令提交 p1 的程式碼 Turning in: p1/rectangle_area.cpp -- ok All done. [user@ws hw1]$
當然,你也可以等到本次作業要求的所有題目都在 hw1 資料夾裡完成後,一次將所有在目前資料夾中的所有檔案都加以上傳。
假設你已經在 hw1 資料夾裡完成所有題目,同時確認檔案的繳交格式正確,並且每個題目的程式檔案皆成功編譯並確認執行結果正確後,我們可以使用以下指令將多餘的(不需要繳交的)檔案加以刪除後,一次將所有檔案繳交:
[user@ws hw1]$ ls # 檢視當前資料夾下有哪些內容 p1 p2 [user@ws hw1]$ rm -f */a.out # 移除所有子資料夾中的 a.out 檔案 [user@ws hw1]$ turnin cpp.hw1 . # 使用 turnin 指令繳交該資料夾下的所有內容 Turning in: ./p6/bmr.cpp -- ok ./p9/color_xor.cpp -- ok ./p3/c_2_f.cpp -- ok ./p1/rectangle_area.cpp -- ok ./p10/26_to_10.cpp -- ok ./p2/rounded.cpp -- ok ./p7/find_letter.cpp -- ok ./p8/verify.cpp -- ok ./p5/pace.cpp -- ok ./p4/score.cpp -- ok All done. [user@ws hw1]$
如果繳交後想要查看已繳交的檔案及相關資訊,可以輸入 turnin▴-ls▴cpp.hw1↵ 指令,例如:
.: total 40 drwxrwx---. 2 turninman turnin 4096 Feb 24 10:58 p1 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p10 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p2 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p3 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p4 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p5 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p6 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p7 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p8 drwxrwx---. 2 turninman turnin 4096 Feb 24 11:05 p9 ./p1: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 10:58 rectangle_area.cpp ./p10: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 26_to_10.cpp ./p2: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 rounded.cpp ./p3: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 c_2_f.cpp ./p4: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 score.cpp ./p5: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 pace.cpp ./p6: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 bmr.cpp ./p7: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 find_letter.cpp ./p8: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 verify.cpp ./p9: total 0 -rw-rw----. 1 turninman turnin 0 Feb 24 11:05 color_xor.cpp
本文使用「▴」及「↵」代表「空白字元」與「Enter 換行字元」,並且將使用者輸入的部份使用灰階方式顯示。
另外,題目的執行結果中,如果出現「(」、「)」、「:」、「;」、「.」與「,」等符號,皆為英文半形!
本學期作業繳交需要為每一題建立一個資料夾(資料夾名稱為該題題目前方之代號,第一題為「p1」,第二題為「p2」,餘以此類推),繳交方式可參考上述內容,任何未依照正確繳交格式的檔案將以 0 分計。
p1 計算矩形面積
請設計一個 C++ 語言的程式 rectangle_area.cpp,讓使用者輸入矩形的長與寬,計算該矩形的面積後將結果加以輸出。此題的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
請輸入矩形的長(公分):▴123↵
請輸入矩形的寬(公分):▴456↵
此矩形的面積為▴56088▴平方公分↵
[3:23 user@ws hw] ./a.out↵
請輸入矩形的長(公分):▴3.14↵
請輸入矩形的寬(公分):▴1.732↵
此矩形的面積為▴5.43848▴平方公分↵
[3:23 user@ws hw]
註:本題如有使用浮點數的需求,請使用 double 做為相關變數的資料型態。
p2 四捨五入至整數位
請設計一個 C++ 語言程式 rounded.cpp,接收使用者輸入的一個浮點數後,將其小數部份四捨五入後輸出,其執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
Floating▴point▴number:▴3.141↵
The▴rounded▴value▴is▴3.↵
[3:23 user@ws hw] ./a.out↵
Floating▴point▴number:▴21.5↵
The▴rounded▴value▴is▴22.↵
[3:23 user@ws hw]
註:本題如有使用浮點數的需求,請使用 double 做為相關變數的資料型態。
p3 溫度轉換
請設計一個 C++ 語言的程式 c_2_f.cpp,讓使用者輸入一個攝氏溫度,計算並輸出對應的華氏溫度。
$$ Fahrenheit = Celsius \times \frac{9}{5} + 32 $$
本題的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
Celsius:▴0↵
Celsius▴0▴=▴Fahrenheit▴32.↵
[3:23 user@ws hw] ./a.out↵
Celsius:▴110↵
Celsius▴110▴=▴Fahrenheit▴230.↵
[3:23 user@ws hw]
註:本題如有使用浮點數的需求,請使用 double 做為相關變數的資料型態。
p4 成績計算
請設計一個 C++ 語言的程式 score.cpp,接收使用者所輸入的作業成績、期中考成績與期末考成績,計算其學期成績後加以輸出。學期成績計算公式為「作業成績 × 0.3 + 期中考成績 × 0.3 + 期末考成績 × 0.4」。本題的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
作業成績:▴80↵
期中考成績:▴75.5↵
期末考成績:▴85.4↵
學期成績為▴80.81▴分↵
[3:23 user@ws hw] ./a.out↵
作業成績:▴90↵
期中考成績:▴90↵
期末考成績:▴80↵
學期成績為▴86▴分↵
[3:23 user@ws hw]
註:本題如有使用浮點數的需求,請使用 double 做為相關變數的資料型態。
p5 配速計算
請設計一個 C++ 語言的程式 pace.cpp,讓跑者可以輸入路跑的里程距離以及所花費的時間,計算並輸出其配速後輸出。本題的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
請輸入距離(公里):▴10.5↵
請輸入時間↵
>▴分:▴67↵
>▴秒:▴36↵
您的配速為每公里▴6▴分▴26▴秒↵
[3:23 user@ws hw] ./a.out↵
請輸入距離(公里):▴21.2↵
請輸入時間↵
>▴分:▴118↵
>▴秒:▴32↵
您的配速為每公里▴5▴分▴35▴秒↵
[3:23 user@ws hw]
請注意配速的計算結果是跑者此趟每公里所花費的時間。
註:本題如有使用浮點數的需求,請使用 double 做為相關變數的資料型態。
本題使用者所輸入的距離應該會使用 double 型態的變數來保存,接著取得的時間的分與秒都是整數。
由於配速的計算結果是跑者此趟每公里所花費的時間,因此應該使用 「配速=時間/距離」來計算。其中在時間的部份,你必須先考慮採用分鐘或秒鐘為單位,再除以距離。不論採用何種方式,所得到的「配速」應該會是浮點數。
剩下的問題是,最後還必須將「配速」這個浮點數再轉換為以幾分幾秒的方式呈現,在這個最後的步驟裡,分鐘的部份應該是整數,但秒數則有可能會是浮點數,此時請「無條件捨棄秒數後的小數」即可得到本題的答案。
p6 BMR計算
基礎代謝率 (Basal Metabolic Rate, BMR) 是指人一天所消耗的最低熱量(意即整天什麼事都不做也會消耗的熱量),以下是 BMR 的計算公式:
男性的 BMR = 88.362 +(13.397 × 體重)+(4.8 × 身高)−(5.67 × 年齡)
女性的 BMR = 447.593 +(9.247 × 體重)+(3.098 × 身高)−(4.33 × 年齡)
其中體重與身高的單位為公斤與公分。請設計一個可計算男性與女性 BMR 值的 C++ 語言程式 bmr.cpp,讓使用者輸入體重、身高與年齡,計算其基礎代謝率 (BMR) 後加以輸出。此程式的執行結果如下:
[3:23 user@ws hw] ./a.out↵
weight(kg):▴50.5↵
height(cm):▴162↵
age:▴38↵
bmr▴for▴male:▴1327.05▴kcal/day↵
bmr▴for▴female:▴1251.9▴kcal/day↵
[3:23 user@ws hw] ./a.out↵
weight(kg):▴72.5↵
height(cm):▴168↵
age:▴50↵
bmr▴for▴male:▴1582.54▴kcal/day↵
bmr▴for▴female:▴1421.96▴kcal/day↵
[3:23 user@ws hw]
註:本題如有使用浮點數的需求,請使用 double 做為相關變數的資料型態。
p7 找出某個字母後的第i個字母
請設計一個 C++ 語言的程式 find_letter.cpp。讓使用者先輸入一個小寫的英文字母 c,以及一個整數 i,請找出從字母 c 開始往後的第 i 的英文字母為何?請注意英文字母的順序是 a、b、c、…、y 到 z,若是尋找字母時已超過最後一個英文字母(也就是 z),則從字母 a 開始接續;換句話說,英文字母的順序是a、b、c、…、y 到 z 的循環。此程式的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
Enter▴the▴starting▴letter:▴a↵
Enter▴the▴number▴of▴positions▴to▴shift:▴3↵
3▴letters▴after▴a▴is▴d↵
[3:23 user@ws hw] ./a.out↵
Enter▴the▴starting▴letter:▴b↵
Enter▴the▴number▴of▴positions▴to▴shift:▴27↵
27▴letters▴after▴b▴is▴c↵
[3:23 user@ws hw]
p8 驗證碼計算
請設計一個 C++ 語言程式 verify.cpp,讓 COCORO 公司的員工輸入一個由 5 位數字組成的代碼(可以由 0 開頭),並依據以下要求完成其驗證碼之計算並加以輸出(注意,在以下要求中,5位數之代碼由右到左依序被稱為第一位數d1、第二位數d2、…、第五位數d5):
- 將第一位數及第二位數相加後乘以第三位數:(d1+d2)*d3
- 將第四及第五位數的數值相加(d4+d5)並乘以第五位數
- 將第1項的運算結果減去第2項的運算結果
- 將第3項的運算結果取絕對值
- 將第4項的運算結果的十位數做為驗證碼,並將其結果加以輸出
此題的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
Please▴input▴ID:▴54321↵
The▴verification▴code▴of▴54321▴is▴3.↵
[3:23 user@ws hw] ./a.out↵
Please▴input▴ID:▴12345↵
The▴verification▴code▴of▴12345▴is▴2.↵
[3:23 user@ws hw] ./a.out↵
Please▴input▴ID:▴00000↵
The▴verification▴code▴of▴00000▴is▴0.↵
[3:23 user@ws hw]
p9 RGB顏色運算
RGB是電腦系統所使用的一種表示顏色的方法,使用三個介於 0 到 255 的整數數值來分別表示構成特定顏色的紅(Red)、綠(Green)、藍(Blue)三原色。請設計一個 C++ 語言的程式 color_xor.cpp,讓使用者輸入一個顏色的 R、G、B 數值,並將其和灰色(R、G、B數值皆為 128 )進行 XOR 的運算後輸出結果顏色的 R、B、G 數值。注意,兩個顏色的 XOR 運算,就是將其 R、G、B 三原色的數值分別進行 XOR 運算。此程式的執行結果如下:
[3:23 user@ws hw] ./a.out↵
R=?▴200↵
G=?▴100↵
B=?▴50↵
Color(200,▴100,▴50)▴XOR▴Color(128,▴128,▴128)=Color(72,▴228,▴178)↵
[3:23 user@ws hw] ./a.out↵
R=?▴192↵
G=?▴168↵
B=?▴1↵
Color(192,▴168,▴1)▴XOR▴Color(128,▴128,▴128)=Color(64,▴40,▴129)↵
[3:23 user@ws hw]
p10 26進制數字轉換為10進制
假設有一個 26 進位的數字系統使用 a、b、c、…、x、y、z 等 26 個小寫的英文字母做為其數字符號,其中 a 為 10 進制的 0、b 為 10 進制的 1、c 為 10 進制的 2、…、x 為 10 進制的 23、為 10 進制的 24、z 為 10 進制的 25。請設計一個 C++ 語言程式 26_to_10.cpp,讓使用者輸入一個兩位數的 26 進制數字(請注意!本題的輸入一定會是兩位數的 26 進制數字),並將其轉換為10 進制的數值後加以輸出。 此題的執行結果可參考如下:
[3:23 user@ws hw] ./a.out↵
aa↵
(aa)_26=(0)_10↵
[3:23 user@ws hw] ./a.out↵
ba↵
(ba)_26=(26)_10↵
[3:23 user@ws hw] ./a.out↵
ax↵
(ax)_26=(23)_10↵
[3:23 user@ws hw] ./a.out↵
wu↵
(wu)_26=(592)_10↵
[3:23 user@ws hw]
