首页 > 其他分享 >OOP课第二阶段总结

OOP课第二阶段总结

时间:2024-06-02 17:00:20浏览次数:11  
标签:总结 串联 题目 开关 电路 并联 OOP 第二阶段 设备

OOP课第二阶段总结

  • 前言

    • 作为第二次3+1的总结,明显感受到了此次题目集越来越复杂,结合了实际的物理知识来解决现实中的电路问题。因为电路可以一直扩展下去,情况千变万化,难以像上次题目集一样找到一个呆板的做法。这次题目集,让很多人连题目都无法理解,代码也是无从下手,因为这些人根本不知道如何去设计,如何去完成电路上的整个过程,也就是没有抓到本质。

    • 目前题目集只迭代了两次,从最开始的单一串联电路、单一设备,到现在的由多个串联电路组成的并联电路、多个设备,这两次迭代已经可以看出这次题目集的复杂性。再经历两次迭代后,将完整的模拟电路中可能出现的所有情况(多并联、多串联、短路、双向开关......),所以对我们前期的设计思路要求缜密且严谨。

    • 而且在第二次迭代中,题目采取了不提示测试点的手段,让很多学生举步维艰,测试了N个由自己或同学创造的样例后仍然找不到错误,最终停留在了88、91、94分。由于学生代码设计上的缺陷以及题目不提示测试点的手段,使得很多人痛不欲生,”明明别人的样例我都过了,可为什么他拿到了100而我只有94呢?“,在这样的自我怀疑中不断地寻找错误。运气好的同学也许再测试了一些样例后可以找到错误,可运气不好的同学可能等到题目结束的最后一刻都没有找到一丁点错误,可是事实就是他错了,但是错得看起来天衣无缝,无法叫人发现。

    • 并且我统计了前六次题目集得提交以及通过情况:

      由此不难看出,题目集的实际通过率(通过人数/考试人数)处于0.2~0.5这个区间,其中最难的一次为题目集三,实际通过率仅为0.178,但提交数量却是最多的,三百人提交了将近一万三千份答卷。学生在经历了这么多次练习后,通过率的总体趋势却是起起伏伏,当然这也和题目难度相关。题目集一和五都是作为两次大迭代的开端,故而各个数据都非常相似,由此我们也许可以预测一下,下一次题目集的通过率可能会达到第二次迭代最低。

  • 正文

    • 第四次题目集

      从上表可以看出,在经历了第三次题目集的大洗劫后,居然得到了很大的改善,不仅提交量减少了,而且提交通过率还提高了不少。也许是因为同学在第三次题目集下了很大的功夫还吃了亏,将代码的质量提高了不少。但这并不是今天的重点。

      UML类图:

    • 第五次题目集

      1. 题目:

        这次题目集便是第二次大迭代的开端,主要内容为计算单一串联电路上的设备状态

        题目主干:

        设计一个智能家居强电电路模拟系统:

        模拟的控制设备包括:开关、分档调速器、连续调速器。

        模拟的受控设备包括:灯、风扇。两种设备都有两根引脚,通过两根引脚电压的电压差驱动设备工作。

        并且提供了四次迭代的区别:

        迭代1:只有一条线路,所有元件串联
        迭代2:线路中包含一个并联电路
        迭代3:线路中包含多个串联起来的并联电路
        迭代4:并联电路之间可能出现包含关系

        这就很考验学生的总体设计能力,不能只顾眼前的题目集,还要考虑到为题目集的迭代做好准备。

      2. 设计思路:

        • 因为这次题目的设备并没有电阻,所以无法使用正常的根据电阻求分压的方法来计算设备状态,也因此,电路中只能出现一个设备,不然出现多个设备的话无法进行分压操作。这一点也就给了很多人设计一个特殊电路的可乘之机。但是我并不是如此

        • 首先,我们判断电路开端是否含有VCC信息,如果有,就设置电路初始电压为220V,反之为0V,GND判断同理。

        • 然后读取所有设备信息,包括控制器和被控制器。按照从电路开端到电路接地端的方向一步一步进行处理,并且令下一个设备的输出电压等于上一个设备的输出电压。这样就能得到所有设备的输入电压和输出电压。

        • 其次,获取了输入电压和输出电压后,就能用前者与后者的差计算出该设备的电压,再根据该设备的状态计算方式计算出它的转速或者亮度等状态信息。

        • 最后,对设备信息进行排序输出。到此,这道题目我们就解决了。

        UML类图

      3. 遇到的困难:

        按照刚才提供的设计思路可以解决大多数单一串联电路的情况,但是唯独有一种情况不能解决。

        开关在受控设备后

        因为,开关在受控设备后的时候会出现,受控设备已经获取到了输入和输出电压,但是开关却是断连的情况。但是受控设备的电压差已经计算出来了,也就是状态也被确定了。所以我们需要一些特殊处理。

        遍历所有开关

        确保所有开关都闭合再输出,如果有一个开关不闭合那就将受控设备的输入电压设定为0V,再进行输出。这样就能解决刚才的问题。

    • 第六次题目集

      1. 题目:

        此次题目集,加入了并联电路,并联电路可以由多个串联电路组成。每一条串联电路上可以有多个设备,并且新增了一个设备(落地扇),还为每个设备都赋予了电阻这个属性。使得整个电路系统更加符合现实中的情景。正是因为加入了电阻,才让整条电路具有了嵌入多个设备的条件,因为这样我们才可以正常的去计算每个设备的分压。

      2. 设计思路:

        我将这道题的解法分为八个部分:

        • 第一步:读入所有信息

        • 第二步:找到并联电路含有的所有串联电路,并处理串联电路:

          假设该并联电路包含an条串联电路,那就从第a1条串联电路开始遍历这n条串联电路,如果该串联电路是连通的(所有开关都闭合),那就将该串联电路的连通度标记为1,否则标记为0,并遍历该串联电路上的所有设备,将有电阻的设备的阻值相加,得到总电阻。

        • 第三步:将该并联电路转换为等效的串联电路,由于第二步已经获取了n条串联电路的总电阻,将所有连通度为1的串联电路的电阻倒数相加再取倒数,便能得到该并联电路的等效电阻。

        • 第四步:遍历该总电路上的所有设备(包括并联电路),将所有设备的电阻值相加,得到总电路电阻。

        • 第五步:再遍历该总电路上的所有设备(包括并联电路),将所有设备的电阻值与总电路电阻求比,并与总电路电压相乘,得到每个设备的分压。

        • 第六步:再一次找到并联电路含有的所有串联电路,并处理串联电路中的所有设备:

          由于第二步我们已经得到了n条串联电路的总电阻,所以此时遍历所有设备求其电阻与总电阻之比,并与第五步得到的并联电路分压相乘,得到并联电路上的串联电路的各个设备的分压。

        • 第七步:根据得到的每个设备的分压计算其对应的状态(转速、亮度)。

        • 第八步:对每个设备进行排序,并输出。

        在上面的步骤中,体现出要想获取分压,得先获得各条串联电路的总电阻。也就是设备分压和总电阻不可能在一次循环中就能被获取。所以每一条电路我们都需要走上两遍,并且存在在样的规律:

        遍历次数=总电路数×2+并联电路数×2

        UML类图:

      3. 遇到的困难:

        困难居然出在排序上,好吧,我确实不清楚如何让它们按照开关、分档调速器、连续调速器、白炽灯、日光灯、吊扇、落地扇的顺序依次输出。但是我可以换个方法,我先让所有设备按照序号排序。

        controlledDevices.sort(Comparator.comparingInt(ControlledDevice::getNumber));
        devices.sort(Comparator.comparingInt(Device::getNumber));
        

        让它们的顺序变得有序,但是名称是无序的,这样就够了。

        比如,设备信息原始的顺序是:

        D2,A1,D4,D3,D1,A4,B3,A2,B1,B4,B2,A3

        那么排序后的顺序应该是这样的:

        (A1|D1|B1),(A2|D2|B2),(A3|D3|B3),(A4|D4|B4)

        其中“|”表示前后顺序随机

        这个时候,只需要一点暴力的手段。写上几个循环,每一次都完整的把设备都遍历一遍,并且判断设备总类是否是需要输出的,如果是就输出,如果不是,就不输出。这样调整不同设备的循环的位置,就可以实现对名称排序了。挺笨的了

        标签:总结,串联,题目,开关,电路,并联,OOP,第二阶段,设备
        From: https://www.cnblogs.com/vhengeee/p/18227308

相关文章

  • 6.2 休息日 背包问题总结
    就目前所遇到的01背包与完全背包作总结。01背包有n件物品和一个最多能背重量为w的背包。第i件物品的重量是weight[i],得到的价值是value[i]。每件物品只能用一次,求解将哪些物品装入背包里物品价值总和最大。二维dp数组01背包动规五部曲1.确定dp数组以及下标的含义dp[i......
  • 【scikit-learn009】异常检测系列:单类支持向量机(OC-SVM)实战总结(看这篇就够了,已更新)
    1.一直以来想写下机器学习训练AI算法的系列文章,作为较火的机器学习框架,也是日常项目开发中常用的一款工具,最近刚好挤时间梳理、总结下这块儿的知识体系。2.熟悉、梳理、总结下scikit-learn框架OCSVM模型相关知识体系。3.欢迎批评指正,欢迎互三,跪谢一键三连!4.欢迎批评指正......
  • 四川汇烁面试总结
    自我介绍+项目介绍、目录1.jdk和jre的区别?2.一段代码的执行流程?3.接口与抽象类的区别?4.ArrayList与LinkList的区别?5.对HashMap的理解?6.常见的异常?7.throw和throws有什么区别?8.trycatchfinally每个里面都有return执行流程?9.线程池五个线程,交替打印0---100?10.......
  • ListView超强总结
        ListView由于手机屏幕空间都比较有限,能够一次性在屏幕上显示的内容并不多,当我们的程序中有少量的数据需要展示的时候,就可以借助ListView来实现。ListView允许用户通过手指上下滑动的方式将屏幕外的数据滚动到屏幕内,同时屏幕上原有的数据则会滚动出屏幕。相信你......
  • Hadoop安装及集群环境配置
    环境准备1.VMware虚拟机(Linux操作系统)2.Windows10~113.JDK4.Hadoop5.Xshell7(用于连接虚拟机与Windows)6.Xftp7(用于虚拟机与Windows之间传输文件)家庭/学校免费-NetSarangWebsitehttps://www.xshell.com/zh/free-for-home-school/一、虚拟机下Hadoop环境搭建 1、创......
  • File类总结
    FIle对象既可以代表文件,也可以代表文件夹File封装的对象仅仅是一个路径名,这个路径可以是存在的,也可以不存在如何创建一个File对象publicstaticvoidmain(String[]args){//路径分隔符//Filef1=newFile("C:\\Users\\long\\Desktop\\111.jpg");//......
  • MySQL常用语句总结
    本篇MySQL语句笔记录笔记所引用案例为B站未明学院SQL课程教学案例,个人觉得这个UP主的视频讲解特别仔细,感兴趣小伙伴可以去听听~一、数据库操作(MySQL运行界面)按Pageup和Pagedown可以将之前出现过的命令正序或者倒序展示,避免重复输入命令。--展示所有的数据库SHOWDATABASE......
  • 【LInux内核中IO多路复用 背景+原理+直白总结+优缺点】EPoll篇 及大总结
    Linux内核中的epoll多路复用原理是基于事件驱动的一种高效I/O处理机制,它主要用于监视多个文件描述符(filedescriptors,简称fd)的状态并进行事件驱动的I/O操作。epoll相比传统的select和poll机制,在处理大量并发连接时具有更高的效率和更低的资源消耗。以下是epoll多路复用原理......
  • 学习前端的知识总结10
    CSS浮动网页布局方式有以下五种:标准流(普通流、文档流)︰网页按照元素的书写顺序依次排列浮动定位Flexbox和Grid(自适应布局)标准流是由块级元素和行内元素按照默认规定的方式来排列,块级就是占一行,行内元素一行放好多个元素。1.浮动浮动最典型的应用:可以让多个块级元素一行......
  • 学习前端的知识总结11
    1.浮动和标准流的父盒子搭配:先用标准流的父元素排列上下位置,之后内部子元素采取浮动排列左右位置2.一个元素浮动了,理论其余的兄弟元素也要浮动:一个盒子里面有多个子盒子,如果其中一个盒子浮动了,那么其他兄弟也应该浮动,以防止引起问题。浮动的盒子只会影响浮动盒子后面的......