---
# System prepended metadata

title: CP2023 作業與考試規則(Homework & Exam Rule)

---

# CP2023 作業與考試規則

This is the Traditional Chinese Version, click [here](https://hackmd.io/@cp2023/en-rule) for English Version.
如果中英文規則有異，以中文版本為準

[TOC]

### 更新紀錄
- 2023/09/22: 規則釋出

## 批改機器規格

建議大家在交作業前在 `Ubuntu` 上測試一次自己的程式。我們不接受因作業系統不同導致的錯誤。

## 程式執行流程

> 你的程式是怎麼被執行的？

第一步，助教會拿到一個 `XXX.zip` 壓縮檔，檔名可自訂。

```sh
❯ ls -1
XXX.zip
```

第二步，助教會執行 `unzip` 來解壓縮：

```sh
❯ unzip XXX.zip
Archive:  XXX.zip
  inflating: hw0101.c                
  inflating: hw0102.c                
  inflating: hw0103.c                
  inflating: hw0104.c                
  inflating: hw0105.c                
  inflating: README.pdf              
  inflating: hw0106.pdf              
  inflating: Makefile
```

```sh
❯ ls -1
Makefile
README.pdf
XXX.zip
hw0101.c
hw0102.c
hw0103.c
hw0104.c
hw0105.c
hw0106.pdf
```

> 此時可以看到檔案都被解壓縮出來了（位於原壓縮檔同目錄下）

第三步，助教會執行 `make` 來編譯你的程式：

> 若此步驟出現編譯錯誤，請參閱 [Makefile 規則](#Makefile-%E8%A6%8F%E5%89%87)

```sh
❯ make 
gcc hw0101.c -o hw0101
gcc hw0102.c -o hw0102
gcc hw0103.c -o hw0103
gcc hw0104.c -o hw0104
gcc hw0105.c -o hw0105
```

```sh
❯ ls -1
Makefile
README.pdf
XXX.zip
hw0101
hw0101.c
hw0102
hw0102.c
hw0103
hw0103.c
hw0104
hw0104.c
hw0105
hw0105.c
hw0106.pdf
```

> 此時可以看到執行檔皆已被編譯（位於同目錄下）

第四步，助教將獨立執行你的不同程式，並與你的程式互動、進行評分測試

```sh
❯ ./hw0101                                 
Who is the professor? I dont know
Wrong, Neokent is the professor.
```

> 此例中，助教輸入「`I dont know`」

第五步，助教會使用基於 Chromium 的瀏覽器或文字編輯器來閱讀你的非程式作業（PDF 或純文字文件）並進行評分。

第六步，助教會喝杯奶茶，放鬆心情，讓自己處於能公正進行最終評分的狀態。

第七步，對於你在 README 特別說明的 unspecified behavior 進行評分修正。

第八步，完成評分。

:::spoiler 壓縮的方法可以參考此處

```sh
❯ zip XXX *.c *.pdf Makefile
  adding: hw0101.c (deflated 52%)
  adding: hw0102.c (deflated 71%)
  adding: hw0103.c (deflated 62%)
  adding: hw0104.c (deflated 85%)
  adding: hw0105.c (deflated 81%)
  adding: README.pdf (deflated 39%)
  adding: hw0106.pdf (deflated 26%)
  adding: Makefile (deflated 57%)
```
:::

:::spoiler `助教.sh`

你可以在放有你的壓縮檔的目錄執行看看，它會嘗試執行第二步至第四步。

```sh
#!/bin/bash
set -x
unzip *.zip
make
for file in *; do
    if [[ -x "$file" && -f "$file" ]]; then
        ./"$file" || true
    fi
done
```
:::

## Makefile 規則

在繳交前，請務必使用 `make` 指令確認編譯可以通過。

若無法編譯通過，未成功編譯的題目全部會以 0 分計算。


但身為佛心的助教，我們訂定了新手保護機制：

- CSU0001 程式設計(一)
1. `hw1`: 該次總分扣 10 分，當作助教幫你改 Makefile 的工本處理費
2. `mid` 以前(含 `mid`): 每個未成功編譯的題目得分乘以 0.7，當作助教幫你改 Makefile 的工本處理費
3. 過了 `mid`: 每個未成功編譯的題目以 0 分計算
- CSU0002 程式設計(二)
1. `hw1`: 每個未成功編譯的題目得分乘以 0.5
2. 過了 `hw1`: 每個未成功編譯的題目以 0 分計算


## 不可要分的項目

1. 因作業系統不同導致的錯誤，請在 `Ubuntu` 自己先跑一次程式。
2. Makefile 問題。
3. 使用了不符的檔案格式，像是曾經有人交過 `hw0101.docx`。
4. 交錯檔案。
5. 檔案命名錯誤(ex: 把 `hw0101` 命名成 `hw101`)。
6. 因為 Segmentation Fault 等不正常結束程式的情況。
7. 因為執行時間過久(無窮迴圈)導致程式無法在 10 秒內結束。
8. 補充說明文件請在每次寫作業時記得看，會以文件內容最終規定。

## 可以要分的項目

請先確認輸入測資後發現答案是正確的，再檢查是否符合以下條件之一：

1. 少/多空白
2. 英文大小寫錯誤
3. 前面都沒發生，但答案是對的

**但若該題有特別註明，以該題為準**

