第三次博客作业

news/2024/7/1 16:46:50/文章来源:https://www.cnblogs.com/pppggg/p/18270174

前言

这次作业是在后面新的大作业上进行了两次迭代。

1.第七次大作业

这次大作业是模拟家居电路。设备总共分为两个大类:控制设备和受控设备。控制设备有开关,分档调速器,连续调速器,还有这次迭代增加的互斥开关。这些控制设备除了为了保护电路的互斥开关有电阻外,其余均无电阻。受控设备包括白炽灯,日光灯,吊扇,落地扇,和这次迭代新增的受控窗帘,它的开关大小与亮度有关,所以需要新写一个方法进行计算。这次的电路要求也进行了迭代,这次迭代考虑到了多个并联电路串联在一起的情况,而且一个串联电路中包含其他串联电路的情况。这次新的迭代主要是在电路的连接上面有了变化,也新增了一个受控设备和控制设备。这次的的过程需要更加严谨,需要思路更加清楚,需要进行有效的梳理再进行编译,否则容易混乱,所以这次大作业对我来说难度比较大。

2.第八次大作业

此次大作业在上一次的基础上改变了很多,增加了很多考验思维逻辑的内容。增加管脚电压的显示在输出每个电器的状态信息后,再依次输出该电器每个管脚的电压。这点非常考验思维能力,也考验细心程度。稍不注意就会产生计算错误。电流限制,电器在工作时,过大的电流会引起电器过热,从而烧坏电路。本次迭代,每个元器件都有最大电流的设置,当实时电流超过最大电流时,在该电器输出信息的最后加入提示“exceeding current limit error”,与前面的信息之间用英文空格分隔。最大限定电流:开关20、分档调速器18、连续调速器18、白炽灯9、日光灯5、吊扇12、落地扇14、互斥开关20、受控窗帘12、二极管8。短路检测。如果电路出现无穷大的电流造成短路,所有元器件信息不输出,仅输出提示“short circuit error”。并联电路中包含并联。本次迭代考虑并联电路中包含并联电路的情况,即构成并联电路的串联电路可以包含别的并联电路。二极管。增加二极管元件,其电路特性为:正向导通,反向截止;其电器符号如图4所示,当电流从左至右流过时,二极管导通”conduction”,电阻为0;电流从右至左流动时,二极管截止”cutoff”,电阻无穷大,相当于开关打开。这次的电路更加复杂,对我来说是一个很大的挑战,所以我花了大量的时间去想样例以及如何编写。

设计与分析

以下是我对每个大作业代码的代码分析。

1.第七次大作业


这次主要增加的分为两个方面,一个是设备方面的,一个是电路方面的。
设备方面主要是增加了两个设备:互斥开关和受控窗帘。互斥开关因为可以在并联电路中也可以在串联电路中,一个并联电路中也可以有多个互斥开关,互斥开关每一个引脚的电阻不同,因为太复杂所以我想到可以将互斥开关的两个引脚当作两个新的开关并设置这两个开关的电阻,比如在输入时输入了H3-2,我便将这个名字作为开关名称以便区别于K,并且根据“-”后面的数字来设置这两个开关的电阻,再将这两个开关存进互斥开关的对象中,这样在后面对互斥开关的改变时可以直接找到相应的互斥开关再将互斥开关中的两个开关的状态进行改变。这样写的好处是可以不用更改以前代码中判断电路状态和总电阻的方法,但是要注意区别不同互斥开关所对应两个小开关的名字,以便后面进行调用。受控窗帘就比较好写,他的初始开度是全开,然后根据亮度逐渐升高来减小窗帘的开度。由于规定了亮度不受到外界的干扰,至于电路中的两种灯发出来的亮光有关,所以在设置窗帘开度时只需要遍历所有灯的亮度进行累加,再将累加的数据进行输入窗帘的改变开度的方法中。但是需要注意在输出时使用百分比进行输出,所以不能直接输出开度,需要判断开度大小换算成百分比再进行输出。
电路方面主要也是进行了两个变化:一个是并联电路的改变和串联电路中可以包含一个电路。由于考虑到下一次的迭代,所以在这次大作业我就将并联电路进行了改进,可以实现并联包含并联,即将M当作一个子类继承设备类让他与其他设备一样进行遍历,电阻和状态都是根据父类进行重写,再将它分的的电压输入M中,也是在改变它的特性的同样名称的方法中开始遍历M中的Line,判断他们的状态,如果是通的则再遍历这条Line中的所有设备,再进行分压、进行运算。这样写的话就不用考虑是否有M,再将M进行单独运算,可以直接一层层的递归,直到运算完电路中的所有电器。串联电路包含电路其实比较好改,也是将Line这个类继承设备类,再将方法进行重写,将他的改变特性的方法和得到状态的方法。这样分到电压后进入改变特性的方法里遍历Line对象的所有电器进行分压,最后在输出所有设备时将所有电器进行排列计算进行输出。

2.第八次大作业


此题设计同上一次的设计基本类似,只是在上一次的基础上在每个类中增加了一个变量p,用于记录设备的引脚便于后续判断两端电压,增加了一个二极管“P”类,“P”类中放了一个ArrayList ls用于存放p所在的那条路。虽然此次设计与上次类似,但我仍在上次的设计上进行了一些修改:
在每个类中增加变量p用于存放第一个出现的引脚(不相同的是互斥开关),并且在Zong类中增加“v1”“v2”“v3”(只有H需要用到v3),来记录两端电压
互斥开关:虽然仍是用p表示第一次出现的引脚但是若第一次出现的引脚不是“1”号,那就用H类中的开关的p记录第一次出现的引脚。
在Zong类中增加了一个checkI(double V)和check变量用于判断设备的电流是否超过最大电流,但是P和K类重写了checkI()方法,因为他们的电阻是0,需要用整条路的电流来判断
由于在上次编写代码的过程中就已经考虑到这次的迭代,所以“并联中包含并联”的情况在上一次的迭代中就已经判断。
可以按如下进行修改首先同上一次一样创建链表并读取,只是在读取信息并对信息进行拆分的时候进行了一定的修改:不仅要读取name还要读取他的引脚并且将第一次出现的引脚存放到p变量中去。与上次出现明显差异的地方是:(1)新用了一个变量vn来对两端的电压进行计算,首先让vn=v,找到主路后计算主路中设备的电压并让vn逐次递减。(2)新增一个判断,若主路的state=1并且getR=0,此时输出“short circuit error”并结束整个程序。(3)在对M进行计算时每次循环的开始都让vn=m.v1然后一次进行计算。(4)输出时先调设备的p变量若p=1则比较v1与v2的大小,先输出较大者再输出较小者反之也相同。(4)两端电压后还需判断设备的check变量是否为0,为0则输出“exceeding current limit error”表示通过他的电流超过最大限定电流

踩坑心得

1.第七次大作业

因为将H分为了两个开关而没有将H存进这条电路的电器链表中,而改变H状态的方法仅仅是改变了H状态这个属性,而没有改变电路的状态就没有进行修改两个开关的状态。所以在后面改变H的状态的时候结果有误,需要按如下修改H的change函数就可以了
未写好所有设备状态的函数,以为没达到电压就将它的状态设为关闭,导致后面判断电路状态时有误
需要像如下修改所有的change函数
未看清题目要求,需要将窗帘的开度全部化为百分比,需要修改输出为如下

2.第八次大作业

计算二极管的最大电流事判断错误,将“8”写成“18”导致最终判断结果错误,需改为如下代码
在并联电路且有通有不通的时候应该将不同的电路从不通的那个电器往后都和并联末尾的电压相同,前面的与前面的相同,需要将代码改为如下

改进意见

1.编写清晰和详尽的文档、注释和README文件,说明代码的用途、实现细节、关键设计决策等。良好的文档能够帮助他人理解和使用你的代码。
2.在编写代码之前需要画好类图,否则写代码时就会出现调用关系不清晰等问题。
3.在编写代码之前先考虑测试用例,并遵循测试驱动开发的方法。编写高质量的单元测试可以帮助验证代码的正确性,减少潜在的bug,并提升代码的可靠性和可维护性。
4.学习和应用编程最佳实践,如单一职责原则、开闭原则、依赖倒置原则等,以及常见的设计模式,能够帮助你写出更具扩展性、可维护性和可重用性的代码。
5.在测试用例的时候发现bug就要及时修改,不能只顾着测试点的修改,要尽力将整个代码的bug全部修改出来
通过遵循这些建议,你可以编写出更高质量、可维护和可扩展的代码,提升自己作为开发者的技能水平和职业发展

总结

收获

1.在第七次迭代时考虑到了第八次会并联包含并联所以在这次迭代中就进行了修改,所以在第八次迭代时就省去了时间去考虑这种情况。
2.学会了不要将一个设备就最为一个设备进行判断,可以根据这个设备的特性与别的设备进行融合,比如在互斥开关的设置时可以将其与开关进行关联再在其基础上增加电阻再存进相应的类型中。
3.随着代码越来越长需要考虑的东西越来越多,所以现在养成了先理清思路再进行编译的好习惯,所以在后面编译有着清晰的思路。
4.由于大部分没有给出样例的提示,所以考验我们自己思考的能力,让我们自己思索应该注意些什么,也有利于我们理清我们的思路。

不足

1.由于物理知识已经很久没有用过了,所以在编译时会出现很多问题,比如这次的并联电路中有路是通的,有路是断的,就需要找断的那个点,断开前的需要与并联电路前端电压相同,断开后的需要与并联电路后端相同。
2.未考虑到开关等设备无电阻,所以在判断是否超过限制电流时想直接使用它的电压除以它的电阻,这样就会导致输出错误,所以需要考虑更多不同的情况。

课程改进意见

对于教师、课程、作业、实验、课上及课下组织方式等方面,我认为可以提出以下改进建议:
1.教师可以及时更新教学内容,跟上行业最新的发展和趋势,让学生学到最新的知识和技能。
2.作业应该设计合理,能够巩固学生所学的知识和技能,同时不要过于繁重,以免影响学生的学习效果。
3.实验室的硬件设施和软件环境应该得到改善和完善,保证学生能够顺利进行实验和项目开发。
4.在课堂上可以增加更多的互动环节,让学生参与到课堂讨论和问题解决中,提高学生的学习积极性。
5.学校可以提供更多的课下学习资源,比如在线课程、教学视频等,帮助学生更好地学习和掌握知识。

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

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

相关文章

2024年图灵出品的150页《大模型应用开发极简入门:基于GPT-4和ChatGPT》高清PDF下载,小白必备实战指南

本书为大模型应用开发极简入门手册,为初学者提供了一份清晰、全面的“可用知识”,带领大家快速了解GPT-4和ChatGPT的工作原理及优势,并在此基础上使用流行的Python编程语言构建大模型应用。通过本书,你不仅可以学会如何构建文本生成、问答和内容摘要等初阶大模型应用,还能…

MoveIt 三大核心功能

1. 运动学求解,如KDL,Trac-IK, IK-Fast 2. 路径规划:OMPL, CHOMP,SBPL 3. 碰撞检测:FCL, PCD...

LLM大模型: 基于langchain+AutoGPT+向量数据库的Agent实现

钢铁侠都看过吧,男猪脚 tony 只需要语音说话给出指令,AI助手会完成所有的指令,期间完全不需要人干预了,全程自动化,看着是不是很科幻?很过瘾?现阶段,市面上所有的大模型核心功能还是问答,能准确回答用户的提问已经很不错了,那么问题来了:怎么根据用户的指令去干具体…

Deepspeed ZeRO系列算法原理+通信开销详解

原文: https://sumanthrh.com/post/distributed-and-efficient-finetuning/#zero-powered-data-parallelism

win或Liunx查询端口占用语句

查询端口占用语句win在cmd命令行输入命令:netstat -ano | findstr <端口号>Linux输入命令语句:使用netstat netsta -tulpn | grep <端口号>使用lsof lsof -i :<端口号>

点云分割网络---Point Transformer V1

PDF: 《Point Transformer》 CODE: https://github.heygears.com/POSTECH-CVLab/point-transformer 一、大体内容 Point Transformer基于自注意力网络实现网络模型的构建。通过设计针对点云的自注意力层,结合位置编码构建Transformer block,利用自注意力机制,实现包括语义分…

selenium使用记录(一)

一 前言 环境: window 10 python3.10 selenium 4.21 随便记录一些容易犯错或理解错误或比较有意思的一些点 二 内容 1 关于驱动webdiver的下载使用 以前通常是,根据浏览器的版本下载好合适的浏览器驱动到本地电脑,然后使用的时候配置好驱动路径 如下: chromedriver_path…

Google X开源抓取机械臂,无需人工标注就能一眼找到目标零件

机械臂常见,但你见过这么聪明的吗? 从工作台上一眼找到合适的螺母、稳稳拿住。 再送到目标螺杆上,整个动作一气呵成: 即使是相似度极高的两个部件,也能准确区分并“揪”出正确的那个: 要知道,平时我们自己做实验、或是拼装没见过的机械零件时,面对各个相似的零件都可…

生物力学考前补天 (╥_╥)

简答题 能量货币 (1) 细胞中的“能量货币”有哪几种主要形式?最常见的“能量货币”是什么?磷酸根所携带的能量(类似的有鸟苷三磷酸GTP等)。 NADH(或其类似物NADPH):可转移的高能电子形式携带的还原电位(“氧化自己,还原别人”;转移两个电子来还原被氧化的有机化合物;失去…

cython 笔记

数据类型# bool 类型 // bool_type_ptactice.pyx cdef bint a = 123 # 非0 为 真 , 0 为假 cdef bint b = -123 cdef bint c = 0 py_a = a # cdef 定义的内容没法直接在python中直接引用 py_b = b py_c = c// main.py import pyximport pyximport.install(language_level=3…

扫描版PDF目录制作指南

目前网上找到的扫描版的电子书往往没有目录,这使得阅读变得非常困难。本文总结我的经验,介绍快速制作扫描版 PDF 目录的方法,以便更轻松地阅读扫描版电子书。 本文首先介绍手动制作目录的方法,之后介绍如何利用 AI 帮助制作目录,接下来介绍了没有目录页的扫描版 PDF 的解决…

Ros - moveit - 三位模型导出URDF

1. 以UR3机器人为例, 先设计solidwork模型, 下载并安装sw_urdf_expoter 插件: 2. 下载机器人模型文件,加载进solidworks:插入基准轴: 一共6个旋转轴: 设置好旋转轴后,接下来,导出URDF文件: 配置URDF:将link加进来: 点击“Preview and Export”进行自动计算旋转轴…

为什么useEffect的第一个参数不能用异步函数

最近面试遇到了这个问题两次了,面试官: useEffect第一个参数可不可以用异步函数? 我们先来看看用了异步函数会报什么错报这个错的原因是因为async 会返回一个promise函数,而clean()函数不能是异步的 。 先来看看clean()函数的执行时机: 首次渲染不会进行清理,会在下一次渲…

离散数学重点整理

集合论 \(x \in A\): \(x\) 是 \(A\) 的一个元素 \(x \notin A\) (\(x\) 不属于 \(A\)): \(x\) 不是 \(A\) 的一个元素 \[A \subseteq B \Leftrightarrow \forall x(x \in A \rightarrow x \in B) \]\[A \subset B \Leftrightarrow A \subseteq B \wedge A \neq B \]\[…

EXQX-5.0.26 登录控制台

前言全局说明EXQX-5.0.26 登录控制台。一、说明 因 win 和 lin 控制台使用没有太大差异,故放一篇二、访问 2.1 本机访问 http://localhost:18083 或 http://127.0.0.1:18083 2.2 局域网访问 在网卡上查看你局域网IP http://局域网IP:18083/ 登录页:2.3 登录 默认,用户名:ad…

电工电子学复习总结

电路和电路元件 晶体管晶体管简化的小信号模型\[r_{\mathrm{be}}=r_{\mathrm{b}}+(\beta+1) \frac{26}{\{I_{\mathrm{E}}\}_{\mathrm{mA}}} \]其中,\(r_{\mathrm{b}}\)为基区电阻。当\(I_{E} < 5 \text{mA}\),\(r_{\mathrm{b}}=200 \Omega\)。 电路分析基础 电路定律 基尔…

EXQX-5.0.26服务Linux上安装使用

前言全局说明一、说明二、 2.1 文件名:2.2 文件名:三、 3.1 文件名:3.2 文件名:四、 4.1 文件名:4.2 文件名:免责声明:本号所涉及内容仅供安全研究与教学使用,如出现其他风险,后果自负。图片尺寸红色文字:红色文字 浅红色文字:浅红色文字 深红色文字:深红色文字 浅…

一文了解自定义表单系统开源的多个优势

如果想了解自定义表单系统开源的优势特点,可以从本篇文章的介绍中得到想要的答案。降本、提质、增效,是当前很多企业都想实现的目的。什么样的软件可以助力企业创造价值?低代码技术平台是近些年得到了很多客户喜爱的平台产品,因为它能帮助大家减少编程代码的撰写,能轻松助…

软件测试策略

互联网产品的测试策略: 重量级API测试,轻量级GUI测试,轻量级单元测试 以中间层的 API 测试为中点做全面测试 轻量级的 GUI 测试:只覆盖最核心直接影响主营业务的 E2E 场景,利用探索式测试思维,以人工测试的方式发现尽可能多的潜在问题 单元测试:只对那些相对稳定且核心的…