23201829OO第三次blog作业

news/2024/7/7 20:51:54/文章来源:https://www.cnblogs.com/superPTA/p/18276176

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中所示的互斥开关可以反过来接入电路,即汇总引脚接往接地端,两个分支引脚接往电源端。
image

图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的一个部分,本题考虑这种类型的输入。

image

本次代码大致情况如下:
仍然采用Agent类作为代理类对所有数据进行处理。
加入了Curtain类、RepelSwitch类。同样分别继承自Electric类和Control类。
修改了Skewer类以实现在串联电路中包含其他串联电路的情况。
修改了Agent类中对于串联电路信息的获取和串联电路的创建、串联电路的输入等有关串联电路内部元件的操作以适应串联电路中有多个并联电路的情况。
使用image来计算各条并联电路电阻。

SourceMontor的生成报表内容如下
image

易见还是同样的问题,代码的最大深度较大,但本次代码复杂度较上次有些许降低。

第二次作业

本次迭代中加入了一种新的元件二极管,增加了管脚电压的显示,新增电流限制的要求、短路情况检测。加入串联电路中含有串联电路的情况。

二极管:

增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。

image

图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了。难度还是大的,尤其是最后一次。在刚开始的时候实在是让我有种无从下手的感觉。最后还是选择了全部推倒重来。这也是我前期设计上存在的问题。让我深刻体会到了老师说的设计比码代码重要是什么意思。
image
对于算法的学习还是不够深入,比如这次题目中蕴含的递归思想就没能看出来,直到最后一次迭代中才看出一丝端倪来,因此浪费了大量宝贵的时间。
但总的来看,每一次的PTA都会让人有所收获,尤其是对于复杂逻辑的处理方面。每写一次都感觉是一次头脑风暴。
虽然说PTA的作业是结束了,但从中也是看出自己有很多的不足,还需要继续学习。

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.hqwc.cn/news/734103.html

如若内容造成侵权/违法违规/事实不符,请联系编程知识网进行投诉反馈email:809451989@qq.com,一经查实,立即删除!

相关文章

企业做账流程详解

都说会计月底很忙,那究竟都在忙什么呢,一起来看看吧

快速提取视频字幕!适用B站、AI字幕等等。好用

快速提取视频字幕!适用B站、AI字幕等等。好用 以B站为例: 视频教程:快速提取视频字幕!适用B站、AI字幕!非常好用_哔哩哔哩_bilibili 无论是视频的字幕,还是AI字幕,都可以提取。比较简单。 首先好像需要确定 视频的字幕还是AI字幕。如果是视频字幕,下面F12之后,输入的是…

Ymodem协议说明

Ymodem流程介绍1.Ymodem帧格式 Ymodem两种帧格式: 1024数据格式帧:名称 帧头 包号 包号反码 信息块 校验简写 SOH PN XPN DATA CRC字节数 1 1 1 128 2128数据格式帧:名称 帧头 包号 包号反码 信息块 校验简写 STX PN XPN DATA CRC字节数 1 1 1 1024 21.1 帧头 帧头一个有两…

CentOS7.9部署Nginx

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成Nginx Web服务安装部署 步骤 1.配置 Nginx 源 2.yum 安装 Nginx 3.启动 Nginx 4.浏览默认站点 实施 1.配置 Nginx 源// 执行如下命令 rpm -ivh http://nginx.org/packages/centos/7/noarch/RPMS/nginx-release-centos-7-0.el…

CF132E Bits of merry old England

传送门构图好题。郑哥的题解 每一个输出的位置看作先分配变量(赋值或者用前面的),再输出。 给每个位置拆三个点 \(v_{i,1/2/3}\)。\(v_{i,1}\) 的流入表示这个位置的 "空变量" 数量(包括有值但是我们选择让它不重复使用的变量);\(v_{i,2}\) 有流入表示分配好了…

opp7~8题目集的反思与总结

opp7~8题目集的反思与总结 1、前言: 这两个题目集都是对于电路题目的迭代,都是对于电路题目的应用,对于电路的题目集,在上次的opp的题目集中就已经简述过了,没有看过的可以点击链接查看(opp第二次blog) 在这个里面就是之前的opp的题目集,讲述了大致的内容,这个是基础,…

CentOS7.9部署.NET Core 8.0

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成.NET Core 8.0软件的安装,确定Linux的版本是x64还是arm64的,然后到.NET Core的官网下载8.0的SDK,并进行安装 步骤 1.查看系统版本 2.打开.NET Core 8.0下载网址 3.下载与Linux系统对应版本的.NET Core SDK 4.上传.NET Cor…

使用世界变换的逆转置矩阵对法线进行变换

最近在做法向量变换的时候,踩了两个坑,记录一下相关的知识点法向量变换细节记录 最近在做法向量变换的时候,踩了两个坑,记录一下相关的知识点 法向量做变换,最后一位是补0 我们知道,顶点在做变换的时候最后一位是 1.0,法线最后一位是补0.0 vec3 normCurrent = (getMatri…

JS逆向——动态页面逆向

JS逆向——动态页面逆向 一. 步骤关键点分析 逆向分析信息提取逻辑 模拟执行二. 实现 1. 关键点分析 找到实现kml导出的按键,发现是通过JS函数实现的,需要针对该函数进行JS代码逆向分析,找到实现的函数逻辑。 ​​ 2. 逆向分析信息提取逻辑 定位找到exportKML函数 ​​ 对该…

开源一款基于 Typecho 开发的导航主题

主题介绍 BeaconNav是基于typecho开发的一款导航主题,Beacon是灯塔的意思,希望使用者在知识的海洋里能够如同有灯塔指引一样目标明确,永远不会迷失方向。 演示站点:https://nav.ilaozhu.com主题特点响应式设计,适配手机、平板、电脑等设备; 支持自定义 LOGO、背景图片; …

一款利用人工智能将自然语言查询转换为 SQL 代码的互译工具 - SQL Translator

前言 对于后端程序员来说,编写SQL代码是日常工作中不可或缺的一部分。然而,随着数据复杂性的增加,如何高效、准确地编写SQL查询成为了新的挑战。幸运的是,SQL Translator的出现为后端程序员提供了一个强大的工具,将自然语言查询转换为精确的SQL代码,极大地提高了工作效率…

LINUX查看文件总行数和指定行,wc命令的使用

LINUX查看文件总行数和指定行明训关注IP属地: 浙江 0.2972019.01.26 19:20:22字数 92阅读 9,764问题说明 在Linux服务器运维或操作过程中时常需要统计文件行数和查看指定行 相关命令 查看文件指定行描述命令查看文件的前5行 head -5 test.log查看文件的后2行 tail -2 test.log …

正义使者-隐藏关

最正义的一集\(\Huge{放假!!!}\)

Openvx Tiovx技术杂谈

Openvx & Tiovx技术杂谈 Openvx & Tiovx (六) Host & Target https://zhuanlan.zhihu.com/p/474701695 https://dev.ti.com/tirex/explore/node?node=ANd.gAKGXC97FboluTIMhw Openvx 保留了代码移植到多核平台的可能性。可能是因为多核平台的种类繁多,Openvx 在定…

7~8次题目集总结Blog

一、前言 关于7,8两次家具强电电路模拟程序,我认为是比较困难且综合的程序题,我们需要处理复杂的电路结构,如包含多个并联电路的串联电路,以及并联电路之间的包含关系还要精确地处理输入和输出格式,确保所有的计算和输出都符合题目要求,这些设计程序整体的方面都属于较为…

CentOS7.9部署.NET Core 6.0

简介 本章节主要讲的是在Linux系统CentOS7.9上去完成.NET Core 6.0软件的安装,确定Linux的版本是x64还是arm64的,然后到.NET Core的官网下载6.0的SDK,并进行安装 步骤 1.查看系统版本 2.打开.NET Core 6.0下载网址 3.下载与Linux系统对应版本的.NET Core SDK 4.上传.NET Cor…

全网最适合入门的面向对象编程教程:05 类和对象的Python实现-PyCharm代码标签(一个帮你提升coding效率的小技巧)

本文介绍了PyCharm IDE中代码标签的定义、类型和使用方法。摘要: 本文介绍了PyCharm IDE中代码标签的定义、类型和使用方法。 往期推荐: 学嵌入式的你,还不会面向对象??! 全网最适合入门的面向对象编程教程:00 面向对象设计方法导论 全网最适合入门的面向对象编程教程:…

使用Llama3/Qwen2等开源大模型,部署团队私有化Code Copilot和使用教程

代码辅助工具(Code Copilot)可以提高团队代码研发效率,能有效帮助产品快速上市抢占先发优势,但同时又需要保证代码和信息隐私,私有化Code Copilot是保护隐私的重要手段。老牛通过本文,详细介绍通过开源大模型,部署私有化Code Copilot和使用教程……目前市面上有不少基于…

MySQL共享表空间各个版本之间的演变图

感谢作者! 摘自:https://blog.csdn.net/qq_42267081/article/details/112383883