盧政良 台大資訊系
流程控制
1
flow controls
盧政良 台大資訊系
https://www.imdb.com/title/tt0898266/ 2
盧政良 台大資訊系
有條件的敘述
3
PART I
盧政良 台大資訊系
輸入一個有效的半徑(i.e, r > 0),
請問圓面積等於多少?
4
承前例,
盧政良 台大資訊系
根據該員的BMI值作出適當的判斷。
5
承前例,
衛福部國⺠健康署
盧政良 台大資訊系
6
想看到更多?在這裏。
休息一下
盧政良 台大資訊系
三一律
7
大於 >,小於 <, 等於 == ,大於等於 >=,小於等於 <=
盧政良 台大資訊系
且 !&& ,或 !|| , 不 !
8
邏輯運算子
常見的
盧政良 台大資訊系
9
百分制 (0 ~ 100) 轉
等第制 (A ~ F)
課堂範例
盧政良 台大資訊系
10
盧政良 台大資訊系
11
且 或 互斥或
x y x !&& y x !|| y x ^ y
0 0 0 0 0
0 1 0 1 1
1 0 0 1 1
1 1 1 1 0
真值表
truth table
exclusive or, XOR or
and
位元運算子
盧政良 台大資訊系
12
電腦怎麼實現加法?
https://upload.wikimedia.org/wikipedia/commons/thumb/1/14/Half- adder.svg/300px-Half-adder.svg.png
冷知識
A 0 0 1 1 B 0 1 0 1 S 0 1 1 0
+
S = A + B = A B □
框框內要填哪一種運算?
進位C = A □ B?
盧政良 台大資訊系
13
https://scontent-tpe1-1.xx.fbcdn.net/v/t1.0-9/375478_10150507661549522_483829322_n.jpg?_nc_cat=101&_nc_oc=AQnh38CU3m3a2O_M- R19BpiGg8By9rS2D4wHQVoyTbZKDXbI8S3H2CZKwCQPXkGSHMk&_nc_ht=scontent-tpe1-1.xx&oh=06a4f88ccfd913c3ce553f60ead90c7d&oe=5EB4BB71
安卓系統
盧政良 台大資訊系
無緣 = 沒有交集
狄摩根定律
&
文氏圖
14
盧政良 台大資訊系
15
課堂範例
另一種選擇:
switch-
case-
break-
default
盧政良 台大資訊系
16
A ? B : C
盧政良 台大資訊系
17
盧政良 台大資訊系
18
APCS考題
盧政良 台大資訊系
19
盧政良 台大資訊系
題目分析
‣ 輸入任意三個正整數。
‣ 排序此組數字並顯示其結果。
• 如何把三個數字按照從小到大的方式排好?
• 如何交換?!
‣ 判斷為哪一種三角形或者非三角
形。 20
盧政良 台大資訊系
如何交換?
21
假設兩個人同時間只能持有一個物品,請問兩人該如何交換禮物?
Alice Bob
swap
盧政良 台大資訊系
22
1
2
3
另外一種選擇是逆時鐘的方向!
找第三個人幫忙!
盧政良 台大資訊系
23
‒ Prof. Albus Dumbledore
?We must all face the choice between what is right and
what is easy.A
https://images.pottermore.com/
bxd3o8b291gf/
5ocauY6zAsqGiIgeECw06e/
8accc1c586d2be7d9de6a3d9aec37b90/
AlbusDumbledore_WB_F1_DumbledoreS miling_Still_080615_Port.jpg?w=1200
盧政良 台大資訊系
要重複執行的 敘述
24
PART II
盧政良 台大資訊系
25
https://www.google.com/doodles/
celebrating-50-years-of-kids-coding
盧政良 台大資訊系
26
“Hello,C!++.”
x 10 ?
複製貼上!?
盧政良 台大資訊系
27
盧政良 台大資訊系
成也迴圈,敗也迴圈
‣ 迴圈 非常 非常 非常 非常 重要 !
‣ 然而,程式會跑很慢,很多時候也是因為迴圈 造成的!!!!
一把劍兩面刃:一面砍對方,一面砍自己。‣ 所以需要先知道哪一種演算法比較有效率!!!!!
28
loops
盧政良 台大資訊系
1 + 2 + 3 + ⋯ + 100 = ?
29
第⼆個例⼦
為啥不用梯形公式?!
盧政良 台大資訊系
30
盧政良 台大資訊系
gcd(a, b) = ?
31
課堂練習 + APCS考古題 + 每本教科書的範例
輾轉相除法
最⼤公因數
盧政良 台大資訊系
32
盧政良 台大資訊系
寫迴圈的策略
‣ 找出重複做的事情。
‣ 塞入一個適當的迴圈。
‣ 給正確的繼續執行條件。
33
盧政良 台大資訊系
https://www.liveabout.com/thmb/ACbPZHPhuSPYR7Q_9jI9XzKS6ho=/
768x0/filters:no_upscale():max_bytes(150000):strip_icc()/
GettyImages-93453966-59684e1d3df78c57f49b0c91.jpg 34
盧政良 台大資訊系
如何產生亂數
35
C++11的Random library:你還在用rand()嗎?
#include <cstdlib>
盧政良 台大資訊系
36
產生一個包含1到6之間的整數
盧政良 台大資訊系
37 產生一個包含1到6之間的整數
狀態的數量
起始點
盧政良 台大資訊系
38 如何讓亂數每次都不一樣?
跟人生一樣,時間是你唯一留不住的東⻄...
什麼東⻄在電腦裡面會一直改變的?
#include <ctime>
盧政良 台大資訊系
‒ Harvey MacKay
?Time is free, but it–s priceless.
You can˜t own it, but you can use it.
You can˜t keep it, but you can spend it.
Once you˜ve lost it, you can never get it back.A
39
盧政良 台大資訊系
40
擲五次
跟時間有關的工具箱 rand 在 cstdlib 裡
srand = seed of randomness
盧政良 台大資訊系
偽亂數
41
Pseudo Random Number Generator, PRNG
盧政良 台大資訊系
X n = (aX n−1 + b) % M
42
線性同餘方法
詳見高中數學的遞迴!
盧政良 台大資訊系
回家作業:猜數字遊戲
‣ 產生一個 0~99 的 隨機整數。
‣ 在螢幕上要能顯示範圍且隨著玩家輸入 的數字而改變。
‣ 如果玩家輸入超過目前顯示的範圍,請 玩家重新輸入一個數字。
‣ 如果玩家猜對數字則獲勝。
‣ 如果玩家猜到剩一個數字則GG。
43
盧政良 台大資訊系
44
盧政良 台大資訊系
do-while
45
盧政良 台大資訊系
46
while:先測試條件是否滿足,是則做一次;再回頭問要不要做第二次。
do-while:先做一次,再決定要不要做第二次。
個人認為,用while還是用do-while是一種哲學上的選擇。
先測
後測
盧政良 台大資訊系
迴圈有兩種
‣ 事件型迴圈
‣ 計數型迴圈:知道次數、範圍
47
盧政良 台大資訊系
48
從 while loop 過渡到 for loop
可以直接從這一行了解迴圈做的次數/範圍
盧政良 台大資訊系
49
1 2
3
4
執行順序:1 → 2 → 3 → 4 → 2 → 3 → 4 → …
只會做一次!
翻譯蒟蒻: i 從 1 開始,每次加 1,最後加到 100
盧政良 台大資訊系
課堂練習
‣ 計算
‣ 計算
‣ 從 3 到 100 之間(包含),找出符合 被 3 或 5 整除、且可被 7 整除的 奇 數。
1 × 2 × 3 × ⋯10 = ? 1 × 2 × 3 × ⋯100 = ?
50
盧政良 台大資訊系
題外話
51
100
∑ i=1
i = 1 + 2 + ⋯ + 100
高一學過的級數和公式484很抽象?
當你會寫程式的時候,公式已經
告訴你迴圈要怎麼給範圍了!
盧政良 台大資訊系
寫程式不需要數學;
寫好程式,需要很多 數學!
52
不要再道聽途說了 (白眼)
盧政良 台大資訊系
複利問題
https://icfo.co.in/wp-content/uploads/2015/10/Return-on-Invested-Capital.jpg 53
盧政良 台大資訊系
複利問題 1
‣ 輸入:初始金額 (balance)、年利率 (r)、持有年數
‣ 輸出:每一年的本利和
54
盧政良 台大資訊系
balance = balance × (1 + r
100.0 )
55
盧政良 台大資訊系
56
盧政良 台大資訊系
https://cdn.vox-cdn.com/thumbor/
4VSUzQVoaGKxYhzKJmignUGe2ds=/0x303:4514x3312/1200x800/
filters:focal(0x303:4514x3312)/cdn.vox-cdn.com/uploads/
chorus_image/image/44281428/Albert_Einstein_1947.0.0.jpg
‒ Albert Einstein
?The most powerful force in the universe is compound
interest.A
57
盧政良 台大資訊系
複利問題 2
‣ 輸入:初始金額、年利率、目標金額
‣ 輸出:每一年的本利和、須持有年數
58
盧政良 台大資訊系
59
盧政良 台大資訊系
π 3.14 ∼
60
盧政良 台大資訊系
會動的圖 61
盧政良 台大資訊系
62
抽一個點
若該點落在四分之一圓內,則 M!++。
數學的部分請參考大數法則 (LLN)
盧政良 台大資訊系
玩猜數字的時候,怎麼猜 下一個數字?
63
試想
?每個遊戲都有必勝法!A by 詐欺遊戲
盧政良 台大資訊系https://upload.wikimedia.org/wikipedia/commons/thumb/8/8c/
64
Bisection_method.svg/838px-Bisection_method.svg.png
‣ 考慮
‣ 猜根可能在[1, 2]之間
‣ 容忍誤差:
x 3 − x − 2 = 0 ε = 10 −9
二元搜尋法
盧政良 台大資訊系
65
盧政良 台大資訊系
課堂練習 1
‣ 輸入:任意正整數。
‣ 輸出:該數字有幾位數。
‣ 例如:輸入 123456 ,螢幕顯示為 6 。
66
盧政良 台大資訊系
課堂練習 2
‣ 輸入:任意正整數。
‣ 輸出:該數字每一位數的總和。
‣ 例如:輸入 123456 ,螢幕顯示為 21 。
67
盧政良 台大資訊系
兩個跳躍敘述
68 break
continue
盧政良 台大資訊系
69
顯示 1 2 3 4 顯示 1 2 3 4 6 7 8 9 10
盧政良 台大資訊系
質數檢查
70
範例
盧政良 台大資訊系
71
盧政良 台大資訊系
72
加速版
用空間換取時間
只需檢查比根號 x 來得⼩的數字
將判斷的功能從迴圈中抽離
盧政良 台大資訊系
多層迴圈
73
盧政良 台大資訊系
std!::setw() 74
#include <iomanip>
範例
盧政良 台大資訊系
75
setw:設定一個數字的欄位寬度
盧政良 台大資訊系
76
https://www.youtube.com/watch?v=6ssaV2zuKVI
j i
類比
盧政良 台大資訊系
77
範例 *
**
* * *
****
*****
A
盧政良 台大資訊系
78
盧政良 台大資訊系
‒ 盧政良
?掌握迴圈,
掌握你寫code的人生。A
79
盧政良 台大資訊系
80
練習
*****
**** * * *
** *
*****
**** * * *
** *
** *
* * *
***** ****
B C D
盧政良 台大資訊系
演算法分析
81
Analysis of Algorithms
盧政良 台大資訊系
計算時間會隨著N而成⻑
82
N是什麼?
盧政良 台大資訊系
案例
83
盧政良 台大資訊系
84
在迴圈之外,故不重複執行
N x
{ 每回合有 4個動作
4n + 3
總計有 次
盧政良 台大資訊系
O
85
讀作big-o
盧政良 台大資訊系
8N 2 −3N + 4 ∈ O(□)
86
簡單的例子
框框內要填什麼呢?
盧政良 台大資訊系
8N 2 −3N + 4 ∈ O(□)
87
只保留影響力最大的那一項
盧政良 台大資訊系
8N 2 −3N + 4 ∈ O(□)
88
係數扔掉
盧政良 台大資訊系
8N 2 −3N + 4 ∈ O(N 2 )
89
╰(*°▽°*)╯
盧政良 台大資訊系
8N 2 −3N + 4 ∈ O(N 2 )
90
結論
盧政良 台大資訊系
91
N O(N) O(N^2) O(N^3)
1 c 1 c 2 c 3
10 10c 1 100c 2 1000c 3
100 100c 1 10000c 2 1000000c 3
舉例⽽⾔
既然是同一個問題,你會選
花比較多時間的策略嗎?
盧政良 台大資訊系
92
盧政良 台大資訊系
詳細介紹請參考普林斯頓大學演算法分析 93
可說是演算法的光譜!
盧政良 台大資訊系
小結
‣ 我們用big-O分類不同的演算法。
‣ 透過迴圈的層數,大致上決定了該演 算法的order。
‣ big-O意義上是最差的情況。
• 例如: O(N) 基本上比 O(N 2 ) 來得快。
94
盧政良 台大資訊系
95
效率 普適性
https://nationalcareersweek.com/wp-content/uploads/2016/03/AdobeStock_76388413-e1457013827819.jpeg
盧政良 台大資訊系
來說說對數演算法
96
對數函數
盧政良 台大資訊系
97
1 0
目標:找出 5 的位置
舉例說明 32
1 0
線性時間的搜尋法
二元搜尋法
第一刀 第二刀
第三刀
第四刀
第五刀 5 = log 2 32
盧政良 台大資訊系
98
2 1
總共有多少個候選人? N = 2 − 1
ε = 10 9
線性時間的搜尋法
承前例 (二元搜尋法求根)
需約 5 × 10 8 次計算
對數時間的二分法 需約 log 2 10 9 = 9 次計算
log 10 2 ∼ 30
x
ε = 10 −9
盧政良 台大資訊系
99
2 1
總共有多少個候選人? N = 2 − 1
ε = 10 9+1
線性時間的搜尋法 需約 5 × 10 8 ×10 次計算
對數時間的二分法 需約 log 2 10 9+1 ∼ 30+4 次計算 x
當 ε = 10 −10 時
快,還要更快;只有更快,沒有最快。
還有什麼情況會覺得加法比乘法好?繳稅的時候。
盧政良 台大資訊系
100
Alan Turing
(1912‒1954)
AI propose to consider the question, Can
machines think?––
Turing Test (by TED)
Google˜s doodle: Turing Machine
Britain–s £50 Note Will Honor Computing Pioneer Alan Turing
盧政良 台大資訊系
101
https://www.imdb.com/title/tt2084970/videoplayer/vi3398414105
盧政良 台大資訊系
102
https://www.imdb.com/video/vi744337689?playlistId=tt0470752
盧政良 台大資訊系