在寫程式的過程中,難免會出現各種各樣的情況,有的情況也許不是我們想要的。有的人也許會用很多判斷要嚴格控制程式,使其不會出現異常情況,但這樣做可能會增加寫程式的難度。其實我們還可以用一種更加簡便的方法,那就是異常。在程式中合理的使用異常將使你在寫程式中省去很多煩惱。在delphi中,borland 已經為我們定義了很多異常的類,我們可以直接使用。但是如果我們不去管異常的話,會使程式的的介面亂七八糟,下面就介紹兩種常用的異常捕捉方法。
關於計算數學表示式,不同的人有自己不同的做法。有的用解析表示式的方法,那種方法需要有編譯的知識,下面用的方法很簡單,沒有幾個**便可以進行複雜的運算。如果表示式中有錯誤,還可以彈出對話方塊提示,指出相應的錯誤。本程式所用的就是標準的sql語句,支援很多運算,基本運算如:加、減、乘、除、整除;邏輯運算如:and、or、xor、not;數**算如:cos、sin等。另外還有字串運算,不過那沒什麼意義,如你輸入「left('abcd',2)」,它就會計算出「=ab」。由於本程式本照著上面所述的宗旨,沒對這些做太多的限止,有興趣的朋友可以事先先檢查表示式的語法,然後再交給本程式計算。
inte***ce
uses
windows, messages, sysutils, variants, classes, graphics, controls, forms,
dialogs, stdctrls, db, adodb;
type
tfrmcalc = class(tform)
button1: tbutton;
edit1: tedit;
procedure button1click(sender: tobject);
procedure edit1keypress(sender: tobject; var key: char);
private
public
end;
function calcexpr(expr :string):string; //計算數學表示式的函式,其中 expr 為表示式
varfrmcalc: tfrmcalc;
implementation
//這就是本程式的核心,計算表示式就靠它了
function calcexpr(expr :string):string;
var qury: tadodataset;
begin
qury := tadodataset.create(nil);
tryqury.connectionstring := 'provider=msdasql.1;persist security info=false;'
'data source=dbase files';
qury.commandtext := 'select ' expr ' as result';
qury.open ;
result := expr ' = ' qury.fieldbyname('result').asstring;
finally
qury.free ;
end;
end;
procedure tfrmcalc.button1click(sender: tobject);
begin
tryedit1.text := calcexpr (edit1.text);
except
on h:exception do begin
showmessage(h.message );
end;
end;
end;
procedure tfrmcalc.edit1keypress(sender: tobject; var key: char);
begin
if key = #13 then button1click(self);
end;
end.
總結:由此可見,異常的捕捉有兩種方法有兩種,一種是用 try...except...end;另一種是用 try....finally....end。這兩種捕捉異常的方法是有差別的,各有各的用處。
try...except...end一般用於在呼叫了某種方法後,我們需要捕捉其錯誤並做出相應提示的時候。如上面程式中的呼叫計算表示式的函式時,計算表示式的函式很有可能丟擲異常,所以在呼叫的時候必須捕捉到其異常,做出相應的提示,或進行相關的後續處理,以免其引起系統報錯,影響程式介面的美觀。如果我們只是簡單的報一下錯,就可以簡單的在 except...end 中間寫上報錯的相應的提示就行了。如果要想看看具體是哪種錯誤就要仿照上面的作法來捕捉錯誤了。
try....finally....end一般用於,我們在分配某種資源後,進行相關的操作,而這種操作很有可能引起異常,但我們又必須在這些操作完畢後才能釋放這種資源。有了try....finally....end這個語句後,我們就可以在分配資源後放心大膽地把操作語句完全放在try....finally 中,把這裡面想象成可以完全順利執行的情況來操作,因為如果哪一步執行不下去,它就會跳出這個圈子進入finally裡面,而不會順序執行下去了。在finally....end中我們可以進行一些善後工作,如釋放當初分配的資源,因為不管上面是順利執行,還是遇到異常都會執行這裡面的語句的。
可見,上面的語句是為捕獲異常而設的,下面的語句是為資源分配而設的,但有的朋友說,如果我們既想捕獲異常,又想收回資源那該怎麼辦?可惜的是borland 沒有 try...except....finally...end這樣的語句,如果想達到上述目的只能用巢狀了,只不過那樣做將會很不好看。
總之,合理的運用異常類可以大大減化我們的程式設計,使我們的程式思路更加清淅。寫出來的程式更加優美。
數學表示式的計算 如何捕捉異常
在寫程式的過程中,難免會出現各種各樣的情況,有的情況也許不是我們想要的。有的人也許會用很多判斷要嚴格控制程式,使其不會出現異常情況,但這樣做可能會增加寫程式的難度。其實我們還可以用一種更加簡便的方法,那就是異常。在程式中合理的使用異常將使你在寫程式中省去很多煩惱。在delphi中,borland 已...
數學計算表示式解析
最近在寫乙個計算器的專案,其中最麻煩的就是數學表達試的解析,用c語言解決問題,每一步基本都要自己實現,非常鍛鍊邏輯能力。用了將近兩個晚上的時間,終於完成了大部分表示式的解析,寫這篇文章來記錄下遇到的問題。涉及到二維指標。主要思想和這篇部落格中的一樣 首先進行括號代換,就是將括號中的表示式單獨計算出來...
C 數學表示式計算
c 計算 數學表示式 標量的值 搞個字典 string double 更具 操作符號 分割字串 更具 優先順序把資料 push stack 再每次 分別 pop 2個資料,和 乙個操作符,一直到全部結束 效果下圖如圖 部分核心 如下 空 stack 返回 true 空 stack 返回 true p...