PTA题目集7-8总结
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的生成报表:

主要类设计:


设计分析:
- 互斥开关
有2种连接方式,对应不同电阻
1-2 5Ω
1-3 10Ω
默认1-2闭合,1-3打开
加一个属性int state表示互斥开关的状态,是1-2还是1-3
构造方法默认为state=2(即1-2)
输出时输出1-2的状态
设计如下:

- 窗帘
作为Equipment的子类
设计如下:
![]()
窗帘的open设置要在电路设置好电压得到光照强度后才能设置
- 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的题目每过一个月要是能讲一下大作业的思路就好了。


浙公网安备 33010602011771号