使用者工具

網站工具


cpp:2025spring:hw5

Turnin作業5

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

繳交方式說明

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

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

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

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

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

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

[cbb110213@ws hw5]$ turnin -ls cpp.hw5
.:
total 16
drwxrwx---. 2 turninman turnin 4096 Mar 16 20:52 p1
drwxrwx---. 2 turninman turnin 4096 Mar 16 20:52 p2
drwxrwx---. 2 turninman turnin 4096 Mar 16 20:52 p3
drwxrwx---. 2 turninman turnin 4096 Mar 16 20:52 p4

./p1:
total 4
-rw-rw----. 1 turninman turnin 105 Mar 16 20:52 myfunctions.cpp

./p2:
total 4
-rw-rw----. 1 turninman turnin 184 Mar 16 20:52 homework.cpp

./p3:
total 4
-rw-rw----. 1 turninman turnin 96 Mar 16 20:52 template.h

./p4:
total 4
-rw-rw----. 1 turninman turnin 791 Mar 16 20:52 matrix.cpp

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

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

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

請再開始寫作業前先輸入以下指令獲取這個功課的資料夾 :)

cp -r /home/stu/public/cpp2025s/cpp.hw5 .
可以在實作功課前先使用tree指令確認資料夾下的檔案~

[user@ws cpp.hw5]$ tree .
.
├── p1
│   ├── Makefile
│   ├── main.cpp
│   └── myfunctions.h
├── p2
│   ├── Makefile
│   ├── homework.h
│   └── main.cpp
├── p3
│   ├── Makefile
│   └── main.cpp
└── p4
    ├── Makefile
    ├── main.cpp
    └── matrix.h


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

p1 數值和與最大值

此題為課本上第九章之習題,課本第321頁的第六題。
如果沒有獲取整個功課資料夾,請先在題目資料夾中輸入以下指令!

cp -r /home/stu/public/cpp2025s/cpp.hw5/p1/. .
請參考以下的程式碼main.cpp與myfunctions.h(可於網路下載並解壓縮本書習題相關檔案後,在/exercises/ch9/6目錄中取得):

filename: `main.cpp`

#include <iostream>
using namespace std;
#include "myfunctions.h"
 
int main()
{
    int x,y;
    cout << "請輸入兩個整數: ";
    cin >> x >> y;
 
    cout << x << "與" << y << "的和為" << sum(x,y) << endl;
    cout << x << "與" << y << "的最大值為" << max(x,y) << endl;
}

filename: `myfunctions.h`

int sum(int, int);
int max(int, int);

你必須完成myfunctions.cpp,其中包含sum()與max()函式的實作。此程式完成,可讓使用者輸入兩個數字,並且輸出兩數相加的和,以及輸出其最大值為何。此題可使用以下Makefile進行編譯(可自行下載取得): filename: `makefile`

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

實作完成後請上傳myfunctions.cpp檔案

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

[user@ws hw]$ ./a.out↵
請輸入兩個整數:▴3▴5↵
3與5的和為8↵
3與5的最大值為5↵
[user@ws hw]$ ./a.out↵
請輸入兩個整數:▴32▴23↵
32與23的和為55↵
32與23的最大值為32↵
[user@ws hw]$

p2 作業成績的最高分計算

此題為課本上第九章之習題,課本第322頁的第七題。
如果沒有獲取整個功課資料夾,請先在題目資料夾中輸入以下指令!

cp -r /home/stu/public/cpp2025s/cpp.hw5/p2/. .
filename : 'main.cpp'
#include <iostream>
using namespace std;
#include "homework.h"
 
int main()
{
   int homework[size];
 
   cout << "請輸入10筆作業成績:" << endl;
   for (int i = 0; i < size; i++)
   {
      cin >> homework[i];
   }
 
   cout << "前8筆中的最高分是" << maxHomeworkScore(homework, 8) << endl;
   cout << "前5筆中的最高分是" << maxHomeworkScore(homework, 5) << endl;
   cout << "所有作業的最高分是" << maxHomeworkScore(homework) << endl;
}
filename : 'homework.h'
#define size 10
int maxHomeworkScore(int hw[], int num = 10);
你必須完成名為homework.cpp,其中包含maxHomeworkScore()函式的實作。此程式完成後,可讓使用者輸入10筆作業成績,並且輸出載10筆作業成績中前8筆、前5筆以及全部10筆當中的最高分數並加以輸出。此題可使用以下的makefile進行編譯(可自行下載取得):
filename : 'Makefile'
all: main.cpp homework.o
	c++ main.cpp homework.o
 
homework.o: homework.cpp homework.h 
	c++ homework.cpp -c
 
clean:
	rm -f *.cpp~ *.h~ *~ *.o a.out

實作完成後請上傳homework.cpp檔案

[user@ws hw]$ ./a.out↵
請輸入10筆作業成績:↵
10▴20▴30▴40▴50▴60▴70▴80▴90▴100↵
前8筆中的最高分是80↵
前5筆中的最高分是50↵
所有作業的最高分是100↵
[user@ws hw]$ ./a.out↵
請輸入10筆作業成績:↵
79▴25▴88▴64▴82▴60▴97▴80▴98▴10↵
前8筆中的最高分是97↵
前5筆中的最高分是88↵
所有作業的最高分是98↵
[user@ws hw]$

p3 輸出兩個數值的最大值

此題為課本上第九章之習題,課本第323頁的第八題。
如果沒有獲取整個功課資料夾,請先在題目資料夾中輸入以下指令!

cp -r /home/stu/public/cpp2025s/cpp.hw5/p3/. .
filename: 'main.cpp'
#include <iostream>
using namespace std;
#include "template.h"
 
int main()
{
   int x, y;
   double a, b;
 
   cout << "請輸入兩個int整數: "; 
   cin >> x >> y;
   cout << "請輸入兩個double浮點數: ";
   cin >> a >> b;
 
   cout << "兩個整數的最大值是" << maxOf(x, y) << endl;
   cout << "兩個浮點數的最大值是" << maxOf(a, b) << endl;
}
你必須完成template.h標頭檔,其中包含使用函式樣板的方式完成maxOf()函式的實作,以支援任意資料型態的兩個數值比較與傳回最大值。此程式完成後,可讓使用者2個整數及2個浮點數,然後分別輸出它們兩兩間的最大值。此題可使用以下的Makefile進行編譯(可自行下載取得): filename:'Makefile'
all: main.cpp template.h
	c++ main.cpp 
 
clean:
	rm -f *.cpp~ *.h~ *~ *.o a.out

實作完成後請上傳template.h檔案

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

[user@ws hw]$ ./a.out↵
請輸入兩個int整數:▴3▴5↵
請輸入兩個double浮點數:▴36.123▴15.223↵
兩個整數的最大值是5↵
兩個浮點數的最大值是36.123↵
[user@ws hw]$

p4 來試試看轉置矩陣吧!

如果沒有獲取整個功課資料夾,請先在題目資料夾中輸入以下指令!

cp -r /home/stu/public/cpp2025s/cpp.hw5/p4/. .
請參考以下的的程式碼main.cpp與matrix.h
filename: main.cpp
#include <iostream>
#include "matrix.h"
 
using namespace std;
 
int main() {
    int row, col;
    cout << "請輸入列數 (最多 10): ";
    cin >> row;
    cout << "請輸入行數 (最多 10): ";
    cin >> col;
 
    if (row > MAX_SIZE || col > MAX_SIZE) {
        cout << "錯誤:矩陣大小超出範圍!" << endl;
        return 0;
    }
 
    int matrix[MAX_SIZE][MAX_SIZE];  
    int result[MAX_SIZE][MAX_SIZE];  
 
    inputMatrix(matrix, row, col);
 
    cout << "輸入的矩陣:" << endl;
    printMatrix(matrix, row, col);
 
    transposeMatrix(matrix, result, row, col);
 
    cout << "轉置矩陣:" << endl;
    printMatrix(result, col, row);
 
    return 0;
}
filename: matrix.h
#define MAX_SIZE 10
void inputMatrix(int matrix[MAX_SIZE][MAX_SIZE], int row, int col);
void printMatrix(int matrix[MAX_SIZE][MAX_SIZE], int row, int col);
void transposeMatrix(int matrix[MAX_SIZE][MAX_SIZE], int result[MAX_SIZE][MAX_SIZE], int row, int col);
請參考上述的程式碼寫出matrix.cpp,並用下列Makefile來進行編譯
filename: Makefile
all: main.cpp matrix.o
	c++ main.cpp matrix.o
 
matrix.o: matrix.cpp matrix.h
	c++ matrix.cpp -c
 
clean: rm -f *.cpp~ *.h~ *~ *.o~ a.out

實作完成後請上傳matrix.cpp檔案

[user@ws hw]$ ./a.out↵
請輸入列數▴(最多▴10):▴3↵
請輸入行數▴(最多▴10):▴3↵
請輸入第▴1▴列的數值:▴1▴2▴3↵
請輸入第▴2▴列的數值:▴1▴2▴3↵
請輸入第▴3▴列的數值:▴1▴2▴3↵
輸入的矩陣:↵
1▴2▴3↵
1▴2▴3↵
1▴2▴3↵
轉置矩陣:↵
1▴1▴1↵
2▴2▴2↵
3▴3▴3↵
[user@ws hw]$ ./a.out↵
請輸入列數▴(最多▴10):▴2↵
請輸入行數▴(最多▴10):▴2↵
請輸入第▴1▴列的數值:▴1▴4↵
請輸入第▴2▴列的數值:▴2▴5↵
輸入的矩陣:↵
1▴4↵
2▴5↵
轉置矩陣:↵
1▴2↵
4▴5↵
[user@ws hw]$ ./a.out↵
請輸入列數▴(最多▴10):▴2↵
請輸入行數▴(最多 10):▴3↵
請輸入第▴1▴列的數值:▴1▴2▴3↵
請輸入第▴2▴列的數值:▴4▴5▴6↵
輸入的矩陣:↵
1▴2▴3↵
4▴5▴6↵
轉置矩陣:↵
1▴4↵
2▴5↵
3▴6↵
[user@ws hw]$ ./a.out↵
請輸入列數▴(最多▴10):▴1000↵
請輸入行數▴(最多▴10):▴1000↵
錯誤:矩陣大小超出範圍!↵
[user@ws hw]$

cpp/2025spring/hw5.txt · 上一次變更: 2025/03/21 04:14 由 junwu

Donate Powered by PHP Valid HTML5 Valid CSS Driven by DokuWiki