由程式語言觀點談「潛水規劃表」操作原理

學潛水其實可以培養孩子許多能力,今天來談談對於培養對於演算法、程式語言興趣的可能性。
假如你除了學潛水電腦錶操作,也有學如何用傳統的「規劃表格」來規劃的話,一開始一定覺得很複雜, 可能過了一陣子就忘了怎麼用,然後就從此只會按電腦錶。
其實從程式語言的角度來看,程式=資料+演算法,你只要告訴電腦怎麼去處理資料,以及餵給電腦可以處理的資料,就能夠幫我們演算出結果 規劃表格也不例外,也是有資料的部份和演算法的部份
==
資料型態

表格裡其實只有兩種資料,時間和深度,而深度其實就是長度單位。也就是說,我們潛到海裡,真正能控制的,也只有時間和深度,你可以控制要在多深的地方停多久,僅此而已。但為什麼要做規劃,其實就是要「聰明地」控制時間和深度,減低罹患減壓病的機率。

所以我們想知道的是,例如: 想下多深可以待多久?給深度 -> 查 NDL 想待那麼久最深可以下多深? 給 NDL -> 查深度 下了某深度待某段時間後 -> 回水面休息一陣子 -> 在下某個深度,查NDL 之後想下多深待多久,在水面上必須休息多久?
這些問題的資料都是時間和深度

==
演算法虛擬碼(Pseudo code)
至於怎麼去用這表格,其實可以運用虛擬碼來思考,也就是真正寫程式之前, 先用一種介於白話和電腦程式語言之間的虛擬碼,可以讓意思更簡潔明瞭, 讓我們把重點專注在程式的行為和處理的資料上,等確定虛擬碼符合我們想要的需求, 再根據虛擬碼寫成真正電腦能看懂得程式語言。

所以潛水課本看完之後可以嘗試寫下潛水規劃表格的虛擬碼,看看自己是否理解整個運算過程,也方便日後複習。

==
例外處理(Exception)
有時候某些情況會被歸為例外情況,要特別處理。 例如可能「壓力等級」太大,好比說到XYZ後,就可能得讓SI至少1小時等 這些在表格上會另外註明,使用前必須看清楚。

==
函式(Function)
基本上就是有傳回值的副程式 可以應用在高氧的規劃表格其實我不需要另外為高氧設一個表格,我只要用原本空氣用的規劃表格就好。也就是說,假如我可以算出一個值,這個值也可以丟進去吸空氣用的規劃程式就好那就輕鬆了在高氧的規劃,其實就試算一個EAD,我吸多少濃度的高氧下多深,其實等同於吸空氣下到另一個深度。這個換算的原理是建立在氮分壓,所以只要用高氧其實等於低氮的概念去想,就知道怎麼換算。等我用這個 EAD 函式去算了以後,得到新的深度,再回傳給空氣規劃表格下去計算即可。當然,你也可以不把這個EAD寫成副程式,但你就得為22-40%每一個整數的濃度都做一個表格,當然,最常用的就是 EAN32

==
迭代與遞迴
潛水往往是重複潛水,所以我們有機會持續用到表格好幾次,這其實就是迭代的精神。 又或者是我們想要反推,這也會用到遞迴的精神。 例如我們想要知道潛了第一潛之後,要下第二潛該怎麼繼續為資料給演算法 這時候就會查出一個壓力等級的英文符號,這會告訴我們怎麼繼續算下去。 然後得到新的壓力等級,又繼續算下去….
不過,壓力等級這英文符號不能餵給潛水電腦錶繼續算下去,或是潛水電腦錶也不會算一個壓力等級給你 所以當你電腦錶中途壞了,想要切換成表格繼續來規劃,就得利用「歸零大法」,等到「壓力等級」消失,一切從頭算起就好了。

分類: Q&A,作者: magicfx。這篇內容的永久連結

關於「magicfx」

個人著作: http://www.books.com.tw/products/0010744687 這輩子,一定要去一次馬爾地夫:印度洋三大明珠馬爾地夫、模里西斯與塞席爾夢幻島遊 http://www.books.com.tw/products/0010488679 東南亞.自助.潛水趣

發佈留言

發佈留言必須填寫的電子郵件地址不會公開。 必填欄位標示為 *

Time limit is exhausted. Please reload CAPTCHA.