108 課綱將國中小資訊課程列為必修,希望從小培養學生的運算思維。前一陣子朋友介紹了陳會安先生開發的免費流程圖軟體 fChart 給我,我覺得很適合國中小資訊教師應用在資訊課程中。
你第一次看到它一定會很失望
我知道你第一次打開 fChart 一定會覺得很失望:『蛤?畫面這麼簡陋?網路上隨便找的流程圖軟體都漂亮得多啊!反正就是畫畫流程圖而已嘛,找漂亮一點的不是看起來心情好得多嗎?』
嗯,我們要學會不用外表評斷一個人軟體,實際畫一下流程圖體驗它的功能好了……呃,畫不出來!我連線段要怎麼畫都不知道!!真是失望透頂。
正準備關掉程式時,看到畫面上有個不太一樣的東西。
Image may be NSFW.
Clik here to view.
圖、fChart 執行畫面
在我要把程式關掉前,我看到這個流程圖軟體竟然有『執行、暫停』的按鈕,這還真是第一次看到這些按鈕出現在流程圖軟體中啊,這是幹嘛用的呢?
按了幾下按鈕,沒什麼反應。但已經挑起我的好奇心,所以決定無論如何至少要畫出一張流程圖來試用一下這些按鈕。
畫好之後發現流程圖真的可以執行,這太神奇了,一定要跟大家介紹這個好物啊!!
Image may be NSFW.
Clik here to view.
圖、可以執行的流程圖
可以跑流程並監看變數的變化
fChart 不但可以將流程跑過一次做測試,它還可以輸入一些變數,監看變數在流程中的改變以判斷流程是否正確。
Image may be NSFW.
Clik here to view.
圖、即時輸入變數值進行流程圖測試
輸入做測試的變數會匯集在一起,方便觀察變數值的變化。
Image may be NSFW.
Clik here to view.
圖、即時顯示變數值的變化
流程進行時會有藍色框線提醒使用者目前流程走到哪個方向,也可以按暫停,或延長每一個步驟間的時間以方便觀察。
Image may be NSFW.
Clik here to view.
圖、從藍色方框可知道判斷式之後的走向
判斷式不成立,往 No 的方向前進,變數 i 的值加 1。
Image may be NSFW.
Clik here to view.
圖、判斷式不成立轉往這方向繼續
迴圈進行了幾次之後,準備輸出資料並結束整個流程。
Image may be NSFW.
Clik here to view.
圖、流程已近終點
輸出最後結果,結束流程。
Image may be NSFW.
Clik here to view.
圖、輸出找到的最大值並結束流程
經由這個流程實際運作的過程,我們觀察變數變化確實如我們所希望的進行,所以這個流程圖是正確的。確定流程正確之後可以點擊上方工具列的『程式碼編輯器』開始依照流程撰寫程式,目前支援 C、C++、Java、C# 和 VB 幾種語言,也可以撰寫 Arduino 程式。
程式碼編輯器的使用下次有機會再說,我們先來談談怎麼利用 fChart 畫第一個流程圖吧。它的使用不是那麼直覺,一開始會覺得:『這程式的運作邏輯為什麼這麼奇怪?』但真的畫過一次就會覺得還可以接受。
利用 fChart 畫流程圖
開始一個新檔案吧!如果你是一執行 fChart 就要畫流程圖,那麼畫面上是全空的。我剛剛畫過另一個流程圖,現在開一個新檔案,fChart 就會幫我在畫面上先幫我放好開始與結束的圖案。
雖然有點奇怪,但反正不影響使用,自己放一下開始 &結束兩個圖案花不了幾秒鐘。
Image may be NSFW.
Clik here to view.
圖、開始一個新檔案
一般的程式就是輸入一些資料給它,它做一些運算處理之後,輸出處理過的結果。畫面左方工具列有個標記著 in 的平行四邊形就是用來畫輸入框的選項。
一般的流程圖軟體 in 跟 out 都用平行四邊形的圖案來畫,但 fChart 畫出來的流程圖可以執行,所以它的 in & out 是分開的。
我們先來畫一個代表『輸入』的平行四邊形吧!
Image may be NSFW.
Clik here to view.
圖、選擇輸入功能
在畫面上畫好一個代表輸入的平行四邊形後,fChart 會問你要有哪些提示文字 &要將輸入資料放到哪個變數去。
Image may be NSFW.
Clik here to view.
圖、輸入提示文字及變數名稱
按下確定,這個代表『輸入』的平行四邊形就放置完畢。平行四邊形的框內有兩行文字,第一行『輸入』代表這個流程要輸入一些資料,第二行就是我們剛剛填的提示文字 &存放資料的變數名稱。
因為輸入 &輸出都是用平行四邊形代表,所以 fChart 還很貼心的在圖案上分別標註『輸入』、『輸出』,在閱讀整個流程圖時絕不會弄錯它們代表的意義。
Image may be NSFW.
Clik here to view.
圖、可以從第一行文字知道這是一個輸入流程
到這邊都很順利啊,哪有什麼『不直覺』的?好,我要將開始 &輸入這兩個流程用箭頭線段連接起來了。
呣……找不到畫線段的方法……左邊工具列也沒有線段功能可選,這到底是……?
嗯,這就是 fChart 不直覺的地方,跨過這一步就沒有什麼難得倒你了。
加入連接線段
fChart 不像一般的流程圖軟體可以直接畫線,它要求使用者先選擇線段的起點。
Image may be NSFW.
Clik here to view.
圖、選擇連接線起點
再選擇線段終點,然後點選畫面左下方的連結,就會由程式幫我們畫好連接線。
Image may be NSFW.
Clik here to view.
圖、再選擇線段終點並進行連接
選擇正確的話畫面上就可以看到一條帶有箭頭的線段出現了。
如果選擇的順序錯誤,箭頭就會變成反方向 XDDD
如果方向畫反了怎麼辦?左下角有刪除連接線的功能,按下去就能刪除線條了,刪完後再重新選一次線段起點 ==>終點 ==>連結吧。
刪除連接線的按鈕上方有個『區塊』按鈕,是的,要刪除畫面上的圖形都要利用這個按鈕來刪除。
要注意的是,刪除區塊前要先將它身上連接的所有線段都刪除掉才能刪除區塊。
你可能會預期:『將一個區塊刪掉,它身上連接的線段都自動刪除』,抱歉,fChart 沒有這麼自動,所以就慢慢刪吧。我第一次畫圖時畫錯了,要刪除區塊時真的是手忙腳:『好,刪掉連接線,ㄟ,怎麼是那一條線不見了?我不是要刪那一條線啊!!』但第二張圖就畫得很順利了。
Image may be NSFW.
Clik here to view.
圖、程式將兩個項目連接好
ㄟ,線是 fChart 幫你連的,那遇到判斷式怎麼辦?
一樣,是由 fChart 幫你連。第一條從判斷式連接出去的線段會自動標註為 YES,代表判斷式成立時的走向。
Image may be NSFW.
Clik here to view.
圖、判斷式的第一條連接式自動顯示 Yes
第二條從判斷式連接出去的線條就自動標示為 NO,所以要畫線前要想清楚,哪邊是 YES 的走向?哪邊是 NO 的走向?要不然還要刪掉重畫一次。
Image may be NSFW.
Clik here to view.
圖、第二條連接線則顯示為 No
嗯,好,現在要來將走向 YES 方向的流程再拉回來了,怎麼做呢?
是可以像前面直接選起點 &終點來連線啦,不過畫出來不漂亮,有些流程要回到前面去的,利用這方法還會跟原本的線條重疊在一起,變得看不到線段,很麻煩。
不過 fChart 沒有提供線條功能更不要說折線了,那怎麼辦?這時候就需要一個『連接點』出來幫忙了。
利用連接點讓流程轉個彎
fChart 中的連接點祇是一個讓流程轉彎的圖形,本身並沒有參與變數的操弄,它唯一的功能就是讓流程指向它,再將流程轉向出去。
Image may be NSFW.
Clik here to view.
圖、轉彎的地方用連接點
選擇工具列中的連接點圖形,放置於畫面中,再連接出兩條線段,OK,我讓從 YES 分支出去的流程回到主線上來了。
Image may be NSFW.
Clik here to view.
圖、利用連接點串連各個行動
有時一個連結點不夠,那就多加幾個連接點吧。
Image may be NSFW.
Clik here to view.
圖、不同的流程間用多個連接點串接
還有更強大的呢!!
到這裡已經能用 fChart 來畫流程圖並實際執行看看這個流程是否順暢、正確了,不過 fChart 功能還不祇如此,比方說,從剛剛一路看下來,你有發現所有的圖片最右邊都沒有捲動軸嗎?
因為畫面最右邊缺乏捲動軸,所以 fChart 永遠祇能畫『一個畫面以內』的流程圖。
『-_-||| 這算什麼功能?這是程式的不足吧?』
嗯,fChart 缺少右方捲軸,所以遇到比較複雜的流程就必須拆分為幾個小工作,逐一為小工作畫流程圖。然後在主圖之中利用函數功能 (一樣是在左方工具列) 呼叫那些拆分出去的小流程。
陳會安先生上次在 FB 提到 fChart 這個函數功能還可以實現遞迴函數,神奇吧?不過我自己還沒畫過遞迴函數的流程圖,這幾天再來試試。