# 20191212 基礎班
---
## 本次講義皆為課後新增
---
## 課程大綱
1. 作業檢討
2. 編譯流程
3. Array 與 String
---
### 作業參考解答
```cpp
#include <iostream>
using namespace std;
int main() {
long long number;
cin >> number;
int oddSum = 0;
int evenSum = 0;
bool even = false;
bool visaHead = false;
bool mastercardHead = false;
bool americanExpressHead = false;
int i = 0;
while (number > 0) {
i++;
int now = number % 10;
if (even) {
// 偶數位要做的事
// *2
now *= 2;
// 個位數+十位數
// 加到 evenSum
evenSum += (now % 10) + (now / 10);
} else {
// 奇數位要做的事
// 加到 oddSum
oddSum += now;
}
number /= 10;
if (number >= 10 && number <= 99) {
if (number >= 40 && number <= 49) {
visaHead = true;
} else if (number >= 51 && number <= 55) {
mastercardHead = true;
} else if (number == 34 || number == 37) {
americanExpressHead = true;
}
}
even = !even;
}
// oddSum + evenSum
int answer = oddSum + evenSum;
// 判斷尾數是不是 0
if (answer % 10 != 0) {
cout << "無效卡號";
return 0;
}
if (visaHead && (i == 13 || i == 16)) {
cout << "VISA";
return 0;
}
if (mastercardHead && i == 16) {
cout << "MasterCard";
return 0;
}
if (americanExpressHead && i == 15) {
cout << "American Express";
return 0;
}
// return 0;
}
```
---
## 編譯流程
程式碼轉換成執行黨的過程會經過以下四個階段
1. Preprocessing 預處理
2. Compiling 編譯
3. Assembling 組譯
4. Linking 連結
----
### 1. Preprocessing 預處理
檢查是否有語法錯誤(Syntax Error)
* [語法錯誤 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E8%AA%9E%E6%B3%95%E9%8C%AF%E8%AA%A4)
----
### 2. Compiling 編譯
將程式碼轉成較低階的語言
一般而言指的是「組合語言」(Assembly)
* [組合語言 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E7%B5%84%E5%90%88%E8%AA%9E%E8%A8%80)
* [什麼是「組合語言」? | 電腦不難](http://it-easy.tw/assembly-language/)
----
### 3. Assembling 組譯
將組合語言轉成機器語言
* [機器語言 - 維基百科,自由的百科全書](https://zh.wikipedia.org/zh-tw/%E6%A9%9F%E5%99%A8%E8%AA%9E%E8%A8%80)
----
### 4. Linking 連結
把你的程式和相關的程式庫連結
轉換成可執行檔
例如 Windows 的 .exe 檔
---
## Array 與 String
Array 與 String 的相關簡報內容之後補上
---
## 本週作業
上次信用卡作業改為使用 String 處理
----
將使用者輸入的卡號使用 string 儲存
```cpp
string number;
cin >> number;
```
----
你可以直接透過尋找 `'\0'` 的位置
來判斷 number 的長度
----
透過 string/array 的特性
你可以直接取得任意位置的字元
----
### 注意
String 的內容物為「字元」
若直接轉為 int 是 ASCII 的值
文字 0~9 記得減掉 `'0'` 以轉換為數字 0~9
`1 == '1' - '0'`
----
### 作業繳交連結
https://classroom.github.com/a/CnxwDg3g
{"metaMigratedAt":"2023-06-15T02:32:28.644Z","metaMigratedFrom":"YAML","title":"20191212 基礎班","breaks":true,"slideOptions":"{\"transition\":\"convex\"}","contributors":"[{\"id\":\"39811bc9-1305-4534-84c5-a4c97d2ac539\",\"add\":2836,\"del\":80}]"}