PTA題目集7-8總結

nchuqiuj發表於2024-06-28

1. 前言

  • 知識點:
    繼承,多型,類設計
  • 題量:一次一道題,1000行程式碼左右,還行,不多
  • 難度:
    • 家居強電電路模擬程式-3 :略難,主要是互斥開關好難設計啊!!!不知道要怎麼寫
    • 家居強電電路模擬程式-4 :太難啦,提示和沒有一樣啊!!!真的找不到還有哪裡錯啦,想不到啊啊啊!!!

2. 設計與分析

  • 家居強電電路模擬程式-3:
    題目:
    新增內容:
互斥開關:

互斥開關有3個引腳:1個是彙總引腳,另兩個是分支引腳。

開關電路示意圖如圖1所示,
左邊是彙總引腳,編號為1;
右邊兩個是分支引腳,右上的輸出引腳為2,右下輸出引腳為3。

圖中1、2、3引腳均可以是輸入引腳,當
1為輸入引腳時,2、3引腳為輸出引腳;
1為輸出引腳時,2、3引腳為輸入引腳。

互斥開關只有兩種狀態:
開關接往上面的2號引腳、接往下面的3號引腳。
開關每次只能接通其中一個分支引腳,而另一個分支引腳處於斷開狀態。

互斥開關的預設狀態為1、2引腳接通,1、3引腳斷開。

為避免短路,互斥開關設定了限流電阻,12引腳之間預設電阻為5,13引腳之間預設電阻為10。

受控窗簾:

受控窗簾的電路符號為S,其最低工作電壓為50V,電壓達到或超過50V,窗簾即可正常工作,不考慮室外光照強度和室內空間大小等因素,窗簾受室內燈光的光照強度控制。

當電路中所有燈光的光照強度總和在[0,50)lux範圍內,窗簾全開;
在[50,100)lux範圍內,窗簾開啟比例為0.8;
在[100,200)lux範圍內,窗簾開啟比例為0.6;
在[200,300)lux範圍內,窗簾開啟比例為0.4;
在[300,400)lux範圍內,窗簾開啟比例為0.2;
在400lux及以上範圍內,窗簾關閉。
當電壓低於50V,窗簾不工作,預設為全開狀態。

如果電路中沒有燈或者燈全部關閉,光照強度為0,窗簾處於全開狀態。
受控裝置電阻:白熾燈的電阻為 10,日光燈的電阻為 5,吊扇的電阻為 20,落地扇的電阻為 20,窗簾電阻為15。

本次迭代考慮多個並聯電路串聯在一起的情況。

本題考慮一條串聯電路中包含其他串聯電路的情況。例如:
#T3:[VCC K1-1] [K1-2 T2-IN] [T2-OUT K2-1] [K2-2 T1-IN] [T1-OUT GND]
本例中T1\T2兩條串聯電路T3的一個部分,本題考慮這種型別的輸入。

SourceMontor的生成報表:

主要類設計:

設計分析:

  1. 互斥開關
有2種連線方式,對應不同電阻
1-2 5Ω
1-3 10Ω
預設1-2閉合,1-3開啟
加一個屬性int state表示互斥開關的狀態,是1-2還是1-3
構造方法預設為state=2(即1-2)
輸出時輸出1-2的狀態

設計如下:

  1. 窗簾
    作為Equipment的子類
    設計如下:

窗簾的open設定要在電路設定好電壓得到光照強度後才能設定

  1. SetCurtain類
    獲取電路中光照強度之和,新增到窗簾類中

4.ParseInput類
串聯中可以有並聯,對ParseInput轉化為串聯電路的方法進行修改

  • 家居強電電路模擬程式-4:
    題目:
    本題新增內容:

1)增加管腳電壓的顯示

在輸出每個電器的狀態資訊後,再依次輸出該電器每個管腳的電壓。(格式詳見輸出資訊部分)

2)電流限制

電器在工作時,過大的電流會引起電器過熱,從而燒壞電路。本次迭代,每個元器件都有最大電流的設定,當實時電流超過最大電流時,在該電器輸出資訊的最後加入提示“exceeding current limit error”,與前面的資訊之間用英文空格分隔。

例如:@B1:190 68-17 exceeding current limit error

本題各類電器的最大限定電流如下:

開關20、分檔調速器18、連續調速器18、白熾燈9、日光燈5、吊扇12、落地扇14、互斥開關20、受控窗簾12、二極體8。

3)短路檢測

如果電路出現無窮大的電流造成短路,所有元器件資訊不輸出,僅輸出提示“short circuit error”

4)並聯電路中包含並聯

本次迭代考慮並聯電路中包含並聯電路的情況,即構成並聯電路的串聯電路可以包含別的並聯電路。例如如下輸入的電路,並聯電路M2的其中一條串聯電路T4中包含了另一條並聯電路M1:

#T1:[IN D2-1] [D2-2 H1-2] [H1-1 OUT]
#T2:[IN D1-1] [D1-2 H1-3] [H1-1 OUT]
#M1:[T1 T2]
#T4:[IN K3-1] [K3-2 M1-IN] [M1-OUT OUT]
#T5:[IN K1-1] [K1-2 B1-1] [B1-2 OUT]
#M2:[T4 T5]

5)二極體
增加二極體元件,其電路特性為:正向導通,反向截止;其電器符號如圖4所示,當電流從左至右流過時,二極體導通”conduction”,電阻為0;電流從右至左流動時,二極體截止”cutoff”,電阻無窮大,相當於開關開啟。

二極體的識別符號為’P’,左側管腳編號為1,右側管腳編號為2。
二極體如果兩端電壓相等,沒有電流流過,分以下兩種情況輸出:

1、如果兩端電壓為0,二極體的導通/截止狀態由接入方向決定,1號引腳靠近電源則狀態為導通,反之為截止。
2、如果兩端電壓不為0,二極體導通。

SourceMontor的生成報表:

類圖:

設計分析:

把互斥開關作為開關的一個子類,開關直接作為CircuitElement的子類

調控器類如下:

二極體作為Equipment的子類,設計如下:
類似於開關

上一次程式碼使用不方便,本次進行了重構
InputClassify類對輸入資訊進行分類

ToCircuitElements類把電路中的元件拆分並初始化物件

ConnectTheCircuit類根據輸入資訊,把電路連線起來

Output對幹路進行處理並輸出

控制資訊的處理在Main中進行,電壓設定也在Main中進行

3. 踩坑心得

  • 家居強電電路模擬程式-3 :
    1.串聯電路(幹路除外)中含有並聯電路會讀取失敗
    輸入:

錯誤輸出:

正確輸出:

2.互斥開關輸出有問題,當開關時1-3連線時會不輸出

輸入:

錯誤輸出:

正確輸出:

  • 家居強電電路模擬程式-4 :
    1.互斥開關的3號引腳輸出錯誤
    (測試點2)
    錯誤輸出:

正確輸出:

2.只考慮了開關和二極體的引腳會反接,沒有考慮其他電器元件的引腳會反接,受控窗簾忘記設定光照強度了
(測試點23)
錯誤輸出:

正確輸出:

3.互斥開關設計有問題,導致引腳電壓輸出錯誤或調控失效或輸出1-3狀態

輸入:
#T4:[IN H3-1] [H3-2  H1-2] [H1-1 OUT]
#T5:[IN H3-1] [H3-3  H1-3] [H1-1  OUT]
#M2:[T4 T5]
#T3:[VCC K2-1] [K2-2 M2-IN] [M2-OUT D1-1] [D1-2 GND]
#K2
end

執行結果:

錯誤輸出:
@K2:closed 220-220
@D1:346 146-0
@H1:closed 146-183-146
@H3:closed 220-183-146

正確輸出:
@K2:closed 220-220
@D1:346 146-0
@H1:closed 146-183-0
@H3:closed 220-183-0

4.斷路中電器元件引腳電壓設定不正確

用例:

輸入:
#T1:[IN H1-1][H1-3 B1-1][B1-2 H2-2][H2-1 OUT]      
#T2:[IN H1-1][H1-2 R1-1][R1-2 H2-3][H2-1 OUT]
#T3:[IN P1-2][P1-1 P2-2][P2-1 P3-2][P3-1 OUT]
#T4:[IN H5-1][H5-2 H6-1][H6-2 H7-1][H7-2 OUT]
#M1:[T1 T2 T3 T4]                              
#T5:[VCC R2-1][R2-2 M1-IN][M1-OUT R3-1][R3-2 GND]
end

執行結果:

錯誤輸出:
@B1:0 44-44
@R1:0 176-176
@R2:180 220-176 exceeding current limit error
@R3:180 44-0 exceeding current limit error
@H1:closed 176-176-44
@H2:closed 44-44-176
@H5:closed 176-132-0
@H6:closed 132-88-0
@H7:closed 88-44-0
@P1:cutoff 44-176
@P2:cutoff 44-44
@P3:cutoff 44-44

正確輸出:
@B1:0 44-44
@R1:0 176-176
@R2:180 220-176 exceeding current limit error
@R3:180 44-0 exceeding current limit error
@H1:closed 176-176-44
@H2:closed 44-44-176
@H5:closed 176-132-0
@H6:closed 132-88-0
@H7:closed 88-44-0
@P1:cutoff 0-176
@P2:cutoff 0-0
@P3:cutoff 44-0

5.測試點32輸出有問題,受控窗簾在電壓小於50V時要改成0才能正確,而不是100

4. 改進建議

  • 家居強電電路模擬程式-3 :

1.輸入資訊的處理是一行一行先轉化為電路,再調控資訊,查詢不方便

2.幹路應該也當作串聯電路處理,這樣就可以用到串聯電路類中的方法,加強程式碼的複用

3.程式碼有太多重複的地方,有的程式碼在類的方法中有處理,但卻沒有去用類的方法。

  • 家居強電電路模擬程式-4 :

1.互斥開關的設計不合理,使用太麻煩了,應該設計一個更好的

2.串聯電路中設定電壓的方法有不足,考慮不全面,有特殊情況會出錯

5. 總結
1.在類設計和處理輸入資訊時,考慮有所不全,不方便處理,所以在PTA-8時進行了重構,以後在做類設計時應該多思考父類與子類的關係,輸入資訊處理是否方便

2.在寫PTA時,程式碼太長,類和類的方法太多,會導致自己忘記了自己寫過什麼,導致在寫Main類main方法時會有重複的地方,所以一個類的方法應該儘量的少一點,要遵守單一職責,不能什麼方法都寫

6. 課程的改進建議及意見

我認為本課程設計還是比較好學的,只要能跟上節奏還是比較容易懂的,但是設計模式上課時聽懂的難度比較的大,還需要在課後不斷學習。

pta題目集的難度是從簡單一次次迭代變難,但花了時間寫還是可以80分以上的。pta的題目每過一個月要是能講一下大作業的思路就好了。