數學表示式的計算 如何捕捉異常

2021-04-17 18:40:10 字數 2742 閱讀 9713

在寫程式的過程中,難免會出現各種各樣的情況,有的情況也許不是我們想要的。有的人也許會用很多判斷要嚴格控制程式,使其不會出現異常情況,但這樣做可能會增加寫程式的難度。其實我們還可以用一種更加簡便的方法,那就是異常。在程式中合理的使用異常將使你在寫程式中省去很多煩惱。在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...