Week 0 主要課程素材 :
助教課程:
week 0 算是暖身,大概講一下基本觀念跟之後會常聽到的名詞解釋,以及在動手寫程式之前,可以先玩完看 Scratch,了解寫程式會運用到的邏輯,對新手來說,簡單又不會被語法給卡住。
什麼是演算法,寫程式一定會常聽到這個詞,看看以下這張圖:
演算法就是在 input & output 中間的黑盒子,進行了丟入問題以及回傳答案的過程。
而寫程式就是要想辦法實現那個神祕的黑盒子。
生活中習慣的數字幾乎都是10進位 (decimal),如果把 123 拆解開來會變成
123: 100 * 1 + 10 * 2 + 1 * 3
但是電腦只看得懂 0 & 1,所以都要轉成 2 進位 (binary),以下是 5 的 2 進位表示法
5: 4 * 1 + 2 * 0 + 1 * 1
課程是用燈泡代表 128, 64, 32, 16, 8, 4, 2, 1
要表示42
的 2 進位,32, 8, 2
亮燈燈愣燈!!
63、17的 2 進位值?
更進階一點來還有 16 進位,RGB 表示顏色也很常用到,參考這篇RGB、HSL、Hex 網頁色彩碼,看完這篇全懂了
ASCII 是一種國際標準的通用碼,根據維基百科的解釋
基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語
也就是說當我對電腦輸入了 HI!
,電腦接收到的其實是 72 73 33
,cool ~~~
ASCII只有在純英文(無重音符號)的時候才堪用,如果要加上其他語言就得用不同的編碼方式,像是網頁head裡常見的
<meta charset="utf-8">
其實到這邊我已經卡了老半天,想要弄懂字符編碼是怎麼一回事,發現沒那麼簡單,越查資料越搞不懂,像是從口袋拿出的耳機線一樣混亂,有興趣再延伸學習的可以參考:
(先深吸一口氣)
如果我們想從一本電話簿找到 Yakim 這個人,你會試著怎麼做呢?一頁一頁的翻嗎? 沒錯,這是一種方法,但如果想要最有效率的查找,何不試著從中間剖半! 假如打開是開頭是 N,那就往後面查找(因為我們知道 Y 在 N 後頭),然後繼續不斷剖半尋找,我能確定在有限的查找次數中找到答案。
其實這就是 二元搜尋法 (Binary Search) 。基本的演算法之一,聽起來好像很簡單,沒錯,是不難! 那沒學過程式的你有辦法用程式碼表現出來呢?這時虛擬碼登場囉!
以下是維基百科對 pseudocode 的解釋:
虛擬碼(英語:pseudocode),又稱為偽代碼,是高層次描述演算法的一種方法。它不是一種現實存在的程式語言。 相比於程式語言(例如Java、C++、C、Delphi 等等)它更類似自然語言。它是半形式化、不標準的語言。我們可以將整個演算法執行過程的結構用接近自然語言的形式(這裡可以使用任何一種作者熟悉的文字,例如中文、英文,重點是將程式的意思表達出來)描述出來。使用虛擬碼,可以幫助我們更好的表述演算法,不用拘泥於具體的實現。
回到剛剛的查找 Yakim 大作戰,用虛擬碼把演算法寫下來就會長這樣:
黃字的部份就被稱為動作 Function
判斷式 Condition
條件表達式 Boolean Expression
迴圈 Loop
從以上例子中,我們學到了一些基本的程式架構