Yakim shu Hi, 這是我擴充腦內海馬體的地方。

【筆記】CS50 - week 0 ( 2019年更新 )

Week 0 主要課程素材 :

助教課程:

week 0 算是暖身,大概講一下基本觀念跟之後會常聽到的名詞解釋,以及在動手寫程式之前,可以先玩完看 Scratch,了解寫程式會運用到的邏輯,對新手來說,簡單又不會被語法給卡住。


Algorithms - 演算法

什麼是演算法,寫程式一定會常聽到這個詞,看看以下這張圖:

演算法

演算法就是在 input & output 中間的黑盒子,進行了丟入問題以及回傳答案的過程。

而寫程式就是要想辦法實現那個神祕的黑盒子。


binary - 2 進位

生活中習慣的數字幾乎都是10進位 (decimal),如果把 123 拆解開來會變成

10進位

123: 100 * 1 + 10 * 2 + 1 * 3

但是電腦只看得懂 0 & 1,所以都要轉成 2 進位 (binary),以下是 5 的 2 進位表示法

2進位

5: 4 * 1 + 2 * 0 + 1 * 1


課程是用燈泡代表 128, 64, 32, 16, 8, 4, 2, 1

要表示42 的 2 進位,32, 8, 2 亮燈燈愣燈!!

2進位

練習

63、17的 2 進位值?

16 進位

更進階一點來還有 16 進位,RGB 表示顏色也很常用到,參考這篇RGB、HSL、Hex 網頁色彩碼,看完這篇全懂了


ASCII

ASCII 是一種國際標準的通用碼,根據維基百科的解釋

基於拉丁字母的一套電腦編碼系統。它主要用於顯示現代英語

ASCII

也就是說當我對電腦輸入了 HI!電腦接收到的其實是 72 73 33,cool ~~~

ASCII

延伸學習:

ASCII只有在純英文(無重音符號)的時候才堪用,如果要加上其他語言就得用不同的編碼方式,像是網頁head裡常見的

<meta charset="utf-8">

其實到這邊我已經卡了老半天,想要弄懂字符編碼是怎麼一回事,發現沒那麼簡單,越查資料越搞不懂,像是從口袋拿出的耳機線一樣混亂,有興趣再延伸學習的可以參考:

(先深吸一口氣)

了解演算法究竟是什麼

如果我們想從一本電話簿找到 Yakim 這個人,你會試著怎麼做呢?一頁一頁的翻嗎? 沒錯,這是一種方法,但如果想要最有效率的查找,何不試著從中間剖半! 假如打開是開頭是 N,那就往後面查找(因為我們知道 Y 在 N 後頭),然後繼續不斷剖半尋找,我能確定在有限的查找次數中找到答案。

其實這就是 二元搜尋法 (Binary Search) 。基本的演算法之一,聽起來好像很簡單,沒錯,是不難! 那沒學過程式的你有辦法用程式碼表現出來呢?這時虛擬碼登場囉!

虛擬碼 pseudocode

以下是維基百科對 pseudocode 的解釋:

虛擬碼(英語:pseudocode),又稱為偽代碼,是高層次描述演算法的一種方法。它不是一種現實存在的程式語言。 相比於程式語言(例如Java、C++、C、Delphi 等等)它更類似自然語言。它是半形式化、不標準的語言。我們可以將整個演算法執行過程的結構用接近自然語言的形式(這裡可以使用任何一種作者熟悉的文字,例如中文、英文,重點是將程式的意思表達出來)描述出來。使用虛擬碼,可以幫助我們更好的表述演算法,不用拘泥於具體的實現。


回到剛剛的查找 Yakim 大作戰,用虛擬碼把演算法寫下來就會長這樣:

pseudocode

黃字的部份就被稱為動作 Function

Function

判斷式 Condition

Condition

條件表達式 Boolean Expression

Boolean

迴圈 Loop

Loop

從以上例子中,我們學到了一些基本的程式架構