PTA题目集7~8的总结
一、前言
第七次题目集为家居强电电路模拟程序3。本题模拟的控制设备包括:开关、互斥开关、分档调速器、连续调速器。模拟的受控设备包括:灯、风扇、受控窗帘。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。输入信息有设备信息、连接信息、控制设备调节信息。考查的知识点有:类与对象、继承、接口、封装、字符串的处理、多态(方法重写与方法重载)。难度较大。
第八次题目集为家居强电电路模拟程序4。由于时间较紧张,pta结束之前没有写完,后来补上。本题新增二极管、管脚电压显示、电流限制、短路检测、并联电路中包含并联电路。
二、设计与分析
1、第七次题目集:家居强电电路模拟程序-3
(1)题目分析
增加互斥开关
互斥开关:
互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。开关电路示意图如图1所示,左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。图中1、2、3引脚均可以是输入引脚,当1为输入引脚时,2、3引脚为输出引脚;1为输出引脚时,2、3引脚为输入引脚。互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。互斥开关的默认状态为1、2引脚接通,1、3引脚断开。图1中所示的互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。
为避免短路,互斥开关设置了限流电阻,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的一个部分,本题考虑这种类型的输入。
输出信息格式:
输出信息:
按开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、互斥开关、受控窗帘的顺序依次输出所有设备的状态或参数。每个设备一行。同类设备按编号顺序从小到大输出。
输出格式:
@设备标识+设备编号+":" +设备参数值(控制开关的档位或状态、灯的亮度、风扇的转速,只输出值,不输出单位)
连续调速器的档位信息保留两位小数,即使小数为0,依然显示两位小数.00。
开关状态为0(打开)时显示turned on,状态为1(合上)时显示closed
如:
@K1:turned on
@B1:190
@L1:0.60
互斥开关显示1、2引脚的接通状态,接通时显示closed,断开时显示turned on。
如:
@H1:turned on
受控窗帘显示窗帘打开的百分比,如:
@S1:80%
(2)程序设计与分析
本次程序设计了电路设备类,受控设备和控制设备类继承自电路设备类,开关、分档调速器、连续调速器继承自控制设备类,灯类和电扇类继承自受控设备类、电路类、电源类、接地类。其中,电路类中存放串联电路中所有设备和连接信息,能添加连接信息,添加设备,更新设备状态,输出设备信息。父类——电路设备类中的pin1和pin2分别存放引脚1和引脚2的电压,设备的电压差可由两引脚的差值计算。
- Device类(电路设备类):有属性引脚1(pin1)、引脚2(pin2)、设备名称(deviceName),构造方法、连接电器方法(用来将其他电器与device连接起来即其他电器的引脚1(pin1)= device的引脚2(pin2))。描述所有电路设备的所有特征。
- ControlDevice类(控制设备类):有构造方法、抽象方法getPin2()。继承自电路设备类。
- ControledDevice类(受控设备类):有构造方法。继承自电路设备类。
- Switch类(开关类):有state属性、无参构造方法、有参构造方法、开关转换方法(toggle())、重写stPin2方法。继承自控制设备类。
- MutexSwitch类(互斥开关类):有pin3引脚、无参构造方法、有参构造方法、开关转换方法(toggle())。
- DialSpeedController(分档调速器类):有gear属性、无参构造方法、有参构造方法、降档方法(decreaseGear())、升档方法(increaseGear())。继承自受控设备类。
- ContinuousSpeedController(连续调速器):有position属性、无参构造方法、有参构造方法。继承自受控设备类。
- Lamp类(灯类):有亮度(brightness)属性、计算亮度方法(calculateBrightness),继承自ControledDevice类。
- Fan类(电扇类):有速度(speed)属性、计算亮度方法(calculateSpeed),继承自Fan。
- FluorescentLight类(白炽灯类):无参构造方法、有参构造方法、重写calculateBrightness方法。继承自Lamp类。
- IncandescentLamp类(日光灯类):无参构造方法、有参构造方法、重写calculateBrightness方法。继承自Lamp类。
- PowerSource类(电源类):电压(voltage)属性、连接设备方法、无参构造方法、有参构造方法。
- Ground类(接地类):电压((voltage)属性、连接设备方法、无参构造方法、有参构造方法。
- Circuit类(电路类):存放连接信息和电路中的电器,有存放连接信息、存放设备以及输出方法。
2、第八次题目集:家居强电电路模拟程序-4
(1)、题目分析
新增以下内容:
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”,电阻无穷大,相当于开关打开。
图2 二极管符号
二极管的标识符为’P’,左侧管脚编号为1,右侧管脚编号为2。
二极管如果两端电压相等,没有电流流过,分以下两种情况输出:
1、如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止。
2、如果两端电压不为0,二极管导通。
(2)程序设计与分析
1、在Device类中增加了属性
public abstract class Device {private double pin1;private double pin2;private String name;private double resistance;private double voltage;private double current;public Device() {// TODO Auto-generated constructor stub}public Device(String name) {super();this.name = name;this.pin1 = 0;this.pin2 = 0;this.resistance = 0;this.voltage = 0;this.current = 0;}public Device(double pin1, double pin2, String name, double resistance, double voltage, double current) {super();this.pin1 = pin1;this.pin2 = pin2;this.name = name;this.resistance = resistance;this.voltage = voltage;this.current = current;}public double getPin1() {return pin1;}public void setPin1(double pin1) {this.pin1 = pin1;}public double getPin2() {return pin2;}public void setPin2(double pin2) {this.pin2 = pin2;}public String getName() {return name;}public void setName(String name) {this.name = name;}public void setResistance(double resistance) {this.resistance = resistance;}public double getVoltage() {return pin1-pin2;}public void setVoltage(double voltage) {this.voltage = voltage;}public double getCurrent() {return voltage/resistance;}public void setCurrent(double current) {this.current = current;}public void connectToDevice(Device anotherDevice) {anotherDevice.setPin1(this.getPin2());}public abstract double getResistance();}
用于计算电流、检测短路等。
三、踩坑心得
1、第七次题目集:家居强电电路模拟程序-3
(1)互斥开关类
有两种想法:
1、互斥开关类中有两个开关
2、在互斥开关中增加两个引脚
最终采取第二种
(2)未考虑串联电路中有串联电路的情况
2、第八次题目集:家居强电电路模拟程序-4
(1)二极管元件:正向导通,反向截止。当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。
(2)串联电路中包含串联电路,再包含串联电路,再包含串联电路的情况
(3)未考虑并联电路之前没有开关和调速器的情况:若并联电路之前没有开关和调速器,应设整条电路的电压为220,再进行接下来的操作。
(4)将二极管看做一个开关
四、改进建议
1、能在输入信息最后在某个电路上增加电路元件。
2、能输出电器个数、通路个数等
五、总结
最后的这两次pta做的不好,自己进行了反思,在暑假应继续练习。