2017年8月14日 星期一

fChart 流程圖軟體

108 課綱將國中小資訊課程列為必修,希望從小培養學生的運算思維。前一陣子朋友介紹了陳會安先生開發的免費流程圖軟體 fChart 給我,我覺得很適合國中小資訊教師應用在資訊課程中。

你第一次看到它一定會很失望

我知道你第一次打開 fChart 一定會覺得很失望:『蛤?畫面這麼簡陋?網路上隨便找的流程圖軟體都漂亮得多啊!反正就是畫畫流程圖而已嘛,找漂亮一點的不是看起來心情好得多嗎?』

嗯,我們要學會不用外表評斷一個軟體,實際畫一下流程圖體驗它的功能好了……呃,畫不出來!我連線段要怎麼畫都不知道!!真是失望透頂。

正準備關掉程式時,看到畫面上有個不太一樣的東西。

fChart 執行畫面
圖、fChart 執行畫面

在我要把程式關掉前,我看到這個流程圖軟體竟然有『執行、暫停』的按鈕,這還真是第一次看到這些按鈕出現在流程圖軟體中啊,這是幹嘛用的呢?

按了幾下按鈕,沒什麼反應。但已經挑起我的好奇心,所以決定無論如何至少要畫出一張流程圖來試用一下這些按鈕。

畫好之後發現流程圖真的可以執行,這太神奇了,一定要跟大家介紹這個好物啊!!

可以執行的流程圖
圖、可以執行的流程圖

可以跑流程並監看變數的變化

fChart 不但可以將流程跑過一次做測試,它還可以輸入一些變數,監看變數在流程中的改變以判斷流程是否正確。

即時輸入變數值進行流程圖測試
圖、即時輸入變數值進行流程圖測試

輸入做測試的變數會匯集在一起,方便觀察變數值的變化。

即時顯示變數值的變化
圖、即時顯示變數值的變化

流程進行時會有藍色框線提醒使用者目前流程走到哪個方向,也可以按暫停,或延長每一個步驟間的時間以方便觀察。

藍色方框直接呈現判斷式成立後的走向
圖、從藍色方框可知道判斷式之後的走向

判斷式不成立,往 No 的方向前進,變數 i 的值加 1。

判斷式不成立轉往這方向繼續
圖、判斷式不成立轉往這方向繼續

迴圈進行了幾次之後,準備輸出資料並結束整個流程。

流程已近終點
圖、流程已近終點

輸出最後結果,結束流程。

輸出找到的最大值並結束流程
圖、輸出找到的最大值並結束流程

經由這個流程實際運作的過程,我們觀察變數變化確實如我們所希望的進行,所以這個流程圖是正確的。確定流程正確之後可以點擊上方工具列的『程式碼編輯器』開始依照流程撰寫程式,目前支援 C、C++、Java、C# 和 VB 幾種語言,也可以撰寫 Arduino 程式。

程式碼編輯器的使用下次有機會再說,我們先來談談怎麼利用 fChart 畫第一個流程圖吧。它的使用不是那麼直覺,一開始會覺得:『這程式的運作邏輯為什麼這麼奇怪?』但真的畫過一次就會覺得還可以接受。

利用 fChart 畫流程圖

開始一個新檔案吧!如果你是一執行 fChart 就要畫流程圖,那麼畫面上是全空的。我剛剛畫過另一個流程圖,現在開一個新檔案,fChart 就會幫我在畫面上先幫我放好開始與結束的圖案。

雖然有點奇怪,但反正不影響使用,自己放一下開始 & 結束兩個圖案花不了幾秒鐘。

開始一個新檔案
圖、開始一個新檔案

一般的程式就是輸入一些資料給它,它做一些運算處理之後,輸出處理過的結果。畫面左方工具列有個標記著 in 的平行四邊形就是用來畫輸入框的選項。

一般的流程圖軟體 in 跟 out 都用平行四邊形的圖案來畫,但 fChart 畫出來的流程圖可以執行,所以它的 in & out 是分開的。

我們先來畫一個代表『輸入』的平行四邊形吧!

選擇輸入功能
圖、選擇輸入功能

在畫面上畫好一個代表輸入的平行四邊形後,fChart 會問你要有哪些提示文字 & 要將輸入資料放到哪個變數去。

輸入提示文字及變數名稱
圖、輸入提示文字及變數名稱

按下確定,這個代表『輸入』的平行四邊形就放置完畢。平行四邊形的框內有兩行文字,第一行『輸入』代表這個流程要輸入一些資料,第二行就是我們剛剛填的提示文字 & 存放資料的變數名稱。

因為輸入 & 輸出都是用平行四邊形代表,所以 fChart 還很貼心的在圖案上分別標註『輸入』、『輸出』,在閱讀整個流程圖時絕不會弄錯它們代表的意義。

可以從第一行文字知道這是一個輸入流程
圖、可以從第一行文字知道這是一個輸入流程

到這邊都很順利啊,哪有什麼『不直覺』的?好,我要將開始 & 輸入這兩個流程用箭頭線段連接起來了。

呣……找不到畫線段的方法……左邊工具列也沒有線段功能可選,這到底是……?

嗯,這就是 fChart 不直覺的地方,跨過這一步就沒有什麼難得倒你了。

加入連接線段

fChart 不像一般的流程圖軟體可以直接畫線,它要求使用者先選擇線段的起點。

選擇連接線起點
圖、選擇連接線起點

再選擇線段終點,然後點選畫面左下方的連結,就會由程式幫我們畫好連接線。

再選擇線段終點並進行連接
圖、再選擇線段終點並進行連接

選擇正確的話畫面上就可以看到一條帶有箭頭的線段出現了。

如果選擇的順序錯誤,箭頭就會變成反方向 XDDD

如果方向畫反了怎麼辦?左下角有刪除連接線的功能,按下去就能刪除線條了,刪完後再重新選一次線段起點 ==> 終點 ==> 連結吧。

刪除連接線的按鈕上方有個『區塊』按鈕,是的,要刪除畫面上的圖形都要利用這個按鈕來刪除。

要注意的是,刪除區塊前要先將它身上連接的所有線段都刪除掉才能刪除區塊。

你可能會預期:『將一個區塊刪掉,它身上連接的線段都自動刪除』,抱歉,fChart 沒有這麼自動,所以就慢慢刪吧。我第一次畫圖時畫錯了,要刪除區塊時真的是手忙腳:『好,刪掉連接線,ㄟ,怎麼是那一條線不見了?我不是要刪那一條線啊!!』但第二張圖就畫得很順利了。

程式將兩個項目連接好
圖、程式將兩個項目連接好

ㄟ,線是 fChart 幫你連的,那遇到判斷式怎麼辦?

一樣,是由 fChart 幫你連。第一條從判斷式連接出去的線段會自動標註為 YES,代表判斷式成立時的走向。

判斷式的第一條連接式自動顯示 Yes
圖、判斷式的第一條連接式自動顯示 Yes

第二條從判斷式連接出去的線條就自動標示為 NO,所以要畫線前要想清楚,哪邊是 YES 的走向?哪邊是 NO 的走向?要不然還要刪掉重畫一次。

第二條連接線則顯示為 No
圖、第二條連接線則顯示為 No

嗯,好,現在要來將走向 YES 方向的流程再拉回來了,怎麼做呢?

是可以像前面直接選起點 & 終點來連線啦,不過畫出來不漂亮,有些流程要回到前面去的,利用這方法還會跟原本的線條重疊在一起,變得看不到線段,很麻煩。

不過 fChart 沒有提供線條功能更不要說折線了,那怎麼辦?這時候就需要一個『連接點』出來幫忙了。

利用連接點讓流程轉個彎

fChart 中的連接點祇是一個讓流程轉彎的圖形,本身並沒有參與變數的操弄,它唯一的功能就是讓流程指向它,再將流程轉向出去。

轉彎的地方用連接點
圖、轉彎的地方用連接點

選擇工具列中的連接點圖形,放置於畫面中,再連接出兩條線段,OK,我讓從 YES 分支出去的流程回到主線上來了。

利用連接點串連各個行動
圖、利用連接點串連各個行動

有時一個連結點不夠,那就多加幾個連接點吧。

不同的流程間用多個連接點串接
圖、不同的流程間用多個連接點串接

還有更強大的呢!!

到這裡已經能用 fChart 來畫流程圖並實際執行看看這個流程是否順暢、正確了,不過 fChart 功能還不祇如此,比方說,從剛剛一路看下來,你有發現所有的圖片最右邊都沒有捲動軸嗎?

因為畫面最右邊缺乏捲動軸,所以 fChart 永遠祇能畫『一個畫面以內』的流程圖。

『-_-||| 這算什麼功能?這是程式的不足吧?』

嗯,fChart 缺少右方捲軸,所以遇到比較複雜的流程就必須拆分為幾個小工作,逐一為小工作畫流程圖。然後在主圖之中利用函數功能 (一樣是在左方工具列) 呼叫那些拆分出去的小流程。

陳會安先生上次在 FB 提到 fChart 這個函數功能還可以實現遞迴函數,神奇吧?不過我自己還沒畫過遞迴函數的流程圖,這幾天再來試試。