簡介
計算機語言只是一種工具。光學習語言的規則還不夠,最重要的是學會針對各種類型的問題,擬定出有效的解決方法和步驟即算法。有了正確而有效的算法,可以利用任何一種計算機高級語言編寫程式,使計算機進行工作。因此,設計算法是程式設計的核心。為了表示一個算法,可以用不同的方法。常用的有自然語言,流程圖,偽代碼,PAD圖等。這其中以特定的圖形符號加上說明,表示算法的圖,稱為算法流程圖。
傳統流程圖
用圖表示的算法就是流程圖。流程圖是用一些圖框來表示各種類型的操作,在框內寫出各個步驟,然後用帶箭頭的線把它們連線起來,以表示執行的先後順序。用圖形表示算法,直觀形象,易於理解。
符號
美國國家標準化協會ANSI曾規定了一些常用的流程圖符號,為世界各國程式工作者普遍採用。最常用的流程圖符號見圖。
處理框(矩形框),表示一般的處理功能。
判斷框(菱形框),表示對一個給定的條件進行判斷,根據給定的條件是否成立決定如何執行其後的操作。它有一個入口,二個出口。輸入輸出框(平行四邊形框)。
起止框(圓弧形框),表示流程開始或結束。
連線點(圓圈),用於將畫在不同地方的流程線連線起來。用連線點,可以避免流程
線的交叉或過長,使流程圖清晰。
流程線(指向線),表示流程的路徑和方向。
注釋框,是為了對流程圖中某些框的操作做必要的補充說明,以幫助閱讀流程圖的人更好地理解流程圖的作用。它不是流程圖中必要的部分,不反映流程和操作。
程式框圖表示程式內各步驟的內容以及它們的關係和執行的順序。它說明了程式的邏輯結構。框圖應該足夠詳細,以便可以按照它順利地寫出程式,而不必在編寫時臨時構思,甚至出現邏輯錯誤。流程圖不僅可以指導編寫程式,而且可以在調試程式中用來檢查程式的正確性。如果框圖是正確的而結果不對,則按照框圖逐步檢查程式是很容易發現其錯誤的。流程圖還能作為程式說明書的一部分提供給別人,以便幫助別人理解你編寫程式的思路和結構。
基本結構
傳統的流程圖用流程線指出各框的執行順序,對流程線的使用沒有嚴格限制。因此,使用者可以毫不受限制地使流程隨意地轉來轉去,使流程圖變得毫無規律,閱讀者要花很大精力去追蹤流程,使人難以理解算法的邏輯。如果我們寫出的算法能限制流程的無規律任意轉向,而像一本書那樣,由各章各節順序組成,那樣,閱讀起來就很方便,不會有任何困難,只需從頭到尾順序地看下去即可。
為了提高算法的質量,使算法的設計和閱讀方便,必須限制箭頭的濫用,即不允許無規律地使流程亂轉向,只能按順序地進行下去。但是,算法上難免會包含一些分支和循環,而不可能全部由一個一個框順序組成。如上例不是由各框順序進行的,包含一些流程的向前或向後的非順序轉移。為了解決這個問題,人們構想,如果規定出幾種基本結構,然後由這些基本結構按一定規律組成一個算法結構,整個算法的結構是由上而下地將各個基本結構順序排列起來的。1966年,Bohra和Jacoplni提出了以下三種基本結構,用這三種基本結構作為表示一個良好算法的基本單元。
1、 順序結構:如圖所示的虛線框內,A和B兩個框是順序執行的。順序結構是最簡單的一種基本結構。
2、選擇結構:如圖所示的虛線框中包含一個判斷框。
根據給定的條件p是否成立而選擇執行A和B。p條件可以是“x>0”或“x>y”等。注意,無論p條件是否成立,只能執行A或B之一,不可能既執行A又執行B。無論走哪一條路徑,在執行完A或B之後將脫離選擇結構。A或B兩個框中可以有一個是空的,即不執行任何操作。
3、循環結構:又稱重複結構,即反覆執行某一部分的操作。有兩類循環結構:
當型(While):當給定的條件p成立時,執行A框操作,然後再判斷p條件是否成立。如果仍然成立,再執行A框,如此反覆直到p條件不成立為止。此時不執行A框而脫離循環結構。
直到型(Until):先執行A框,然後判斷給定的p條件是否成立。如果p條件不成立,則再執行A,然後再對p條件作判斷。如此反覆直到給定的p條件成立為止。此時脫離本循環結構。
注意兩種循環結構的異同:兩種循環結構都能處理需要重複執行的操作;當型循環是“先判斷(條件是否成立),後執行(A框)”。而直到型循環則是“先執行(A框),後判斷(條件)”;當型循環是當給定條件成立滿足時執行A框,而直到型循環則是在給定條件不成立時執行A框。
同一個問題既可以用當型循環來處理,也可以用直到型循環來處理。對同一個問題,如分別用當型循環結構和直到型循環結構來處理的話,則兩者結構中的判斷框內的判斷條件恰為互逆條件。
結構流程圖
1973年美國學者提出了一種新的流程圖形式。在這種流程圖中,完全去掉了帶箭頭的流程線。全部算法寫在一個矩形框內。在該框內還可以包含其它的從屬於它的框,即可由一些基本的框組成一個大的框。這種適於結構化程式設計的流程圖稱N-S結構化流程圖,它用以下的流程圖符號:
1、順序結構:A和B兩個框組成一個順序結構。
2、選擇結構:當p條件成立時執行A操作,p不成立則執行B操作結構。
3、循環結構:當型循環結構下,圖符表示先判斷後執行,當p條件成立時反覆執行A操作,直到p條件不成立為止。
用以上三種N-S流程圖中的基本框.可以組成複雜的N-S流程圖,以表示算法。
例:將判別素數的算法用N-S流程圖表示。
上面的非結構化流程圖不是由三種基本結構組成的:圖中間的循環部分有兩個出口,不符合基本結構的特點。由於不能直接分解為三種基本結構,應當先作必要的變換再用N-S流程圖的三種基本結構的符號來表示。即將第一個菱形框的兩個出口匯合在一點。其方法是設一個標誌值K,它的初始狀態為0(表示N為素數),當K≠0時為非素數。注意當型和直到型的判斷條件。
N-S圖表示算法的優點是:比傳統流程圖緊湊易畫,尤其是它廢除了流程線。整個算法結構是由各個基本結構按順序組成的,其上下順序就是執行時的順序。寫算法和看算法只需從上到下進行就可以了,十分方便。歸納起來,一個結構化的算法是由一些基本結構順序組成的;在基本結構之間不存在向前或向後的跳轉,流程的轉移只存在於一個基本結構範圍之內(如循環中流程的跳轉);一個非結構化的算法可以用一個等價的結構化算法代替,其功能不變。如果一個算法不能分解為若干個基本結構,則它必然不是一個結構化的算法。
轉換
流程圖到類c語言的實時轉換過程如下:
流程圖結構由封裝為Icon形式的功能模組和表示不同分支屬性的連線組成,每個功能模組表示一條語句,而直線和折線表示邏輯關係。不同的語句以功能模組名稱加以區別,而連線則以顏色和方向加以區別.定義主邏輯採用垂直方向的連線表示,而分支邏輯(循環、條件判斷等)採用水平方向的連線表示.通過這種表示,流程圖按垂直和水平方向展開成樹型結構.功能模組是樹的節點,邏輯關係是這一樹型結構的連線。對不同執行模組的函式封裝,定義一套庫函式,對不同流程控制模組封裝類c語言代碼,這些語句可以控制各個執行模組的執行流程,執行模組參照封裝的庫函式,而流程控制模組參照封裝的語句翻譯為不同的類c語言代碼。
具體的轉換方法:在功能模組中定義模組的類別、屬性參數等;由某個模組或多個模組組成的流程圖程式是存儲在一個模組集合或稱為一個模組樹中,當用戶添加、刪除、移動或修改功能模組時會實時根據各個模組間的父子關係遍歷模組樹,並參照功能模組封裝的庫函式或語句轉換為對應的類C語言代碼,體現轉換的實時性;生成的類c語言代碼自動添加注釋,方便用戶對類c語言代碼的理解。