- 1、原创力文档(book118)网站文档一经付费(服务费),不意味着购买了该文档的版权,仅供个人/单位学习、研究之用,不得用于商业用途,未经授权,严禁复制、发行、汇编、翻译或者网络传播等,侵权必究。。
- 2、本站所有内容均由合作方或网友上传,本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供研究参考,付费前请自行鉴别。如您付费,意味着您自己接受本站规则且自行承担风险,本站不退款、不进行额外附加服务;查看《如何避免下载的几个坑》。如果您已付费下载过本站文档,您可以点击 这里二次下载。
- 3、如文档侵犯商业秘密、侵犯著作权、侵犯人身权等,请点击“版权申诉”(推荐),也可以打举报电话:400-050-0827(电话支持时间:9:00-18:30)。
- 4、该文档为VIP文档,如果想要下载,成为VIP会员后,下载免费。
- 5、成为VIP后,下载本文档将扣除1次下载权益。下载后,不支持退款、换文档。如有疑问请联系我们。
- 6、成为VIP后,您将拥有八大权益,权益包括:VIP文档下载权益、阅读免打扰、文档格式转换、高级专利检索、专属身份标志、高级客服、多端互通、版权登记。
- 7、VIP文档为合作方或网友上传,每下载1次, 网站将根据用户上传文档的质量评分、类型等,对文档贡献者给予高额补贴、流量扶持。如果你也想贡献VIP文档。上传文档
查看更多
10计算部分的数量
计算部分的数量
前提, 目标, 结果
前提:?学生需要掌握以下机能
树- 了解树的表示方法
Map容器- 了解如何日用标准库中的map容器以及迭代器
递归- 了解如何构造一个递归的解决方案去解决一个问题
目标:?这次作业的目的是加深学生对于树的理解并练习使用标准库中的容器。
结果:完成这次作业以后学生将掌握以下技能:
了解树的表示
使用标准库中的容器map
使用递归的方法周游树
背景
“整体大于局部的和”是Gestalt心理学的核心理论,对于人类这应该是一个正确的结论。计算机相对于人来说是非常缺乏想象力的。
描述
本次作业,你需要构造一个复杂的结构:一个由多个部分组成的医院。有很多需要人类去了解的东西我们想让计算机来帮我们完成。对于医院的描述在文件definitions.txt中。
Figure 1?Layout of a floor in the hospital
这个建筑物有10层。每一层有四个wing和一个central core,如上图所示。每个wing包含两个long corridors和一个connecting corridor。每个long corridor包含21个patient room,每个connecting corridor包含五个supply rooms。
医院是用标记树描述的,树的结点是Part类型的。每一个结点包含子节点,用来表示它的子部件。每一个边的权重是它的一种子部件的个数。例如,从医院到层的边上的权重为10表示一个医院有十层楼。你可以假设没有完全一样的边,也就是任意两个结点之间最多有一条边。
Figure 2?Tree representation of the hospital
Main.cpp文件首先加载definitions.txt。然后处理queries.txt文件,这个文件中包含两种类型的查询。whatis查询是需要描述它的子部件。而howmany查询则是询问一种当前对象中包含的某种子部件的个数。
我们提供了main.cpp文件和parts.h的的骨架部分。你需要做的是完成parts.h文件(如果需要,可以写parts.cpp文件)。你可以额外的再添加新的成员或者函数。
文件
下面是你完成本次作业所需要的文件:
handout-files.zip?包含的文件为:
main.cpp?– 用于测试程序的正确性
parts.h?– 头文件的骨架版本
definitions.txt?– 定义部件和子部件的关系的文件
queries.txt?– 包含一些查询验证程序的正确性。
任务
为了完成本次作业,你需要实现parts类中定义的函数,也可以适当增加一些函数或成员。
首先核对你所需要的文件。
解压handout-files.zip?,获得所需要的文件。
下面是你完成本次作业的基本步骤:
首先,在Part类里边一个名为subparts的成员,它的类型为标准库中的map容器。你的map容器的键和值分别为Part类型的指针和一个整数。例如,如果当前part是hospital,那么map容器中应该包含一个键为floor值为10的元素。
然后,实现Part类中的函数describe()。这个函数需要列出部件的名字以及所有的子部件和对应的数量。使用迭代器去处理子部件。下面是一个典型的输出信息:
Part long_corridor subparts are:
21 patient_room
?
Part floor subparts are:
4 wing
1 central_lobby
?
Part couch subparts are:
It has no subparts.
然后,实现Part类中的递归函数count_howmany(Part const *p),用于用于计算p的子部件的数量。例如,如果查询hospital中有多少个wing。我们看到一个hospital有10个floor。递归的,我们看到一个floor中有4个wing。然后,再去查看一个wing中是否还包含多个wing。最终我们得到的答案是40(10*4)。
接下来,实现类NameContainer中的lookup方法,这个方法的作用是根据一个string值获得对应的part类型的指针。如果要查询的对象不在map中,函数lookup需要自动地创建一个Part类型的对象。此函数的返回值为这个对象的指针。
最后,完成一个帮助函数add_part(string const x, int quantity, string const y),函数的作用是在名为x的部件中添加名为y的子部件,子部件的个数为quantity。这个函数被mai.cpp中的load_definitions函数调用。使用lookup来根据部件的
您可能关注的文档
最近下载
- 铝合金-不锈钢TIG熔钎焊混合焊丝填充接头组织与性能研究.pdf VIP
- 屋顶光伏电站验收.docx VIP
- MSA测量系统分析.pdf VIP
- 小学信息技术:第一单元 走进信息时代.pdf VIP
- 麻醉科诊疗常规与技术操作规范.pdf VIP
- 小学一年级体育工作计划.docx VIP
- 人美版五年级上册美术教案.pdf VIP
- 重症哮喘诊断与处理中国专家共识中华医学会呼吸病学分会哮喘学组、中国哮喘联盟(发布时间:2017-11).pdf VIP
- 武汉出版社五年级生命安全教育全册教案及计划.docx VIP
- 2025年教科版(2024)小学科学三年级上册(全册)教学设计(附目录P171).docx
文档评论(0)