我寫這東西的時候沒有參考別人的,後來才發現,這不是遞歸嗎?
unit jsbds; //計算表達式 //--------------------------------------------// // 漢字最好 2008.11 // // http://blog.csdn.net/stgsd // //--------------------------------------------// interface uses windows,SysUtils,math; function qbdsz(s:string):double; //取表達式值 implementation var x:array of double; //實數範圍可以更改 y:array of string; max:integer; pai,e:double; function qz(s:string):double; //將沒有括號的表達式求值 var t:integer; s1:string; begin try //按加減,乘除,乘方,三角函數對數的順序 t:=pos('+',s); if t>1 then begin s1:=copy(s,1,t-1); delete(s,1,t); result:=qz(s1)+ qz(s);//遞歸調用 exit; end; t:=pos('-',s); if t>0 then begin if t=1 then s1:='0' else s1:=copy(s,1,t-1); delete(s,1,t); result:=qz(s1)- qz(s); exit; end; t:=pos('*',s); if t>1 then begin s1:=copy(s,1,t-1); delete(s,1,t); result:=qz(s1)* qz(s); exit; end; t:=pos('/',s); if t>1 then begin s1:=copy(s,1,t-1); delete(s,1,t); result:=qz(s1)/qz(s); exit; end; t:=pos('^',s); if t>1 then begin s1:=copy(s,1,t-1); delete(s,1,t); //result:=exp(qz(s)*ln(qz(s1)));沒有考慮qz9(s1)爲負數的情況 result:=power(qz(s1),qz(s));//用math單元的冪函數 exit; end; t:=pos('sin',s); if t=1 then begin delete(s,1,3); result:=sin(qz(s)); exit; end; t:=pos('cos',s); if t=1 then begin delete(s,1,3); result:=cos(qz(s)); exit; end; t:=pos('arctg',s); if t=1 then begin delete(s,1,5); result:=arctan(qz(s)); exit; end; t:=pos('tg',s); if t=1 then begin delete(s,1,2); result:=sin(qz(s))/cos(qz(s)); exit; end; t:=pos('ln',s); if t=1 then begin delete(s,1,2); result:=ln(qz(s)); exit; end; t:=pos('lg',s); if t=1 then begin delete(s,1,2); //result:=ln(qz(s))/ln(10); result:=log10(qz(s)); exit; end; if (s[1]='p')and(s[2]='i') then begin result:=pai; exit; end; if s[1]='e' then begin result:=e; exit; end; if s[1]='y' then begin delete(s,1,1); result:=x[strtoint(s)]; //將x與y對應 exit; end; result:=StrToFloat(s); except on exception do messagebox(0,'表達式不正確或計算超出範圍','這不是耍我嗎?',mb_ok); end; end; procedure fenjie(s:string); //分解括號 label xx; var ks,m,n:integer; s1:string; begin n:=0;setlength(y,1); xx: ks:=pos('(',s); //找左括號 if ks>0 then begin for m:=ks to length(s) do begin if s[m]='(' then ks:=m;//第一個右括號之前的左括號 if s[m]=')' then break; //第一個右括號 end; y[n]:=copy(s,ks+1,m-ks-1); //(*),把*存到y數組中 s1:=copy(s,1,ks-1); delete(s,1,m); s:=s1+'y'+inttostr(n)+s; //用yn替代原來的* n:=n+1;setlength(y,n+1); goto xx; //分解其他的括號 end; y[n]:=s; setlength(x,n+1); max:=n; //y數組的上限 end; //如sin(3-2)/(5-8)分解後,y中變成 //y0=3-2 //y1=5-8 //y2=siny0/y1 ,依次計算就可以得到結果 function qbdsz(s:string):double; //s不要有空格,要清除也簡單 var r:integer; begin fenjie(s); for r:=0 to max do x[r]:=qz(y[r]);//從0開始計算y[r]值,x[max]就是最後結果 result:=x[max]; end; //計算qbdsz('(sinpi)^2+(cospi)^2')看看應該等於1 initialization //pai:=arctan(1)*4; pai:=pi; //預先弄好圓周率和自然對數的底 e:=exp(1); end.
pt-osc原理探索及其觸發器的深入分析 > 作者:莫善,某互聯網公司高級 DBA。 > > 愛可生開源社區出品,原創內容未經授權不得隨意使用,轉載請聯繫小編並註明來源。 > > 本文約 6000 字,預計閱讀需要 20 分鐘。 背景 自工
本文分享自華爲雲社區《一文徹底喫透MyBatis源碼!!》,作者:冰 河。 寫在前面 隨着互聯網的發展,越來越多的公司摒棄了Hibernate,而選擇擁抱了MyBatis。而且,很多大廠在面試的時候喜歡問MyBatis底層的原理和源碼實現
本文介紹了 InnoDB 支持哪幾類表鎖,以及它們分別都用在什麼場景下,還介紹了其中兩類表鎖爲什麼要存在。 作者:操盛春,愛可生技術專家,公衆號『一樹一溪』作者,專注於研究 MySQL 和 OceanBase 源碼。 愛可生開源社區出品,
原方法 /** * 動態更新form * @param form */ updateForm(form) { this.form.manholeId = form.manholeId; this.form
詳解 binlog 時間戳與 exec_time 的關係。 作者:李錫超,蘇商銀行DBA,負責數據庫和中間件運維和建設。擅長 MySQL、Python、Oracle,愛好騎行、技術研究和分享。 愛可生開源社區出品,原創內容未經授權不得隨意
背景 最近領導分配了個任務,測試sit環境一些功能相比之前慢了許多,需要優化一下。 問題排查過程 瀏覽器F12查看相關接口的響應,看到底是哪個接口反應慢,根據互聯網的要求,頁面3秒還沒有顯示出來,用戶體驗會非常差。 查看相關代碼的提交
本文分享自華爲雲社區《GaussDB SQL基礎語法示例-BOOLEAN表達式》,作者:Gauss松鼠會小助手2。 一、前言 SQL是用於訪問和處理數據庫的標準計算機語言。GaussDB支持的SQL標準(默認支持SQL2、SQL3和SQL
O2OA(翱途)開發平臺[下稱O2OA開發平臺或者O2OA]的消息機制允許開發者通過配置實現郵件通知。本篇主要闡述如何實現待辦消息的郵件通知。 一、先決條件: 1、O2Server服務器正常運行,系統安裝部署請參考
Flowable 有3種監聽器,相關內容在開發文檔中有詳細的說明: 事件監聽器(Flowable 開發文檔 3.18) 執行監聽器(Flowable 開發文檔 8.5.13) 任務監聽器(Flowable 開發文檔 8.5.14) 分別
本文分享自華爲雲社區《GaussDB(DWS)向量化執行引擎詳解》,作者: yd_212508532。 前言 適用版本:【基線功能】 傳統的行執行引擎大多采用一次一元組的執行模式,這樣在執行過程中CPU大部分時間並沒有用來處理數據,更
本文分享自華爲雲社區《10分鐘搞懂各種內存溢出案例!!(含完整源碼,建議收藏)》,作者:冰 河。 作爲程序員,多多少少都會遇到一些內存溢出的場景,如果你還沒遇到,說明你工作的年限可能比較短,或者你根本就是個假程序員!哈哈,開個玩笑。今天,我
Ai technology 前言 AppBuilder上線了低代碼製作組件功能,可以通過工作流的方式構建自定義組件,完成簡單Agent無法完成的複雜功能,使得生成的文本更加定製化,
最近在刷一些問題的時候看到有下面一個問題 上面問的是當輸入的字符串爲什麼的時候返回 True 總結 在做題目的時候,第一次還做錯了。 這是因爲解答這個題目的時間只有 3 分鐘,沒有自己看題目 後來拿着程序跑了下。 p
前端面試題 - 說一下原型和原型鏈? JavaScript 中,萬物皆對象,對象分爲普通對象和函數對象。 所有的函數都是函數對象(typeof f === 'function'),其他都是普通對象(typeof o === 'object'
唯一索引(Unique Index):保證索引列的值是唯一的,即重複值不允許。 非唯一索引(Non-Unique Index):允許重複值存在。 組合索引(Composite Index):在表的多個列上創建索引。 反向鍵索引(Rever