程式設計迴圈之章,while。

While是另一個常見的迴圈控制語法,在英文裡 while 有當的意思,請注意是”ㄉㄤ”不是”ㄉㄤˋ”。 while 與 for 有何不同呢? 除了語法上的表達不同之外,其應用的地方也不太相同。以for來講,他最常被應用於準確的次數控制,而while則較常被使用在不明確的次數控制上,當然,在你熟悉了while之後,也是可以讓他具有與for類似的性質。

While是另一個常見的迴圈控制語法,在英文裡 while 有當的意思,請注意是”ㄉㄤ”不是”ㄉㄤˋ”。

「那麼 while 與 for 有何不同呢?」

除了語法上的表達不同之外,其應用的地方也不太相同。

以for來講,他最常被應用於準確的次數控制,而while則較常被使用在不明確的次數控制上,當然,在你熟悉了while之後,也是可以讓他具有與for類似的性質。

或許你會對於上述的次數控制有所疑惑,不過你不用太擔心這問題,因為顧名可思其義啊!

次數控制指的是我要指定某一特定區塊的程式執行多少次,次數到了之後便執行區塊外面的程式。有點複雜,這時你可以回到上一篇觀看 i 先生與 j 先生的例子應可略知一二。

回到正題。 while 一般的 C like 語言寫法會像這樣:

跟 for 比起來,while 精簡許多,只需要給他下一個判斷式就可以跑了。 而他的動作方式是這樣的:「當判斷式的條件成立的時候,就執行區塊裡面的程式碼,直到條件不成立時才結束執行。」

根據這個邏輯,如果寫成這樣的程式碼:

那這程式就會進入無限迴圈,直到 i 破表導致程式出現錯誤為止,不過通常這程式早已進入死當狀態…

所以, while 可以怎麼用呢? 我想可以先把 while 當作 for 來說。

試想,for 的基本使用方式是什麼? 對,就是 for(變數指定數值;下判斷式;累加) 從這裡面你發現甚麼了嗎?

是的,就是兩者的共通點「判斷式」。差別只在於,for還有另外兩個設定,也就是給某一變數的初始值以及未達到條件的累加。

那麼如何在看似 for 迴圈殘缺版的 while 有同樣的功能呢? 很簡單,只要把缺少的兩個東西放進就好啦~

像這樣…

這段程式碼的功能等同於

從以上這兩個程式就可以很明顯的看出,for 的專業在於明確的次數控制,而且閱讀起來也較容易理解。而同功能的 while 程式在閱讀上就沒有 for 這麼好理解,尤其是當 while 區塊裡要做的事情很多的時候。所以我說,while 的專業在於不明確的次數控制

既然,while 的專業是不明確的次數控制,那該怎麼利用呢? 這就要問施主您啦~((被打

這樣好像太不負責任了,讓我想想…想想…想想…想想…想想…

問各位有沒有這樣的經驗? 你說我沒問? 等我一下咩…

就是在做一件事情,但是那件事情在還沒到達某個條件前你就必須一直給他做下去,直到滿足那個條件為止

我拿寫報告來說好了,如果有一門課你必須繳出一篇報告才能過,而因為之前玩過頭,忘記做報告這件事,就當你想起來的時候,繳交的最終期限就在明天時你會怎樣?

「杯具。」

欸~ 是一場悲劇沒錯…但你還是要做啊!不然被當掉是一件很痛苦的事情…

所以你一定會熬夜將這報告完成,而你還沒完成就等於你不會過,所以,你就必須要一直做一直做做到完成它為止。這就是一種不明確的次數控制了,難道你知道你報告何時寫出來?

好吧,我承認不明確的次數控制好像有點冗長難記,簡單講就是,當條件未到,你就必須一直做這樣的意思啦~

如何?希望這例子可以讓大家更了解 while 的用途與意義,甚麼? 你說沒有範例程式?

好吧好吧…

程式設計迴圈之章,for。

經過上一篇沒有任何語法解說的文章後,相信各位對於迴圈這東西仍然是一頭霧水,這,不意外。
今天,這篇文章將以實際的例子帶領各位進入迴圈的領域,以下文章將會有3種語言版本的迴圈,分別是C、Java、Visual Basic這三種學校教學常見的語言。另外,獨夜也希望大家在閱讀的同時能練習一遍,自己實際跑一次的感覺絕對比光看不練的感覺還要棒啊!

經過上一篇沒有任何語法解說的文章後,相信各位對於迴圈這東西仍然是一頭霧水,這,不意外。

今天,這篇文章將以實際的例子帶領各位進入迴圈的領域,以下文章將會有3種語言版本的迴圈,分別是C、Java、Visual Basic這三種學校教學常見的語言。另外,獨夜也希望大家在閱讀的同時能練習一遍,自己實際跑一次的感覺絕對比光看不練的感覺還要棒啊!

一樣,先以for來做開頭。

以上語法於Java中適用,以下則是VB的版本。

對了,還有 C/C++ 的版本

知道的讀者或許會很熟悉,沒錯,這就是上次那篇文章的題目,今天這篇文章我先解釋我怎麼解讀這些程式碼的。

我說過,以閱讀文章的方式去解讀程式碼絕對比你把程式碼當作程式碼來看來得輕鬆許多,這邊我先忽略輸出的程式碼。

首先,我定義了 i 跟 j 為整數(integer)。

然後我給 i 一個數字 0 ,若 i 小於 10 的時候,i 就會加 1。

再來我同樣地也給 j 一個數字 0 ,若 j 小於 5 時,j 就會加 1 。

好了,以上就是我對這程式碼的解讀。再來,我們需要一點區域的概念,或者稱區塊的概念。

在 C like 的程式語言中,經常使用大括號來當作區塊的分界線,”{“這個符號到表區塊的起始點,”}”這個符號則代表結束,太抽象嗎? 沒關係,看了下面這張圖後你就會了解區塊到底是什麼了。直接以範例程式來做說明。

通常最外層會用main包起來,以Java為例就像這樣:

OK,現在我們了解到,程式碼也是有地域性的,在他的領地中,裡面的東西就是屬於他執行的範圍,其他的他一概不會去理會,因為那不甘他的事。換句話說,他只會做主人交給他的事情,並不會也不可能主動去干涉其他人在做的事情。

回頭來看這些程式碼。

因為我們知道了他的領域性,所以在這個程式碼裡,我們可以分成兩個區塊,一個是屬於 i 的,另一個則是 j 的,這在剛剛的說明文字裡就已經分好了。

區塊分好了後,我們來了解一下 for 的真正意義,也就是說在我給他了那些數值與判斷式之後他所做的動作。 從前面的描述中,我們可以知道,他是依著條件在走的,依什麼條件?

依你給的第2個數值,也就是判斷式,當到達判斷式的條件後他就不會繼續執行區塊裡的東西了,直接拿實際例子來說,i 會在執行完裡面的程式後自動加 1 ,直到加到10的時候跳出,因為他明顯的大於10了。

簡單說就是 i 先生一開始手上沒有半顆蘋果(i = 0),然後他做了點工作後,得到一顆蘋果(i++)。最後手上累積了 9 顆蘋果(i<10)終於拿不下了,所以他就辭職不幹了…((咦?

同樣的道理,j 先生跟i 先生一樣,不過在這程式裡面的 j 先生是 i 先生的助手,i 先生每次都會叫 j 先生幫忙做 5 個工作,做完那 5 個工作後,j 先生會跟 i 先生說:「我做好了!」…如此循環的結果,就是 j 先生的工作量遠多於 i 先生,所以結論是 i 先生是個壞上司…XD

正經點,在這程式裡面,j 先生做 5 次工作等於 i 先生的一次,也就是說,當你執行程式時你會發現 i 出現一次,j 會出現 5 次,若在 j 先生的工作範圍裡面放上一段程式碼讓他累加,你會發現最後出來的數值是 i 與 j 所做次數的相乘結果,也就是 50!

你問我怎麼加入? 像這樣就好囉~ (Java)

不知道以上解說有沒有讓你更了解了for了呢? 希望能幫上你的忙,預祝閱讀本篇文章的您有所收穫!  

Sikuli X 1.0 RC2 更棒的介面,更多的功能!

最近我的E-mail頗熱鬧的,近十封來自Sikuli mailing list的信件擠在信箱開頭,提醒我點閱並閱讀他們。只是,太多了…
這是SikuliX 1.0 rc2 的介面,與以往不一樣的是,左邊的快速指令區有較完整的分類,讓使用者能更快速的找到需要的指令。

最近我的E-mail頗熱鬧的,近十封來自Sikuli mailing list的信件擠在信箱開頭,提醒我點閱並閱讀他們。只是,太多了…

這是SikuliX 1.0 rc2 的介面,與以往不一樣的是,左邊的快速指令區有較完整的分類,讓使用者能更快速的找到需要的指令。而當你開啟Sikuli的IDE之後,底下便會有兩個訊息,分別是圖片擷取的快速鍵: Ctrl+Shift+2 以及停止Sikuli程式的運作快速鍵: Alt+Shift+C,這功能可以讓你的程式發生無法預期的狀況時可以讓你手動關閉並停止。

另外,以往的Sikuli在運作時會有一個CMD的黑框存在,不過在新版本上已經不會出現這個黑框了!

Sikuli黑框

不過遺憾的是,開啟舊檔的方式在Windows上還是沒有變成一個包裹,所以開啟方式與另一篇文章一樣,在這裡就不重複說明了。

Sikuli開啟

說真的,Sikuli是很強大沒錯,強大到居然有工程師拿去玩星海爭霸…但不知為何,我總覺得他的執行速度很慢很慢,或許是我用小筆電執行的關係吧?

下載點請到Sikuli官方網站的首頁即可下載得到符合您電腦作業系統的版本,若顯示的並不是您作業系統的版本,請到Download頁面找找囉~

底下獻上影片一部。

程式設計迴圈之章

第一篇關於程式語言的文章,我就先直接切入程式語言最常見也最常應用,同時也是最常讓你腦筋打結的的東西,迴圈。而,在文章開始之前,我要麻煩觀看本文的各位先將迴圈這個名詞暫時忘記,這是為了避免你腦袋真的不停的旋轉…

第一篇關於程式語言的文章,我就先直接切入程式語言最常見也最常應用,同時也是最常讓你腦筋打結的的東西,迴圈。而,在文章開始之前,我要麻煩觀看本文的各位先將迴圈這個名詞暫時忘記,這是為了避免你腦袋真的不停的旋轉…

繼續閱讀 “程式設計迴圈之章”

Facebook Hacker Cup – Double Squares.

Facebook Hacker Cup 中文翻譯為 臉書駭客盃,雖然叫做駭客盃,實際上則是程式設計競賽。應該是屬於國際級的競賽吧? 這也是我第一次參加競賽以及第一次參與這類如此不同的競賽。而,這整個比賽是在線上進行,時間以格林威治標準時間為準,所以各地都有一定的時差存在。不過也剛好反映出FB的時間計算上的問題…

繼續閱讀 “Facebook Hacker Cup – Double Squares.”

Sikuli 0.10 發布! 加入正體中文,介面更親切!

今天是四技二專統一入學測驗的最後一天,一年的煎熬,在今天展現成果。第一天的國文與專二寫得很順手,到了第二天我就開始陷入小小的慌亂,當然,我還是盡力的寫好每一個出現在我眼前的題目。

希望能夠達到我理想學校的分數,祝我好運吧!

好的,接下來就是久久不見的新文章啦!

就算是大考在即,我還是保持著每天上一下噗浪,開一下信箱的好習慣,所以就不小心收到了這一封信:

繼續閱讀 “Sikuli 0.10 發布! 加入正體中文,介面更親切!”

Sikuli 教學 Part 1 操作介紹。

在前一篇Sikuli的介紹文中,我門能夠稍稍的了解到這一個轟動全世界的全新概念語言,經由我的試用與測試後,這個新興的語言目前較適合用於個人,還不夠成熟到廣泛的應用在各種電腦與儀器之中(手機或許可以)。想試試看Sikuli的威力嗎? 還是你已經被滿滿的英文給嚇跑了呢? 別怕,因為在接下來的內容中,獨夜我將教您如何操作這款官方發表的軟體。

想試試看Sikuli的威力嗎? 還是你已經被滿滿的英文給嚇跑了呢?

別怕,因為在接下來的內容中,獨夜我將教您如何操作這款官方發表的軟體。

好的,首先呢你得要有Sikuli IDE這一套開發程式,而這是Sikuli目前唯一一套的開發程式,在我寫這一篇文章時的版本為0.9.8。

我把Sikuli的開發介面分為三個部分,如下圖。
在前一篇Sikuli的介紹文中,我門能夠稍稍的了解到這一個轟動全世界的全新概念語言,經由我的試用與測試後,這個新興的語言目前較適合用於個人,還不夠成熟到廣泛的應用在各種電腦與儀器之中(手機或許可以)。

已有新版本,請看—>

前一篇Sikuli的介紹文中,我門能夠稍稍的了解到這一個轟動全世界的全新概念語言,經由我的試用與測試後,這個新興的語言目前較適合用於個人,還不夠成熟到廣泛的應用在各種電腦與儀器之中(手機或許可以)。

想試試看Sikuli的威力嗎? 還是你已經被滿滿的英文給嚇跑了呢?

別怕,因為在接下來的內容中,獨夜我將教您如何操作這款官方發表的軟體。

繼續閱讀 “Sikuli 教學 Part 1 操作介紹。”

Sikuli – 程式語言大革命!用圖片寫程式!


Sikuli,這一個念起來很像日文的名稱,其實是一種創新的程式語言,由一位就讀於MIT(麻省理工學院)的台灣學生與它的朋友們費時三年多的研究所產生出來的產品。

它是一種全新的概念,利用圖像的辨識,達到眾多繁雜指令自動化的效果。

正如作者vgod所說:「Sikuli最重要的革命是程式碼的可讀性和易用性。把螢幕截圖直接放在程式碼裡面,讓人能直接「看到」他想控制的東西,這是從來沒人想過的事情。以往的方法,都是透過只有程式設計師才能寫才能讀懂神秘外星語言」(以上內容我省略了一些,請見諒)

繼續閱讀 “Sikuli – 程式語言大革命!用圖片寫程式!”