课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:1 银行业务模拟
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
客户业务分为两种。第一种是申请从银行得到一笔资金,即取款或借款。第二种是向银行投入一笔资金,即存款或还款。银行有两个服务窗口,相应地有两个队列。客户到达银行后先排第一个队。处理每个客户业务时,如果属于第一种,且申请额超出银行现存资金总额而得不到满足,则立刻排入第二个队等候,直至满足时才离开银行;否则业务处理完后立刻离开银行。每接待完一个第二种业务的客户,则顺序检查和处理(如果可能)第二个队列中的客户,对能满足的申请者予以满足,不能满足者重新排到第二个队列的队尾。注意,在此检查过程中,一旦银行资金总额少于或等于刚才第一个队列中最后一个客户(第二种业务)被接待之前的数额,或者本次已将第二个队列检查或处理了一遍,就停止检查(因为此时已不可能还有能满足者)转而继续接待第一个队列的客户。任何时刻都只开一个窗口。假设检查不需要时间。营业时间结束时所有客户立即离开银行。
二、基本要求
写一个上述银行业务的事件驱动模拟系统,通过模拟方法求出客户在银行内逗留的平均时间。 利用动态存储结构实现模拟。
三、实现提示
事件有两类:到达银行和离开银行。初始资金总额为total。开始营业后的第一个事件是客户到达,营业时间从0到closetime。所有事件可放在一个事件表中,客户的交易时间、要办理的款额可以由系统事先设置好放在时间表中,用负值和正值分别表示第一类和第二类业务。两个队列和一个事件表均要用动态存储结构。注意:事件表是按时间顺序有序。时间可用C语言的时间函数。
四、测试数据
一天营业开始时银行拥有的款额为10000(元),营业时间为600(分钟)。其它参量自定。
五、选做内容
事件表可不用系统事先放到时间表中,到达事件发生时随机地设置此客户的交易时间和距下一到达事件之间的时间间隔。每个客户要办理的款额也是随机确定,用负值和正值分别表示第一类和第二类业务。变量total、closetime以及上述两个随机量的上下界均交互地从终端读入,作为模拟参数。 两个队列和一个事件表均要用动态存储结构。注意:事件表是按时间顺序有序。时间可用C语言的时间函数。
源码联系UP主 -> https://space.bilibili.com/329101171
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:2 哈希表设计
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
针对你所在的班级中的“人名”设计一个哈希表,使得平均查找长度不超过2,完成相应的建表和查表程序。
二、基本要求
人名为中国人姓名的汉语拼音形式。待填入哈希表的人名为你所在班级同学的名字,取平均查找长度的上限为2。哈希函数用除留余数法构造,用开放定址法处理冲突。
三、实现提示
如果随机函数自行构造,则应首先调整好随机函数,使其分布均匀。人名的长度均不超过19个字符(最长的人名如:庄双双(Zhuang shuangshuang)。可对过长的人名先作折叠处理。
四、测试数据
所在班级的同学的姓名。
五、选做内容
(1)查阅资料学习哈希函数构造方法并从中选出适用者并设计几个不同的哈希函数,比较它们的地址冲突率(可以用更大的名字集合作试验)。
(2)研究人名的特点,努力找一个哈希函数,使得对于不同的拼音名一定不发生地址冲突。
(3)在哈希函数确定的前提下尝试各种不同处理冲突的方法,考察平均查找长度的变化和造好的哈希表中关键字的聚簇性。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:3 银行家算法
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
编写和调试一个系统动态分配资源的简单模拟程序,了解死锁产生的条件和原因,并采用银行家算法有效地防止死锁的发生。
二、基本要求
设计有n个进程共享m个系统资源的系统,进程可动态的申请和释放资源,系统按各进程的申请动态的分配资源。系统能显示各个进程申请和释放资源,以及系统动态分配资源的过程。
三、实现提示
银行家算法的思路:
(1)进程一开始向系统提出最大需求量.
(2)进程每次提出新的需求(分期贷款)都统计是否超出它事先提出的最大需求量.
(3)若正常,则判断该进程所需剩余量(包括本次申请)是否超出系统所掌握的剩余资源量,若不超出,则分配,否则等待.
(4)银行家算法的数据结构.
1)系统剩余资源量V[n],其中V[i]表示第i类资源剩余量.
2)已分配资源量A[m][n],其中A[j][i]表示系统j程已得到的第i资源的数量.
3)剩余需求量.C[m][n],其中C[j][i]对第i资源尚需的数目.
(5)银行家算法流程:当某时刻,某进程时,提出新的资源申请,系统作以下操作:
1)判定E[n]是否大于C[j][n],若大于,表示出错.
2)判定E[n]是否大于系统剩余量V[n],若大于,则该进程等待.
3)若以上两步没有问题,尝试分配,即各变量作调整.
4)按照安全性推测算法判断分配过后系统是否安全,若安全,则实际分配;否则,撤消分配,让进程等待.
(6)"安全性检测"算法
对进程逐个扫描,先判断flag,看进程是否完成,如果完成则继续扫描,如果没有再判断当前系统是否满足进程所需要的分配额,如果满足则分配并当进程完成后回收资源,如果没有则扫描下一个进程。扫描所有进程,如果所有的进程都能完成就表明是安全分配序列,如果没有,则分配不成功,不存在着安全序列。
四、测试数据
根据任务要求设计出能全面测试各功能的测试用例。
五、选做内容
便于用户观察和分析,要求使用图形用户界面。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:4 程序分析
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
读入一个C程序,统计程序中代码、注释和空行的行数以及函数的个数和平均行数,并利用统计信息分析评价该程序的风格。为方便,作以下约定:第一个字符是’{'的行称为注释行(该行不含语句)。除了空行和注释行外,其余均为代码行,每个函数都是全局的,没有嵌套函数。
二、基本要求
把 c程序文件作为TEXT文件读人源程序; 边读入程序,边识别统计代码行、注释行和空行,还要识别过程和函数的开始和结束,以便统计其个数和平均行数。
评价分为代码、注释和空行3方面。分为A、B、C和D四个等级,等级的划分标准是:
A级 B级 C级 D级
代码(过程平均长度) 10~15行 8~9行或16~20行 5~7行或21~24行 <5或>24行
注释(占总行数比率) 10~25% 10~14%或26~30% 5~9%或31~35% <5%或>35%
空行(占总行数比率) 15~25% 10~14%或26~30% 5~9%或31~35% <5%或>35%
三、实现提示
以下是对程序文件ProgAnal.C分析的输出结果示例:
The results of analysing program file“ProgAnal。C”:
Lines of code:180 Iines of comments:63 Blanklines:52 Code Comments Space 61% 21% 18%
The program includes 9 procedures and 4 functions.
The average length of a section of code is 12.9 lines.
Grade A。EXCellent routine Size Style.Grade A:Excellent commenting style.
Grade A:Excellent white space style.
四、测试数据
对较小的程序分析。当你的程序能正确运行时,对你的程序本身进行分析。
五、选做内容
可对程序进行初步语法分析,判断是否有语法错误
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:5 哈夫曼码的编/译码系统
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
利用哈夫曼编码进行信息通信可以大大提高信道利用率,缩短信息传输时间,降低传输成本。试写一个哈夫曼码的编/译码系统。
二、基本要求及实现提示
一个完整的系统应具有以下功能:
(1)I:初始化(Initialization)。从终端读入字符集大小n,以及n个字符和n个权值,建立哈夫曼树,并将它存于文件hfmTree中。
(2)E:编码(Encoding)。利用已建好的哈夫曼树(如不在内存坝u从文件hfmTree中读人),对文件ToBeTran中的正文进行编码,然后将结果存入文件CodeFile中。
(3)D:译码(Decoding)。利用已建好的哈夫曼树将文件CodeFile中的代码进行译码,结果存入文件TextFile中。
(4)P:打印代码文件(Print)。将文件CodeFile以紧凑格式显示在终端上,每行50个代码。同时将此字符形式的编码文件写入文件CodePrin中。
(5)T:打印哈夫曼树(TreePrinting)。将已在内存中的哈夫曼树以直观的方式(树或凹人表形式)显示在终端上,同时将此字符形式的哈夫曼树写入文件TreePrint中。
三、测试数据
用下表给出的字符集和频度的实际统计数据建立哈夫曼树,并实现以下报文的编码和译码:“THIS PROGRAM IS MY FAVORITE”。
字符 A B C D E F G H I J K L M
频度 186 64 13 22 32 103 21 15 47 1 5 32 20 20
字符 N O P Q R S T U V W X Y Z
频度 57 63 15 1 48 51 80 23 8 18 1 16 1
四、选做内容
完成图形化界面设计,使结果表达的更加清晰形象。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:6 航空客运订票
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
航空客运订票的业务活动包括:查询航线、客票预订和办理退票等。试设计一个航空客运订票系统,以使上述业务可以借助计算机来完成。
二、基本要求
(1)每条航线所涉及的信息有:终点站名、航班号、飞机号、飞行周日(星期几)、乘员定额、余票量、已订票的客户名单(包括姓名、订票量、舱位等级1,2或3)以及等候替补的客户名单(包括姓名、所需票量)。
(2)系统能实现的操作和功能如下: ①查询航线:根据旅客提出的终点站名输出下列信息:航班号、飞机号、星期几飞行,最近一天航班的日期和余票额; ②承办订票业务:根据客户提出的要求(航班号、订票数额)查询该航班票额情况,若尚有余票,则办理订票手续,输出座位号;若已满员或余票额少于订票额,则需重新询问客户要求。若需要,可登记排队候补; ③承办退票业务:根据客户提供的情况(日期、航班),为客户办理退票手续,然后查询该航班是否有人排队候补,首先询问排在第一的客户,若所退票额能满足他的要求,则为他办理订票手续,否则依次询问其它排队候补客户。
三、实现提示
两个客户名单可分别由线性表和队列实现。为查找方便,已订票客户的线性表应按客户姓名有序,并且,为插入和删除方便,应以链表作存储结构。由于预约人数无法预计,队列也应以链表作存储结构。整个系统需汇总各条航线的情况登录在一张线性表上,由于航线基本不变,可采用顺序存储结构,并按航班有序或按终点站名有序。每条航线是这张表上的一个记录,包含上述8个域、其中乘员名单域为指向乘员名单链表的头指针,等候替补的客户名单域为分别指向队头和队尾的指针。
四、测试数据
根据任务要求设计出能全面测试各功能的测试用例。
五、选做内容
完成图形化界面设计。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:7 停车场管理
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
设停车场内只有一个可停放n辆汽车的狭长通道,且只有一个大门可供汽车进出。汽车在停车场内按车辆到达时间的先后顺序,依次由北向南排列(大门在最南端,最先到达的第一辆车停放在车场的最北端),若车场内已停满n辆汽车,则后来的汽车只能在门外的便道上等候,一旦有车开走,则排在便道上的第一辆车即可开入;当停车场内某辆车要离开时,在它之后进入的车辆必须先退出车场为它让路,待该辆车开出大门外,其它车辆再按原次序进入车场,每辆停放在车场的车在它离开停车场时必须按它停留的时间长短交纳费用。为停车场编制按上述要求进行管理的模拟程序。
二、基本要求
以栈模拟停车场,以队列模拟车场外的便道,按照从终端读入的输入数据序列进行模拟管理。每一组输入数据包括三个数据项:汽车“到达”或“‘离去”的信息、汽车牌照号码以及到达或离去的时刻。对每一组输入数据进行操作后的输出信息为:若车辆到达,则输出汽车在停车场内或便道上的停车位置;若车辆离去,则输出汽车在停车场内停留的时间和应交纳的费用(在便道上停留的时间不收费)。栈以顺序结构,队列以链表结构。
三、实现提示
需另设一个栈,临时停放为给要离去的汽车让路而从停车场退出来的汽车,也用顺序存储结构实现。输入数据接到达或离去的时刻有序。栈中每个元素表示一辆汽车,包含两个数据项。汽车的牌照号码和进入停车场的时刻。
四.测试数据
设n=2,输入数据为:(‘A’,1,5),(‘A’,2,10),(‘D’,1,15),(‘A’,3,20),(‘A’,4,25),(‘A’,5,30),(‘D’,2,35),(‘D’,4,40),(‘E’,0,0)。其中:'A’表示到达;'D’表示离去(Departure);'E’表示输入结束(End)。
五、选做内容
完成图形化界面设计。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:8 简单行编辑程序
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
文本编辑程序是利用计算机进行文字加工的基本软件工具,实现对文本文件的插入、删除等修改操作。限制这些操作以为单位进行的编辑程序称为行编辑程序。
被编辑的文本文件可能很大,全部读入编辑程序的数据空间(内存)的作法既不经济,也不总能实现。一种解决方法是逐段地编辑。任何时刻只把待编辑文件的一段放在内存,称为活区。试按照这种方法实现一个简单的行编辑程序。设文件每行不超过320个字符,很少超过80个字符。
二、基本要求
实现以下4条基本编辑命令:
(1)行插入。格式:i<行号><回车><文本>。<回车>将<文本>插入活区第<行号>行之后.
(2)行删除。格式:d<行号1>[<空格><行号2>]<回车>删除活区第<行号1>行(到第<行号2>行)。例如:“d10”和“10 14”。
(3)活区切换。格式:n<回车>将活区写入输出文件,并从输出文件中读入下一段,作为新的活区。
(4)活区显示。格式:p<回车>
(5)逐页地(每页20行)显示活区内容,每显示一页之后请用户决定是否继续显示以后各页(如果存在)。印出的每以行要前置行号和以个空格符,行号固定占4位,增量为1。
(6)各条命令中的行号均须在活区中各行行号范围之内,只有插入命令的行号可以等于活区第一行行号减1,表示插入当前屏幕中第一行之前,否则命令参数非法。
三、实现提示
(1)设活区的大小用行数activemaxlen(可设为100)来描述。考虑到文本文件行长通常为正态分布,且峰值在60到70之间,用320×activemaxlen大小的字符数组实现存储将造成大量浪费。可以以标准行块为单位为各行分配存储,每个标准行块含81个字符。这些行块可以组成一个数组,也可以利用动态链表连接起来。一行文字可能占多个行块。行尾可用一个特殊的ASCII字符(如(012)8)标识。此外,还应记住活区起始行号。行插入将引起随后各行行号的顺序下推。
(2)初始化过程包括:请用户提供输入文件名(空串表示无输入文件)和输出文件名,两者不能相同。然后尽可能多地从输入文件中读入各行,但不超过activemaxlen-x。x的值可以自定。
(3)在执行行插入命令的过程中,每接收到一行时到要检查活区大小是否已达activemaxlen。如果是,则为了在插入这一行之后仍保持活区大小不超过activemaxlen,应将插入点之前的活区部分中第一行输出到输出文件中;若插入点为第一行之前,则只得将新插入的这一行输出。
(4)若输入文件尚未读完,活区切换命令可将原活区中最后几行留在活区顶部,以保持阅读连续性;否则,意味着结束编辑或开始编辑另一个文件。
四、测试数据
根据任务要求设计出能全面测试各功能的测试用例。
五、选做内容
(1)对于命令格式非法等一切错误进行严格检查和适当处理。
(2)加入更复杂的编辑操作,例如,对某行进行串替换、在活区内进行模式匹配等,格式可为s<行号>@<串1>@<串2><回车>和m<串><回车>。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目: 9 生产者消费者问题
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
编制生产者—消费者算法。实现对经典的生产者—消费者问题的模拟。
完成N个生产者和M个消费者进程之间的并发控制,N、M不低于30,数据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。
二、基本要求
模拟一个生产者、一个消费者,共享一个缓冲池的情形。
(1)实现对经典的生产者—消费者问题的模拟,以便更好的理解此经典进程同步问题。生产者-消费者问题是典型的PV操作问题,假设系统中有一个比较大的缓冲池,生产者的任务是只要缓冲池未满就可以将生产出的产品放入其中,而消费者的任务是只要缓冲池未空就可以从缓冲池中拿走产品。缓冲池被占用时,任何进程都不能访问。
(2)每一个生产者都要把自己生产的产品放入缓冲池,每个消费者从缓冲池中取走产品消费。在这种情况下,生产者消费者进程同步,因为只有通过互通消息才知道是否能存入产品或者取走产品。他们之间也存在互斥,即生产者消费者必须互斥访问缓冲池,即不能有两个以上的进程同时进行。
三、实现提示
生产者与消费者进程对缓冲区的访问是互斥关系,而生产者与消费者本身又存在同步关系,即必须生成之后才能消费。因而对于缓冲区的访问设置一个互斥量,再设置两个信号量一个记录空闲缓冲区单元,一个记录满缓冲区单元来实现生产者与消费者的同步。
四、测试数据
根据任务要求设计出能全面测试各功能的测试用例。
五、选做内容
(1)完成N个生产者和M个消费者进程之间的并发控制,N、M不低于30,数据发送和接收缓冲区尺寸不小于20个(每个产品占据一个)。
(2)便于用户观察和分析,要求使用图形用户界面。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:10 处理机调度问题
课程设计时间: 2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
在多道程序和多任务系统中,系统内同时处于就绪状态的进程可能有若干个。也就是说能运行的进程数大于处理机个数。为了使系统中的进程能有条不紊地工作,必须选用某种调度策略,选择一进程占用处理机。编制处理机调度算法。实现对处理机调度问题的模拟。
二、基本要求
(1)再由系统生成一个进程序列(包括到达时间、服务时间和优先数)。
(2)然后显示进程调度算法由用户选择,包括:时间片轮转法,短作业优先算法,动态优先级算法。
(3)显示结果包括每个进程的开始时间、完成时间、周转时间以及带权周转时间。
三、实现提示
进程名
指针
要求运行时间
优先数
状态
每一个进程用一个进程控制块PCB来代表,进程控制块的格式为右图。其中,进程名——作为进程的标识,假设五个进程的进程名分别为P1,P2,P3,P4,P5。
指针——按优先数的大小把五个进程连成队列,用指针指出下一个进程的进程控制块的首地址,最后一个进程中的指针为“0”。
要求运行时间——假设进程需要运行的单位时间数。
优先数——赋予进程的优先数,调度时总是选取优先数大的进程先执行。
状态——可假设有两种状态,“就绪”状态和“结束”状态。
在每次运行你所设计的处理器调度程序之前,为每个进程任意确定它的“优先数”和“要求运行时间”。
进程每运行一次优先数就减“1”。由于本实习是模拟处理器调度,所以,对被选中的进程并不实际的启动运行,而是执行:优先数-1; 要求运行时间-1。
四、测试数据
根据任务要求设计出能全面测试各功能的测试用例。
五、选做内容
(1)先由用户输入进程数量(至少5个进程),再由系统随机生成一个进程序列(包括到达时间、服务时间及初始优先级)。
(2)便于用户观察和分析,要求使用图形用户界面。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目: 11 模拟页式存储管理
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
设计一个请求页式存储管理方案,并编写模拟程序实现。
二、基本要求及实现提示
(1)产生一个需要访问的指令地址流,为不失一般性,可以适当地(用人工指定地方法或用随机数产生器)生成这个序列,使得50%的指令是顺序执行的,25%的指令均匀地散布在前地址部分,25%的地址是均匀地散布在后地址部分。
(2)页面淘汰算法采用FIFO页面淘汰算法,并且在淘汰一页时,只将该页在页表中抹去。而不再判断它是否被改写过,也不将它写回到辅存。
(3)产生一个需要访问的指令地址流;指定合适的页面尺寸(例如以1K或2K为1页;指定内存页表的最大长度,并对页表进行初始化。
(4)每访问一个地址时,首先要计算该地址所在的页的页号,然后查页表,判断该页是否在主存。如果该页已在主存,则打印页表情况;如果该页不在主存且页表未满,则调入一页并打印页表情况;如果该页不在主存且页表已满,则按FIFO页面淘汰算法淘汰一页后调入所需的页,打印页表情况。逐个地址访问,直到所有地址访问完毕。
三、测试数据
根据任务要求设计出能全面测试各功能的测试用例。
四、选做内容
(1)先由用户输入进程数量(至少5个进程),再由系统随机生成一个进程序列(包括到达时间、服务时间及初始优先级)。
(2)便于用户观察和分析,要求使用图形用户界面。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:12 图基本操作的实现
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
很多涉及图上操作的算法都是以图的遍历操作为基础的。编写程序,完成在连通无向图上访问全部顶点。
二、基本要求
(1)分别以图的邻接矩阵和邻接表两种存储结构实现连通无向图的深度优先遍历和广度优先遍历。
(2)以用户指定的顶点为起点,分别输出每种存储结构下的每种遍历的结点访问序列。
三、实现提示
设图的顶点不超过30个,每个顶点用一个编号表示(如果一个图有n个顶点,则它们的编号分别为1,2,…,n)。通过输入图的全部边输入一个图,每条边为一个数对,可以对边的顺序做出某种限制。
四、测试数据
自行设计一个至少含10个顶点,14条边的无向连通图。
五、选做内容
借助于栈类型,用非递归算法实现图的深度优先遍历。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目: 13 重言式判别问题
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
一个逻辑表达式如果对于其变元的任一种取值都为真,则称为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式;然而,更多的情况下,既非重言式,也非矛盾式。试写一个程序,通过真值表判别一个逻辑表达式属于上述哪一类。
二、基本要求
(1)逻辑表达式从终端输入,长度不超过一行。逻辑运算符包括 “|”,“&” 和 “~”,分别表示或、与和非,运算优先程度递增,但可由括号改变,即括号内的运算优先。逻辑变元为大写字母。表达式中任何地方都可以含有多个空格符。
(2)若是重言式或矛盾式,可以只显示"True forever",或"False forever",否则显示 “Satisfactible” 以及变量名序列,与用户交互。若用户对表达式中变元取定一组值,程序就求出并显示逻辑表达式的值。
三、实现提示
(1)识别逻辑表达式符号形式并建立二叉树可以有两种策略:自底向上的算符优先法和自顶向下分割先序遍历建立二叉树的方法。
(2)可设表达式中逻辑变量数不超过20;真值的产生可通过在一维数组上维护一个“软计算器”实现;用递归算法实现更简单。
四、测试数据
(1)(A|A)&(B|B)
(2)(A&~A)&C
(3)A|B|C|D|E|~A
(4)A&B&C&~B
(5)(A|B)&(A|~B)
(6)A&B|A&B
A和B的取值为(0,0);(0,1);(1,0);(1,1)
五、选做内容
逻辑变元的标识符不限于单字母,可以是任意长的字母数字串。还可以根据用户的要求显示表达式的真值表。
课程设计任务书
课程设计名称:软件技术课程设计
课程设计题目:14 迷宫问题
课程设计时间:2024 年 10 月 8 日至 2024 年 10 月 13 日
课程设计的内容及要求:
一、问题描述
以一个m×n的长方阵表示迷宫,0和1分别表示迷宫中的通路和障碍。设计一个程序,对任意设定的迷宫,求出一条从入口到出口的通路,或得出没有通路的结论。
二、基本要求
首先实现一个以链表作存储结构的栈类型,然后编写一个求解迷宫的非递归程序。求得的通路以三元组(i,j,d)的形式输出,其中:(i,i)指示迷宫中的一个坐标,d表示走到下一坐标的方向。如:对于下列数据的迷宫,输出的一条通路为:(l,1,1),(1,2,2),(2,2,2),(3,2,3),(3,1,2), (4,1,1),……
0 0 1 0 0 0 1 0
0 0 1 0 0 0 1 0
0 0 1 0 1 1 0 1
0 1 1 1 0 0 1 0
0 0 0 1 0 0 0 0
0 1 0 0 0 1 0 1
0 1 1 1 1 0 0 1
1 1 0 0 0 1 0 1
1 1 0 0 0 0 0 0
三、实现提示
计算机解迷宫通常用的是“穷举求解”方法,即从入口出发,顺着某一个方向进行探索,若能走通,则继续往前进;否则沿着原路退回,换一个方向继续探索,直至出口位置,求得一条通路。假如所有可能的通路都探索到而未能到达出口,则所设定的迷宫没有通路。可以二维数组存储迷宫数据。
四、测试数据
测试数据如下:
(1)左上角(1,1)为人口,右下角(8,9)出口。
(2)任意选定出入口。
五、选做内容
(1)迷宫大小可任意设定。
(2)自动生成迷宫。
(3)完成图形化界面设计。