使用者工具

網站工具


cpp:2025spring:hw6

Turnin作業6

  • Turnin Code: cpp.hw6
  • Due Date: 4/13 Sunday 23:59 (midnight) Hard Deadline
  • 本次作業繳交期限為4月13日週日晚上11點59分0秒!

繳交方式說明

本次Turnin作業包含多個程式題,建議同學可以為這次作業先建立一個資料夾hw6,然後在該資料夾內再為每一題建立一個子資料夾,用以進行每一題的作答以及上傳。每一題的子資料夾名稱已寫於題目前方,請務必依照題目的規定建立子資料夾,例如第1題為p1、第2題為p2,餘依此類推。當我們完成某一個題目的作答後,就可以使用turnin指令將該題的答案上傳。以第1題為例,當我們在p1子資料夾裡完成作答後,就可以回到hw6資料夾,使用以下指令將其上傳:

[user@ws hw6]$ turnin▴cpp.hw6▴p1↵

當然,你也可以等到所有題目都完成後,再回到hw6資料夾,使用以下指令將所有題目都加以上傳:

[user@ws hw6]$ turnin▴cpp.hw6▴.↵

本文使用▴及↵代表空白字元與Enter換行字元,並且將使用者輸入的部份使用灰階方式顯示。 另外,題目的執行結果中,如果出現(、)、:、;、.與,等符號,皆為英文半形!

當你完成此次作業的繳交後,可以使用turnin指令的-ls參數,查看已繳交的結果。若已經正確地依要求繳交此次作業,那麼你將可以看到類似以下的查詢結果:

[user@ws cpp.hw6]$ turnin -ls cpp.hw6
.:
total 20
drwxrwx---. 2 turninman turnin 4096 Mar 30 13:05 p1
drwxrwx---. 2 turninman turnin 4096 Mar 30 13:05 p2
drwxrwx---. 2 turninman turnin 4096 Mar 30 13:05 p3
drwxrwx---. 2 turninman turnin 4096 Mar 30 13:05 p4
drwxrwx---. 2 turninman turnin 4096 Mar 30 13:05 p5

./p1:
total 4
-rw-rw----. 1 turninman turnin 814 Mar 30 13:06 login.cpp

./p2:
total 4
-rw-rw----. 1 turninman turnin 413 Mar 30 13:06 findFruitPrice.cpp

./p3:
total 4
-rw-rw----. 1 turninman turnin 653 Mar 30 13:06 count.cpp

./p4:
total 4
-rw-rw----. 1 turninman turnin 928 Mar 30 13:06 sortStrings.cpp

./p5:
total 4
-rw-rw----. 1 turninman turnin 262 Mar 30 13:06 palindrome.cpp

【注意:以上的執行結果僅供參考,包含檔案上傳的日期、時間、大小等皆會依實際情況有所不同,請自行仔細檢查是否有正確繳交。】

若是發現自己繳交錯誤的同學,也可以使用以下的指令,將此次作業所有已上傳的檔案與資料夾全部清空:

[user@ws hw6]$ turnin▴-rm▴cpp.hw6▴.↵

可以在寫作業前先輸入以下指令獲取這個功課的資料夾 :)

cp -r /home/stu/public/cpp2025s/cpp.hw6 .

可以在繳交功課前先使用tree指令確認資料夾下的檔案~

[user@ws cpp.hw6]$ tree .
.
├── p1
│   └── login.cpp
├── p2
│   └── findFruitPrice.cpp
├── p3
│   └── count.cpp
├── p4
│   └── sortStrings.cpp
└── p5
    └── palindrome.cpp

6 directories, 5 files


同學們如果要獲取題目中的標頭檔或是cpp檔案,可以到/home/stu/public/cpp2025s/cpp.hw6/的各個子資料夾獲取題目的檔案歐!(雖然下面有指令可以直接輸入但還是提醒一下)

p1 登入程式

請完成一個 cpp 語言程式login.cpp,讓使用者輸入帳號及密碼(大小寫視為不同字元),依據下表進行檢查以完成系統登入驗證:

帳號 密碼
Amy Liu Show me the money
Bob Wang I forgot
Tony Chou Let me in

若使用者登入成功,則印出“Welcome,▴XXX!”(XXX為帳號名);若登入失敗,則依帳號或密碼錯誤輸出“Wrong▴Account!”或“Wrong▴Password!”。此題的執行結果可參考如下: 此題的執行結果可參考如下:

[user@ws hw] ./a.out↵
Account:▴Amy▴Liu↵
Password:▴Show▴me▴the▴money↵
Welcome,▴Amy▴Liu!↵
[user@ws hw] ./a.out↵
Account:▴Amy▴liu↵
Wrong▴Account!↵
[user@ws hw] ./a.out↵
Account:▴Bob▴Wang↵
Password:▴I▴forget↵
Wrong▴Password!↵
[user@ws hw]

『提示』:本題可使用定義在string類別的compare()函式,來進行兩個字串內容的比較;當兩個字串內容相同時,該函式將會傳回0。

p2 頭家,水果多少

如果尚未獲取題目資料夾可以在p2資料夾使用下列指令:

cp -r /home/stu/public/cpp2025s/cpp.hw6/p2/* .

請參考以下的程式碼 main.cpp 與 findFruitPrice.h filename : 'main.cpp'

#include <iostream>
#include <string>
#include "findFruitPrice.h"
 
using namespace std;
 
int main() {
    ios::sync_with_stdio(false);
    wcin.imbue(locale("C.UTF-8"));
    wcout.imbue(locale("C.UTF-8"));
 
    wstring fruits[5] = {L"蘋果", L"香蕉", L"櫻桃", L"榴蓮", L"蓮霧"};
    int prices[5] = {15, 20, 2, 40, 10};
 
    wstring fruitName;
    wcout << L"請輸入水果名稱: ";
    wcin >> fruitName;
 
    bool found = findPrice(fruitName, fruits, prices);
 
    return 0;
}

filename : 'findFruitPrice.h'

#include <string>
using std::wstring;
bool findPrice(wstring fruitName, wstring fruits[], int prices[]);

設計一個CPP語言程式findFruitPrice.cpp,其中包含定義在findFruitPrice.h裡的findPrice()函式的實作。此函式將接收一個代表水果名稱的字串,以及兩個分別代表5種水果的名稱及價錢的陣列。 主要功能為讓使用者輸入一個水果的名稱,然後查找在使用者所輸入的水果價格並加以輸出(若找不到對應的水果價格!)。本題請同學使用多位元組字串來進行相關的程式設計。本題所要查找的水果名稱單價如下表所示:

水果名稱 單價
蘋果 15
香蕉 20
櫻桃 2
榴蓮 40
蓮霧 10

此函式完成後,可讓我們查找在使用者所輸入的水果價錢並加以輸出。此題可使用以下的Makefile進行編譯。

filename : 'Makefile'

all: main.cpp findFruitPrice.o
	c++ main.cpp findFruitPrice.o
 
findFruitPrice.o: findFruitPrice.cpp findFruitPrice.h
	c++ -c findFruitPrice.cpp
 
clean:
	rm -f *.o *~ *.*~ a.out

此題的參考結果可參考如下:

[user@ws hw] ./a.out↵
請輸入水果名稱:▴蘋果↵
蘋果的價格為15元↵
[user@ws hw] ./a.out↵
請輸入水果名稱:▴蘋▴果↵
找不到對應的水果價格!↵
[user@ws hw] ./a.out↵
請輸入水果名稱:▴火龍果↵
找不到對應的水果價格!↵
[user@ws hw]

各位同學好,由於系計中目前只支援“C.UTF-8”,所以並未使用課本上所教學的“zh_TW.UTF-8”來進行字元的設定,謝謝各位:)

p3 計算字串中的英文字元!

請完成一個C++語言的程式 count.cpp,讓使用者輸入一個不超過80個字元的字串(含 '\0' 空字元在內),請計算使用者所輸入的字串中,每個英文字母輸入了多少次(大小寫視為相同)。此題的執行結果可參考如下:

[user@ws hw] ./a.out↵
A▴Santa▴at▴NASA.↵
A(6)↵
N(2)↵
S(2)↵
T(2)↵
[user@ws hw] ./a.out↵
In▴2024,▴this▴book▴just▴published!↵
B(2)↵
D(1)↵
E(1)↵
H(2)↵
I(3)↵
J(1)↵
K(1)↵
L(1)↵
N(1)↵
O(2)↵
P(1)↵
S(3)↵
T(2)↵
U(2)↵
[user@ws hw] ./a.out↵
123456678↵
None▴of▴the▴English▴letters!↵
[user@ws hw]

p4 排序字串!

請設計一個CPP語言的程式sortStrings.cpp,讓使用者反覆輸入不超過10個字串或是輸入“End”為止。請將使用者所輸入的字串內容進行排序後輸出(依英文字在字典中的順序加以輸出,又稱為Lexicographical Order)。此題執行結果可參考如下:

[user@ws hw] ./a.out↵
banana↵
cherry↵
apple↵
End↵
apple↵
banana↵
cherry↵
[user@ws hw] ./a.out↵
poke↵
coke↵
joke↵
joy↵
box↵
boy↵
cow↵
bill↵
wow↵
jelly↵
bill↵
box↵
boy↵
coke↵
cow↵
jelly↵
joke↵
joy↵
poke↵
wow↵
[user@ws hw] ./a.out↵
kevin↵
end↵
Gimmy↵
Yvonne↵
End↵
Gimmy↵
Kevin↵
Yvonne↵
end↵
[user@ws hw]

p5 熟悉的判斷迴文題目出現了!

如果尚未獲取題目資料夾可以在p5資料夾使用下列指令:

cp -r /home/stu/public/cpp2025s/cpp.hw6/p5/* .

請設計一個 CPP 程式palindrome.cpp,讓使用者輸入一個字串,程式應檢查該字串是否為迴文(Palindrome)。 迴文是指正著讀與反著讀都相同的字串,例如:“madam”、“racecar”、“level”。

* filename:* main.c

#include <iostream>
#include "palindrome.h"
 
using namespace std;
 
int main() {
    string input;
    cout << "Please input a string: ";
    getline(cin, input); 
 
    if (isPalindrome(input)) {
        cout << "\"" << input << "\" is a palindrome!" << endl;
    } else {
        cout << "\"" << input << "\" is not a palindrome!" << endl;
    }
 
    return 0;
}
filename:palindrome.h
#include <iostream>
using namespace std;
bool isPalindrome(string str);

all: main.cpp palindrome.o
	c++ main.cpp palindrome.o
 
palindrome.o: palindrome.cpp palindrome.h
	c++ -c palindrome.cpp
 
clean:
	rm -f *.o *~ *.*~ a.out

[user@ws hw] ./a.out↵
Please▴input▴a▴string:▴asdsa↵
“asdsa”▴is▴a▴palindrome!↵
[user@ws hw] ./a.out↵
Please▴input▴a▴string:▴dsa↵
“dsa”▴is▴not▴a▴palindrome!↵
[user@ws hw]

cpp/2025spring/hw6.txt · 上一次變更: 2025/04/02 03:00 由 junwu

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki