pseudocode 虛擬碼
虛擬碼 (Pseudocode) 是學習運算思維和寫程式是的一個重要工具。它有助於幫助我們釐清思路,讓我們在不需要考慮程式語言或是硬體限制的情況之下,專心去設計解決問題的演算法。
虛擬碼其實是使用自己的語言,去構想一個程式該如何運行,先不使用程式語言撰寫,而是先用虛擬碼打草稿,確認流程和邏輯無誤或者檢查是否為最佳效益之後,再用程式語言去寫成電腦看得懂的指令碼給電腦。
這個過程很有趣,虛擬碼也是跟運算思維同時進行的搭配工具。這也是工程師和其他工程師或設計師溝通的大綱,才能避免花時間寫成程式後,才發現邏輯錯誤或不符合需求。
不過我自己也有練習幾則題目,但總覺得我好囉唆唷 …也有可能我寫的是錯誤的,先記錄下來,等學習一段時間後再回頭來看看我現在的答案,到時再來修正吧。
題目:
把解答以下問題的方案,用 pseudo code 寫出來:
你的書櫃上有十本英文書,請以書名的長度 (length) — 包括空格,去把排先後順序,書名最短的在前面。
提示:我們以 bookname 這個變數 (variable) 來代表書名,然後它的長度為 bookname.length
以三本書為例子:Deep Work, Lean Startup, Hook
- Deep Work ← bookname.length = 9 (包括空格)
- Lean Startup ← bookname.length = 12 (包括空格)
- Hook ← bookname.length = 4所以整理後的排列為:Hook, Deep Work, Lean Startup
我寫的答案是:
1.首先,先把這十本書的書名bookname各自計算長度成bookname.length。
(1) 第一本書之bookname(1), 長度為bookname.length=a
(2) 第二本書之bookname(2), 長度為bookname.length=b
(3) 第三本書之bookname(3), 長度為bookname.length=c
(4) 第四本書之bookname(4), 長度為bookname.length=d
(5) 第五本書之bookname(5), 長度為bookname.length=e
(6) 第六本書之bookname(6), 長度為bookname.length=f
(7) 第七本書之bookname(7), 長度為bookname.length=g
(8) 第八本書之bookname(8), 長度為bookname.length=h
(9) 第九本書之bookname(9), 長度為bookname.length=i
(10) 第十本書之bookname(10), 長度為bookname.length=j
2. 將各書名長度進行排序,使用”快速排序法”。
(1) 選擇近中間值的長度數為分割值
(2) 將小於分割值的數值放在前半段
(3) 將大於分割值的數值放在後半段
(4) 將前半段的五個數值再選取中間的子分割值
(5) 小於子分割值的放到最前
(6) 大於子分割值的放到後面進行比較與排序
(7) 再將後半段的五個數值,再選取中間的子分割值
(8) 小於子分割值的放到最前
(9) 大於子分割值的放到後面進行比較與排序
(10) 最後全部順數序,確認數列大小無誤
3. 打印最後的代號為書名
把解答以下問題的方案,用 pseudo code 寫出來:請把 1 到 100 裡的「質數」(prime number) 寫出來。
提示:「質數」指在大於1的整數中,除了 1 和該數自身外,無法被其他自然數整除的數(也可定義為只有1與該數本身兩個正因數的數)(來源:Wiki)
1. range 1..100
2. if n > 1
3. 檢查能否被2整除,如果可,不是質數。如果不可,繼續下一步驟。
4. 檢查能否被3整除,如果可,不是質數。如果不可,繼續下一步驟。
5. 檢查能否被5整除,如果可,不是質數。如果不可,繼續下一步驟。
6. 檢查能否被7整除,如果可,不是質數。如果不可,繼續下一步驟。
7. 打印為質數的數列
最後的題目蠻有趣的
「聽說妳最近在學寫程式,所以寫程式到底是什麼?難不難啊?」 — 妳的一個完全沒有程式背景的朋友問你這個問題。
看完這個 Lesson 之後,請用自己的說法,回答你這個朋友的問題。
我覺得程式語言並不是難在語言,而在思考,要能夠思考出能與電腦溝通的模式,使用什麼語言都不算問題,只要多加練習,勤於練習,多多應用且嘗試,很快就能學習起來,只是對於數學和思考模式,真的需要時間去磨練呢QQ
別怕,學會運算思維,不怕老年痴呆!