2020北航oo第一單元(表示式求導)總結

2022-09-09 07:12:14 字數 3539 閱讀 4473

三次作業分析

1:第一次作業

1.1:題目分析

這次作業是簡單的多項式求導。

多項式由加減法連線項,項由乘法連線因子,因子為冪函式和帶符號整數。

1.2:實現方案

一共建立了三個類,main類包括程式的入口,接受輸入,並將結果優化後輸出。handle類接受來自main類的表示式,並進行預處理,比如去掉空格等,再利用正則和for迴圈,將表示式化為key為冪函式指數,value為係數的map,並合併同類項,該map用+連線後與原表示式等價,返回該map。multinomial類接受到處理後的map,在求導規則下進行求導,並返回求導後的map。main類再進行優化輸出。

程式uml圖:

1.3:結構分析

此次作業先用handle類清除多餘符號,再用正則和for迴圈解析表示式,之後用multinational類的dico方法求導,並在main類中優化後輸出。

作業度量如下

1.4:得失分析

這次作業仍有很多面向過程的思想,基本上們沒有物件導向的思想。強測沒有測出bug,但在互測過程中被hack了十幾次。在通過觀察並測試他人**時,感到了**風格的作用,好的**風格能讓人更好的讀懂。此外在本次作業,我學到了:

1.map和arraylist容器的使用。

2.繼承和介面的使用

3.如何debug和修改bug

2:第二次作業

2.1:題目分析

本次作業是包含簡單冪函式和簡單正余弦函式的表示式求導。

相比於第一次作業:1.新增因子sin(x),cos(x)。2.新增括號。

2.2:實現方案

一共建立了四個類,main類包括程式的入口,接受輸入,並將結果優化後輸出。key類為map的鍵,成員為冪函式,正余弦函式的指數,並重寫了hashcode和equals方法來用自定義的方式判斷兩鍵值是否相等。

handle類接受來自main類的表示式,並進行預處理,比如去掉空格,將sin(x)替換為s

等,再利用正則和for迴圈,將表示式化為key為自定義的key類,value為係數的map,並合併同類項,該map用+連線後與原表示式等價,返回表示式的map。具體方式為維護三個map,分別為因子、項、表示式,遇到項間的+-*時進行map合併,遇到括號時遞迴處理,其餘情況用正則匹配因子並放入到因子的map中。

multinomial類接受到處理後的map,在求導規則(map中每一項都是固定的形式,所以求導規則一定)下進行求導,並返回求導後的map。main類再進行優化輸出。

程式uml圖:

2.3:結構分析

此次作業用handle類簡化表示式的預處理,並借助正則,for迴圈和遞迴解析表示式成map,然後在multinomial類中進行求導,最後在main類對結果優化後輸出。

本次作業度量如下:

2.4:得失分析

這次作業仍然沒有用到物件導向的思想,基本上都是面向過程。在強測部分未出現bug,但在互測環節仍然被hack了十幾次。不過這些互測樣例讓我更好的面對我的程式和bug,讓我的思維更加的縝密,並在同學的幫助下順利修復。另外此次作業我學到了:

1.map是如何判斷兩個鍵是否相等,並且怎麼用自己的方式定義相等。

2.要考慮周到,巧用正規表示式,但不能全用正規表示式。

3:第三次作業

3.1:題目分析

本次作業是包含冪函式和正余弦函式的表示式求導。

相對與第二次作業:1.新增格式判斷。2.新增sin(),cos()巢狀。

3.2:實現方案

一共建立了八個類,sin類和cos類管理三角函式,成員包括指數和三角函式括號內的map引用和對應的三角函式相乘方法。factoer類為他們的父類,方便管理。main類包含程式入口,接受輸入和輸出。key類為map的鍵,成員為冪函式的指數、乙個陣列代表多個sin相乘、乙個陣列代表多個cos相乘。precheck類為格式檢查,利用正則和窮舉法來判斷輸入格式是否正確。handle類接受來自main類的表示式,並進行預處理,比如去掉空格,將sin(x)替換為s等,再利用正則和for迴圈,將表示式化為key為自定義的key類,value為係數的map,並合併同類項,該map用+連線後與原表示式等價,返回表示式的map。具體方式為維護三個map,分別為因子、項、表示式,遇到項間的+-*時進行map合併,遇到括號時遞迴處理,其餘情況用正則匹配因子並放入到因子的map中。

multinomial類接受到處理後的map,在求導規則(map中每一項都是固定的形式,為係數、冪函式和多個三角函式相乘,所以求導規則一定)下進行求導,返回求導後的字串。main類再進行優化輸出。

作業的uml圖如下:

3.3:結構分析

本次作業了構建因子類,然後先在precheck類中進行格式判斷,再在handle類利用正則和for迴圈構建表示式的map,之後在multinational類中進行求導,最後在main類優化結果並輸出。

本次作業度量:

3.4:得失分析

本次作業由於格式判斷部分未考慮周全,導致只通過了中測的基礎樣例,未通過高階樣例,因此未進入互測,而且在強測中只獲得了33分。不過在同學和助教的幫助下,順利修復了bug,完成了此次作業。並且在這次作業中用到了物件導向的思想。本次作業中我學到了:

1.物件導向思想的方便之處。

2.評測機的設計原理。

3.多型的使用。

4:單元分析

總之,我學到了很多的知識,不僅僅是j**a,還有很多思想。希望自己在今後的學習中能多多使用這些知識,不斷完善自己的技術。

OO第一單元總結 表示式求導

三次作業的內容均為多項式求導。第一次僅有冪函式,第二次新增了三角函式,第三次增加了巢狀因子。在格式輸入和計算過程中,前兩次都有較為固定統一的格式,而第三次由於有巢狀的遞迴表達,如果前兩次沒有專注設計 淚目 則需要尤其調整結構的問題。整個問題可以被拆分為格式檢查 求導計算和輸出處理三部分。其中格式檢查...

北航oo作業第一單元小結

前言 在經過了三次艱辛的oo作業後,oo課程的第一單元告一段落,這一單元,我作為乙個oo小白,開始了解oo的程式設計思想,也有了自己的一點心得體會。把筆粗成字,不當之處,還請各位大佬多多指教。一.分析程式結構 第一次作業 在第一次作業中,由於剛剛開始接觸oo的思想,我還不是很了解物件導向的程式設計方...

2020北航OO第二單元總結

任務要求 通過多執行緒的互斥和同步控制,實現電梯功能模擬,並進行擴充套件和迭代。第一次作業 單電梯,由於請求完成時間有限制,所以需要進行捎帶或者其他優化策略。第二次作業 多部電梯,增加每部電梯人數限制,到達樓層可擴充套件到負數層。第三次作業 多部電梯,每部電梯可到達樓層 速度 人數限制不同。需要支援...