oo第一次部落格 三次表示式求導的總結與反思

2022-07-30 16:15:13 字數 1760 閱讀 7498

三次作業依次是多項式表示式求導,多項式、三角函式混合求導,基於三角函式和多項式的巢狀表示式求導。

第一次作業想法很簡單,根據指導書,我們可以發現表示式是由各個項與項之間的運算子(+,-)組成的,而每個項是由因子與因子間的運算子(*)組成的。對於首項和項的首個因子可能會出現特殊情況。

因此,我認為可以用物件導向的思想來解決這個問題。物件一共有兩類,第一類是項,第二類是因子。具體實現如下:

1.讀入,並構造乙個合法ascii碼陣列,對於合法的字元char,legal['char']=1,之後掃瞄表示式,判斷是否有非法字元。

2.判斷表示式第乙個非空格或製表符是否為+或-,若否,則將表示式接在"+"後。

3.構造正規表示式,讀取項與項的前置運算子。

4.對於每個項,構造正規表示式讀取各因子並儲存其指數和係數,這時,對於每個項,可以運算得到唯一的係數與指數。

5.求導並輸出。

而第二次作業是與第一次作業類似的,每個項可以表示為係數*sin(x)^指數*cos(x)^指數*x^指數,完全在第一次作業上增寫。

第三次作業是增加了表示式因子,定義(表示式)為因子,並規定sin或cos括號內可以為因子,其餘要求幾乎一致。這是乙個遞迴定義,很自然的我們想到了遞迴下降法。

在這裡,我發現我掌握的正規表示式不能夠直接處理這種情況了,聯想到資料結構所學習的堆疊,我採取了在第二次作業基礎上加入堆疊的寫法。

首先構建有限狀態機來提取項,這裡實際上是使用的是下推自動機。首先先確定幾個狀態分別表示起始狀態,中間狀態和結束態,並加入堆疊,當空棧push或者結束棧不空時判為wrong format,否則,將該子串作為乙個項傳入因子處理的狀態機。

之後,對於項,同樣使用堆疊和狀態機,根據括號匹配以及括號外'*'來找出每個因子。

在處理因子時,使用了正規表示式,匹配合法整數,x^n,sin,cos,當遇到sin或cos時,使用堆疊找出其作用的串,去掉首尾括號判斷是否為表示式因子,如果均無法匹配,判斷是否為表示式因子。

求導亦需要抓取項、因子的步驟,所以將上述部分寫作幾個類進行復用。

對於求導,鏈式法則可以簡單地用遞迴處理。我們定義f為乙個函式,其因變數為字串str,則對於函式f(str)求導可以表示為str'*f'(str),進行遞迴處理,當str為乙個合法整數或者是x^n形式時,就可以完成最後一步求導,結束遞迴。

在這裡我對於判斷表示式合法與求導進行了保守的處理,沒有一邊判斷一邊求導而是先完整判斷表示式再求導,這樣的好處是避免了邊判斷邊求導是為防止wrong format而不得不儲存所有待輸出結果,但是會消耗更多的時間。

優化只寫了最基本的化簡,我覺得可以加上將多重巢狀括號進行化簡。

第一次作業

第二次作業

第三次作業

第一次最為慘烈,有乙個重大的bug,是因為我優化時規定當係數為0則不輸出,但是忽略了所有項係數均為0時要輸出0。

第二次主要是爆棧問題。

第三次是在遞迴底,在因子類中利用正規表示式判斷時有誤,使得當首項首因子有前置空白符時會誤判wrong format以及爆棧問題。

這三次作業讓我粗略認識了什麼是物件導向,學會用物件的觀點思考問題。第一次作業我依然不太具備物件導向的觀點,**更像是函式較多的面向過程**,第二次在第一次的基礎上將不同層次的物件隔離開分級處理。第三次我認為已經是乙個物件導向風格比較顯著的**了,可是在**復用,也就是繼承上依然有所欠缺。

OO第一次部落格總結

oo是我大學裡經歷的又乙個難關。和計算機組成相比,物件導向程式設計的起點更高。第一次作業 第一次作業給了我乙個下馬威,因為當時正在準備乙個補考,沒有時間學習j a,等到考完,時間已經不多。我的學習一直是沒有效率的,之前程式設計基礎也很差。我開始時候看指導書感覺很難懂,然後同學說要學習字串陣列和正規表...

OO第一次總結

度量分析的工具真的好難搞!到現在我的metrics也無法正常使用,可以建立它的透檢視,但是不能再工程的屬性裡找到它.得,我現在只能展示類關係圖譜 逃 oo給我的感覺就像是雨夜登山一般,登山 本已舉步維艱,大晚上的還漆黑一片,得 邊爬邊摸索 要是走了面向過程的 歪路 也難免重頭再來。加之各種條條框框如...

部落格第一次

2017年11月23號,今天是我第一次寫部落格。之前老師一直要求新生要開始寫部落格了,拖了這麼久,是時候開始把平時學習和生活拿來寫寫了。從進實驗室也有20多天了,在這20多天裡,我感覺實驗室的氛圍非常好。在這裡我不僅可以學習c語言,而且還可以學習英語,學習高數。剛進實驗室的時候,在迎新會上,學姐和學...