23201829OO第三次blog作业
OO第三次blog作业
前言
这次blog是本学期最后一次回顾总结,本次blog的范围是“家居强电电路模拟程序”的第三和第四次迭代,分别加入了互斥开关、窗帘的概念、多个串联起来的并联电路、串联电路中包含其他串联电路的情况和串联电路中包含串联电路的情况和二极管。因此这两次PTA的难度都不算低。
两次作业分析
第一次作业
本次迭代中加入了一种新的控制元件互斥开关,一种新的受控设备窗帘。加入了串联电路中包含多个并联电路的情况,串联电路中含有串联电路的情况。
互斥开关:
互斥开关有3个引脚:1个是汇总引脚,另两个是分支引脚。
开关电路示意图如图1所示,左边是汇总引脚,编号为1;右边两个是分支引脚,右上的输出引脚为2,右下输出引脚为3。图中1、2、3引脚均可以是输入引脚,当1为输入引脚时,2、3引脚为输出引脚;1为输出引脚时,2、3引脚为输入引脚。
互斥开关只有两种状态:开关接往上面的2号引脚、接往下面的3号引脚。开关每次只能接通其中一个分支引脚,而另一个分支引脚处于断开状态。
互斥开关的默认状态为1、2引脚接通,1、3引脚断开。
图1中所示的互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。
图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的一个部分,本题考虑这种类型的输入。
本次代码大致情况如下:
仍然采用Agent类作为代理类对所有数据进行处理。
加入了Curtain类、RepelSwitch类。同样分别继承自Electric类和Control类。
修改了Skewer类以实现在串联电路中包含其他串联电路的情况。
修改了Agent类中对于串联电路信息的获取和串联电路的创建、串联电路的输入等有关串联电路内部元件的操作以适应串联电路中有多个并联电路的情况。
使用来计算各条并联电路电阻。
SourceMontor的生成报表内容如下
易见还是同样的问题,代码的最大深度较大,但本次代码复杂度较上次有些许降低。
第二次作业
本次迭代中加入了一种新的元件二极管,增加了管脚电压的显示,新增电流限制的要求、短路情况检测。加入串联电路中含有串联电路的情况。
二极管:
增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。
图2 二极管符号
二极管的标识符为’P’,左侧管脚编号为1,右侧管脚编号为2。
二极管如果两端电压相等,没有电流流过,分以下两种情况输出:
1、如果两端电压为0,二极管的导通/截止状态由接入方向决定,1号引脚靠近电源则状态为导通,反之为截止。
2、如果两端电压不为0,二极管导通。
输出格式:
@设备标识+设备编号+":" +设备参数值(控制开关的档位或状态、灯的亮度、风扇的转速,只输出值,不输出单位)+" "+设备所有引脚的电压(按编号从小到大顺序依次输出,电压的小数部分直接丢弃,保留整数输出,电压之间用”-”分隔)
短路检测:
如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”
并联电路中包含并联
本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。例如如下输入的电路,并联电路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]
本次代码的构造过程中,由于之前的代码实在难以处理串联电路中含有串联电路的情款,在思索再三后发现,其实本题运用的思想跟递归类似,在串联电路中含有并联电路,串联电路中又会包含串联电路。这不就是递归的思想吗。但由于转变思维较晚,并且代码需要重构。再加上临近考试周,多方debuff的加成导致代码没能改完。在递归的地方仍存在一些问题导致代码对电路的构建也有问题。
除此之外对于管脚电压的方面也是代码亟须重构的一个原因,在先前的几次代码中采用的都是先计算各部分电阻,随后对各元件采取电阻分压的形式计算电压,并没有管脚电压的建立。但此处难度不大,也可以根据原方法计算出的电压结合220V的工作电压计算得到。
本次迭代还需计算电流的大小,因此在完成了电压和电阻的计算后在Agent类中还续加入一个judge方法以判定是否有电流超限和短路的情况出现。
总结与收获
怎么说呢,这也是这个学期最后的PTA了。难度还是大的,尤其是最后一次。在刚开始的时候实在是让我有种无从下手的感觉。最后还是选择了全部推倒重来。这也是我前期设计上存在的问题。让我深刻体会到了老师说的设计比码代码重要是什么意思。
对于算法的学习还是不够深入,比如这次题目中蕴含的递归思想就没能看出来,直到最后一次迭代中才看出一丝端倪来,因此浪费了大量宝贵的时间。
但总的来看,每一次的PTA都会让人有所收获,尤其是对于复杂逻辑的处理方面。每写一次都感觉是一次头脑风暴。
虽然说PTA的作业是结束了,但从中也是看出自己有很多的不足,还需要继续学习。
本文作者:F-Apocalypse
本文链接:https://www.cnblogs.com/superPTA/p/18276176
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· TypeScript + Deepseek 打造卜卦网站:技术与玄学的结合
· Manus的开源复刻OpenManus初探
· AI 智能体引爆开源社区「GitHub 热点速览」
· 从HTTP原因短语缺失研究HTTP/2和HTTP/3的设计差异
· 三行代码完成国际化适配,妙~啊~