近年來已有許多人,以保留C語言流程控制語法架構,再將填充於架構內的程式碼以文字說明或數學方程式取代,織組成描述演算法的說明文件,這種表達方式,被稱為是虛擬碼 (pseudo code)。
前述的客服電話處理流程圖範例,如果使用虛擬碼,可以寫成以下範例:
接聽電話 Answer phone
switch(請問有什麼事可幫忙How can we help)
case產品資訊product info:
請教並記錄公司寶號take name of company
轉接銷售部門 transfer to sales (ext 2203)
break
case客訴問題problem ask:
switch (請問是那種客訴what is problem)
case: 產品客訴 problem with product
請教並記錄公司寶號take name of company
轉接維修櫃台 transfer to help desk (ext 2217)
break
case送貨客訴: shipping
:
case 帳單客訴: billing
:
endswitch(客訴種類)
case 其他:
:
endswitch(何事)
由於虛擬碼與程式碼具有很強的對應性,而且佔用空間也遠小於流程圖,本課程未來介紹演算法,多半會利用虛擬碼作為工具。
範例一:內容互換
有兩個變數,它們的內容要交換座位(記憶體空間),為了怕新值蓋寫舊值,需要先將舊值找到地方存,才能寫入新值,可以用以下演算法,執行兩值互換的工作。
暫存值=第一值 (清出第一值空間)
第一值=第二值 (第二值移往第一值空間,同時清出第二值空間)
第二值=暫存值 (暫存值移往第二值空間)
範例二:疊代更新運算
疊代更新是數位訊號處理(DSP)以及數位控制(Digital Control)中很常見的實作方式。以下方程式,即一般的疊代狀態方程式及輸出方程式:
for ( t = 0 to N ) //for(t=0; t<=0; t++)
x(t) = f(x(t-1), u(t)) //狀態方程式運算
y(t) = g(x(t),u(t)) //輸出方程式運算
endfor t //endfor = {}
狀態方程式表示的是在t時間狀態變數x(t)受到前一時間的狀態變數x(t-1),以及輸入變數u(t)的影響來共同決定狀態,其決定的方式是由f()函數的公式計算出來。
輸出方程式則表示,是在y時間輸出變數y(t)由目前狀態變數x(t),以及輸入變數u(t)共同決定,決定的方式是代入函數g()的公式運算得來。
前述的虛擬碼,也可以表示成以下流程圖:
疊代更新流程圖
比較常用的方程式是線性的方程式
for ( t = 0 to N)
x(t) = ax(t-1) + bu(t)
y(t) = cx(t) + du(t)
endfor t
上述兩個方程式是現代控制的標準方程式,而後面實驗介紹的則是實現它的程式技術。不論機械或電機學控制的人,要實作控制器出來,都需要學會這種程式技巧。
在此處新增文本段落。