QM算法源代码及说明(优选.)

合集下载

QM算法源代码及说明

QM算法源代码及说明

QM算法源代码及说明QM算法(Quality model algorithm)是一种用于评估软件质量的算法。

它基于质量模型的概念,通过对软件质量属性进行度量和分析来评估软件的质量。

QM算法的源代码及说明如下:1.概述QM算法主要包含以下几个步骤:定义质量模型,确定指标集,采集数据,计算指标值,评估质量等级。

在本算法中,我们以代码行数、错误率和代码复杂度为例进行质量评估。

2.定义质量模型首先,我们需要定义一个质量模型,用于描述软件的质量属性。

在本例中,我们选择了以下三个属性:代码行数、错误率和代码复杂度。

代码行数表示代码的规模,错误率表示代码中的错误数量与代码行数的比例,代码复杂度表示代码的复杂程度。

3.确定指标集在质量模型中,我们需要确定相应的指标集来度量软件的质量属性。

对于代码行数,我们选择了代码文件中的总行数来度量;对于错误率,我们选择了错误数量与代码行数的比例来度量;对于代码复杂度,我们选择了代码中的循环数、条件语句数和函数调用数来度量。

4.采集数据接下来,我们需要采集数据来计算指标值。

我们可以通过工具或手动方式来获取代码文件的总行数、错误数量和代码复杂度的相关数据。

5.计算指标值通过采集到的数据,我们可以计算每个指标的值。

例如,代码文件的总行数为1000行,错误数量为50个,循环数为20个、条件语句数为10个,函数调用数为30个。

代码行数的指标值为1000,错误率的指标值为0.05,代码复杂度的指标值为60。

6.评估质量等级最后,我们可以根据指标值来评估软件的质量等级。

我们可以根据预先定义的评估规则,将指标值映射到相应的质量等级。

例如,代码行数在1000-2000行之间可以评为良好,错误率在0-0.1之间可以评为优秀,代码复杂度在50-100之间可以评为中等。

综合考虑三个指标的质量等级,我们可以得出最终的软件质量等级。

以上就是QM算法的源代码及说明。

QM算法基于质量模型,通过度量和分析软件质量属性来评估软件的质量。

qmdp算法

qmdp算法

qmdp算法QMDP算法,全称为“确定性有限马尔可夫决策过程(QMDP)算法”,是一种在决策问题中常用的求解最优策略的方法。

本文将详细介绍QMDP算法的原理和应用。

一、QMDP算法的原理QMDP算法是基于马尔可夫决策过程(MDP)的一种算法。

MDP 是一种动态规划的问题,包含了状态、动作、状态转移概率和奖励函数等要素。

在MDP中,我们希望找到一个最优策略,使得在每个状态下选择最优的动作,从而使得累计奖励最大化。

QMDP算法的核心思想是将MDP问题中的连续状态空间离散化,将连续动作空间离散化,从而将问题转化为有限状态和动作的问题。

通过将状态和动作进行离散化,可以大大简化问题的复杂度,提高计算效率。

QMDP算法的具体步骤如下:1. 将连续状态空间和动作空间进行离散化,得到有限的状态和动作集合。

2. 根据状态转移概率和奖励函数,计算每个状态下每个动作的期望奖励值。

3. 根据期望奖励值,计算每个状态下选择每个动作的Q值。

4. 根据Q值,选择每个状态下最优的动作作为策略。

5. 根据策略,进行状态转移和奖励计算,更新Q值。

6. 重复步骤4和步骤5,直到收敛或达到最大迭代次数。

二、QMDP算法的应用QMDP算法在机器人路径规划、自动驾驶、智能交通等领域有着广泛的应用。

以机器人路径规划为例,我们可以将环境中的障碍物、目标位置等信息进行离散化,将机器人的动作进行离散化,通过QMDP算法求解最优路径。

在机器人路径规划中,QMDP算法可以帮助机器人根据当前状态选择最优的动作,比如避开障碍物、尽快到达目标位置。

通过不断迭代更新Q值,机器人可以学习到在不同状态下选择不同动作的最优策略,从而实现路径规划的自动化。

QMDP算法还可以应用于自动驾驶领域。

在自动驾驶中,车辆需要根据当前道路、交通状况等信息选择最优的行驶策略,如何在复杂的交通环境中做出正确的决策是自动驾驶的关键问题。

QMDP算法可以帮助车辆根据当前状态选择最优的行驶策略,使得车辆能够安全、高效地行驶。

SAPQM常用事物码和常用表

SAPQM常用事物码和常用表

SAPQM常用事物码和常用表事物代码模块事物代码描述功能详细描述QS41QM目录编辑缺陷、使用决策、缺陷原因等选项集的维护QS42QM目录显示缺陷、使用决策、缺陷原因等选项集的显示QS51QM目录选择集编辑对QS41所维护的选项集再进行分配QS52QM目录选择集显示显示分配关系QS21QM检验特性创建检验项点的创建QS23QM检验特性更改检验项点的更改QS24QM检验特性显示检验项点的显示QS28QM检验特性清单批量查看检验特性的各种属性QS26QM检验特性调用清单反查检验特性应用在哪些检验计划等QS27QM检验特性替换将检验计划中的某个特性替换成另外一个特性QDV1QM采样过程创建QDV2QM采样过程更改QDV3QM采样过程显示QDV6QM采样过程调用清单反查采样过程应用在哪些检验计划中QDV7QM采样过程替换将检验计划中的某个采样过程替换成另外的采样过程QDP1QM采样方案创建AQL采样表、其他采样表等的创建QDP2QM采样方案更改AQL采样表、其他采样表等的更改QDP3QM采样方案显示AQL采样表、其他采样表等的显示QP01QM检验计划创建QP02QM检验计划更改QP03QM检验计划显示QP60QM显示检验计划更改显示检验计划的更改历史QP06QM缺少或不可用的检验计划物料存在检验计划或者检验计划不可用QP07QM采购中缺少或不可用的检验计划采购已经产生检验批,但无法记录结果,原因是检验计划QSR6QM检验计划删除删除检验计划QA08QM物料质量视图批量修改批量增加/删除物料的检验类型QA32QM质量检验-检验更改批量做结果记录、缺陷记录等QA33QM质量检验-检验显示批量显示检验批QE51N QM质量检验-结果记录批量记录检验批的结果QA01QM检验批-新建(手工)手工创建检验批QA02QM检验批-更改更改检验批的内容QA03QM检验批-显示显示检验批的内容QA11QM检验批-使用决策记录做出检验批的最终判定决策QA12QM检验批-使用决策更改更改检验批的使用决策QA13QM检验批-使用决策显示显示检验批的使用决策QA23QM检验批所有检验点情况概览QE01QM记录检验结果用于非检验点的结果记录QE02QM修改检验结果用于非检验点的结果修改QE03QM显示检验结果用于非检验点的结果显示QE11QM检验点记录检验结果用于工序检验,具有检验点的结果记录QE12QM检验点修改检验结果用于工序检验,具有检验点的结果修改QE13QM检验点显示检验结果用于工序检验,具有检验点的结果显示QF01QM创建缺陷记录不分级别,即包含所有级别(检验批、工序、特性)的缺QF02QM更改缺陷记录QF03QM显示缺陷记录QF11QM在检验批级别做缺陷记录QF12QM在工序级别做缺陷记录QF13QM在特性级别做缺陷记录QM03QM显示质量通知单显示缺陷记录的质量通知单MCXX QM按物料进行缺陷分析分析期间内各种缺陷出现的次数MCVX QM按供应商进行缺陷分析分析期间内各种缺陷出现的次数MCOX QM按客户进行缺陷分析分析期间内各种缺陷出现的次数MCXB QM按物料进行检验结果分析分析接收批量,拒绝批量,合格数量,不合格数量,缺陷MCVB QM按供应商进行检验结果分析分析接收批量,拒绝批量,合格数量,不合格数量,缺陷MCOB QM按客户进行检验结果分析分析接收批量,拒绝批量,合格数量,不合格数量,缺陷MCXD QM定量特性按物料进行检验结果分析MCVD QM定量特性按供应商进行检验结果分析MCOD QM定量特性按客户进行检验结果分析MCXA QM按物料进行批量概览MCVA QM按供应商进行批量概览MCOA QM按客户进行批量概览MCXC QM按物料进行批量概览(数量相关)MCVC QM按供应商进行批量概览(数量相关)MCOC QM按客户进行批量概览(数量相关)MM01MM创建物料可以扩充质量管理视图MM02MM修改物料MM03MM显示物料ME21N MM创建采购订单ME22N MM修改采购订单ME23N MM显示采购订单ME29N MM审批采购订单ME54N MM审批采购申请MIGO(103)MM来料点收操作CO01PP创建生产订单CO02PP修改生产订单CO03PP显示生产订单COOIS PP批量查看生产订单可以批量查看某个物料的生产任务单号、数量等信息CA01PP创建工艺路线可以在创建工艺路线时给检验工艺路线分配检验特性CA02PP修改工艺路线可以在修改工艺路线时给检验工艺路线分配检验特性CA03PP显示工艺路线---------------------------------------------------------------------------------------------------1、Inspecti lot/info record(检验批决定一个QALS Inspection lot recordQAMB Link inspection lotQAVE Inspection usage decisionQAMR检验处理中的特性结果QASE采样单元的结果表TQ17缺陷分类TQ17T缺陷分类描述表QPCT代码文本(可以取出缺陷文本、使用决策描述等各种描述)QDPS Inspection stagesQMAT Inspection type-QPMT检验特性描述表QDPKT采样方案描述(短文本)QDSVT采样过程描述QASR采样结果表QALS检验批结果表PLMK检验计划特性(行项目表)QASE(对定量特性结果记录)采样单元的结果表QAKL(对定性结果记录)数值分类结果表QAMR检验处理中的特性结果(过程中)QAMV检验处理的特性说明(结果)与QALS检验批相等,取行项目内容)QINF Inspection info recordQDQL Quality level质量级别QDPS Inspection stages对动态修改规则的检验阶2、Quality n otificationTQ80Notification types通知类型QMEL Quality notification质量通知抬头表QMFE Quality notification–QMUR Quality notification–QMSM Quality notification–QMMA Quality notification–QMIH Quality message-3、Certific profileQCVMT Certificate profile characterisQCVM Certificate profile characterisQCVK Certificate profile header4.检验计划PLMK检验计划特性PLAS任务清单,工序/作业选择(用于选择检验计划的某道工序)PLPO任务清单,工序/作业(项目表)PLKO任务清单(抬头表)维护选项集的显示成另外一个特性替换成另外的采样过程记录结果,原因是检验计划问题的检验计划清单检验批、工序、特性)的缺陷记录格数量,不合格数量,缺陷数量等指标格数量,不合格数量,缺陷数量等指标格数量,不合格数量,缺陷数量等指标任务单号、数量等信息工艺路线分配检验特性工艺路线分配检验特性---------------------------------------------------------------------------------------record(检验批决定一个检验计划,节点相当于检验批(检验计划)的一道工序;任务类型+组+组计数器=一个检验计划)检验批记录-material document检验批---物料凭证使用决策(包括质量给分)material parameters检验类型--物料参数(物料主数据中)(vendor-material)物料和供应商的QM信息记录对动态修改规则的检验阶段知抬头表items质量通知---项目表causes质量通知---原因tasks质量通知----任务activities质量通知----作业maintenance data excerpt质量信息---维护数据摘录level:texts 证书特性参数文本level证书参数文件特性层证书参数文件表头计数器=一个检验计划)。

QM

QM

QM操作文档一,SAP基本界面二,QM的基本基础知识1 代码组(QS41/QS42/QS43)2 选择集(QS51/QS52/QS53)3 采样过程(QDV1/QDV2/QDV3)4 采样方案(QDP1/QDP2/QDP3)5 动态修改规则(QDR1/QDR2/QDR3)6 检验方法(QS31/QS33/QS34)7 物料主检验特性(QS21/QS23/QS24)8 检验计划(QP01/QP02/QP03)三,IQC检验步聚1 物料主数据视图配置2 检验批的产生3 检验结果的输入和决策四,IPQC 检验步聚1 物料主数据视图配置2 检验批的产生3 检验结果的输入和决策五,重复制造检验步聚1 物料主数据视图配置2 检验批的产生3 检验结果的输入和决策六,常规批量检验1 物料主数据视图配置2 检验批的产生3 检验结果的输入和决策七,检验批决策冲销一,SAP基本界面1,基本页面2,常用图标系统功能图标使用系统功能图标说明⏹确认按钮使您能够进入下一个屏幕或窗口。

Enter 按钮有相同的功能。

⏹保存按钮保存您在数据库中的工作。

⏹返回按钮使您在不保存当前工作的情况下返回以前的屏幕。

⏹退出按钮使您退出当前的应用程序而进入以前的应用程序或进入主菜单。

⏹取消按钮使您在不保存当前工作的情况下退出当前的任务。

⏹帮助使您获得在线帮助。

⏹创建新的会话按钮使你快速打开一个新的会话窗口。

⏹发送邮件按钮可将屏幕内容(或文件)发送给同一系统中的其他用户。

⏹细节按钮可显示某行(或字段)的详细内容。

⏹检查按钮可检查屏幕输入内容(或程序等)的准确性及完整性。

⏹单据流按钮使您能够根据系统中的某张单据或凭证,查找到与其相关的单据及凭证。

⏹执行按钮使您开始一个系统活动。

⏹查找按钮执行查找数据的功能,或在当前工作的屏幕上。

⏹排序按钮通过高亮度栏按照字母顺序重新排列数据。

⏹打印按钮打印当前工作屏幕上的数据。

⏹更改↔显示按钮⏹页按钮使您能够进入以后或以前的页,既可以进入第一页也可以是最后一页。

QM常用事务代码

QM常用事务代码
QVM2 数量未过帐检验批清单 ***
QVM3 未完成的检验批清单 ***
QE11 记录、更改检验结果
QE13 显示检验结果 ***
QI01 创建质量信息记录
QI02 修改质量信息记录
QI03 显示质量信息记录 ***
QI06 批量维护质量信息记录 ***
QM01 创建质量通知单
QS41 维护代码组
QS42 显示代码组
QS51 维护选择集
QS52 显示选择集
ME21N 创建采购订单
ME22N 修改采购订单
ME23N 显示采购订单
MIGO 收货 ***
MMBE 查看现有库存
MB51 查看物料凭证清单
MB52 查看库存清单
CV01N 创建凭证
SPRQ 要求数量过帐
LTIN 长期检验
PASG 已分配的计划 /说明
CCTD 被创建的检验特性
CALC 已计算了样本
QLCH 质量级别相关
SKIP 略过批量
PRSI 打印了样本绘图指令
PRII 已打印了检验指令
INSP 检验活动
RREC 已确认了结果
DEF 记录了缺陷
ICST 已完成了短期检验
QM02 修改质量通知单
QM03 显示质量通知单
QM10 批量更改质量通知单
QM11 批量显示质量通知单
QP01 创建检验计划
QP02 修改检验计划
QP03 显示检验计划 ***
QP06 显示缺失的检验计划 ***
QS21 创建检验特性
QS23 修改检验特性
QS24 显示检验特性

QM

QM

自由设计报告报告名称:逻辑表达式的计算机化简姓名:学号:【摘要】:本文介绍了化简逻辑函数的基本方法,并通过数据结构的原理对比,选择利用C 语言构建数组,来设计用QM 表格法化简逻辑函数的算法。

同时输入特定的的逻辑函数表达式进行验证(设计逻辑函数表达式的变量数目最多为6个),将其表达式转化为最简式,并显示结果。

最后针对算法提出相应的改进意见。

关键词:QM 法、逻辑函数、质蕴含项一、选题背景在数字电路课程学习当中,我们了解到有两种方法可以对逻辑函数进行化简,一种是卡诺图法,这种方法在手动计算的时候相对比较简便,十分直观,但是由于在多变量时图形处理应用上十分复杂,不利于应用于计算机编程;另外一种则是QM 表格法,由于重复化简的步骤使该方法在实际运算中比较复杂,但是当设计成计算机算法的时候化简效果很好。

课堂上已经有同学提出了用链表来完成QM 表格法设计,我认为除了链表之外,数组也是一个比较好的选择,希望在这里可以探索了利用该方法对变量数目较多的逻辑函数进行化简的编程实现方法。

二、QM 法化简表达式基本原理2.1相关定义蕴涵项:在函数的“与或”表达式中,每个“与”项被称为该函数的蕴涵项。

质蕴涵项:若函数的—个蕴涵项不是该函数中其它蕴涵项的子集,则此蕴涵项称为质蕴涵项,简称为质项。

必要质蕴涵项:若函数的—个质蕴涵项所包含的某一个最小项不被函数的其它任何质蕴涵项包含.则此质蕴涵项被称为必要质蕴涵项,简称为必要质项。

列表化简法的思路是先找出给定函数F 的全部素项,然后找出其中的实质素项;若实质素项不能覆盖F 的所有最小项,则进一步找出所需素项,以构成F 的最简素项集。

2.2 化简步骤一般的化简步骤是:第—步:将函数表示成“最小项之和”形式,并用二进制码表示每—个最小项。

第二步:找出函数的全部质蕴涵项。

先将n 个变量函数中的相邻最小项合并,消去相异的—个变量,得到()-1n 个变量的“与”项,再将相邻的()-1n 个变量的“与”项合并,消去相异的变量,得到()-2n 个变量的“与”项,……依此类推,直到不能再合并为止。

qmt 条件单代码-概述说明以及解释

qmt 条件单代码-概述说明以及解释

qmt 条件单代码-概述说明以及解释1.引言1.1 概述概述:在金融交易市场中,条件单是指投资者提前设置好条件,当市场价格符合条件时,自动触发委托交易的一种交易方式。

qmt条件单代码是一种特殊的条件单代码,通过指定的代码规则,投资者可以更加精准地设置条件,实现自动化下单操作。

本文将介绍qmt条件单代码的定义、应用场景和优势,帮助读者更好地了解和运用这种高效的交易方式。

1.2 文章结构本文主要分为三个部分,分别是引言、正文和结论。

引言部分将介绍本文的概述、文章结构和目的,为读者提供对本文内容的整体了解。

正文部分将详细介绍什么是qmt条款单代码、qmt条款单代码的应用场景和qmt条款单代码的优势,通过具体案例和解析帮助读者更深入地理解和掌握这一概念。

结论部分将对正文内容进行总结,展望qmt条款单代码在未来的发展趋势,同时给出个人的看法和建议,为读者提供一个全面的知识结构和思考框架。

1.3 目的:撰写本文的目的在于深入探讨qmt条款单代码的概念、应用场景和优势,旨在帮助读者更好地了解和应用这一技术工具。

通过本文的介绍,读者可以详细了解qmt条款单代码在实际生产工作中的作用和影响,从而为其在工作中的决策和操作提供更有力的支持。

同时,本文也旨在促进相关行业对qmt条款单代码的关注和研究,推动其在实践中的进一步应用和发展,为行业发展和进步做出贡献。

2.正文2.1 什么是qmt条款单代码:qmt条款单代码是一种在交易市场中常用的条件单形式。

条件单是指在预设条件满足时,系统会自动执行交易操作,帮助交易者在繁忙的市场环境中更高效地处理交易。

qmt条款单代码在这种基础上具有更加灵活和智能的特点,可以根据交易者设定的多种条件来实现更复杂的交易策略。

具体来说,qmt条款单代码可以基于价格条件、时间条件、数量条件等因素来触发交易操作,从而实现自动化的交易执行。

例如,交易者可以设置一个qmt条款单代码,当某个股票的价格达到设定的触发价时,系统自动下单买入或卖出该股票;或者在某个时间段内达成特定的交易量时,系统自动执行相应的交易操作。

SAPQM操作使用说明(品保-维护检验结果及主管决策)-推荐下载

SAPQM操作使用说明(品保-维护检验结果及主管决策)-推荐下载

SAPQM操作使⽤说明(品保-维护检验结果及主管决策)-推荐下载SAP QM 项⽬组操作⼿册SAP 质量管理模块第⼀阶段(原物料检验)操作使⽤说明质量检验(以检验批160为例)⼀⼀⼀维护检验结果说明:各物料检验⼩组通过运⾏报表,列印出各⼩组当天的检验批清单,实际检验完成后再把结果输⼊SAP 系统。

运⾏报表(Z1QM05)SAP QM 项⽬组操作⼿册1.记录检验结果(1)交易代码:QE01(2)路径:后勤->质量管理->质量检验->检验结果->⽤于操作->记录(按屏幕字段输⼊“检验批”,“特性过滤器”选择全部特性,输⼊“检验员”以及“检验开始时间”)(3)按回车键进⼊如果在“主数据维护->维护物料的检验计划->创建检验计划->(4)“中维护了多个⼯序,系统会⾃动出现⼯序选择框让你选择。

下⾯是记录结果屏幕:SAP QM 项⽬组操作⼿册(根据屏幕在“结果”栏中输⼊每个特性的检验值,并按回车键,如果检验值在制定的标准范围之内则“评估”栏⾃动打“√”否则打“X”,当评估打“X”时系统⾃动出现对话框(如下图)要求输⼊检验描述,按回车键返回)。

(4)记录其他数据按(3)所述,⼀旦对每个检验特性的结果记录后并按回车键后,系统⾃动对该特性关闭,如果要补充记录该特性的其他数据,必须先选种再按“打开”按扭,如下图:SAP QM 项⽬组操作⼿册对于C 操作:(在屏幕字段中输⼊相应的值)对于D 操作SAP QM 项⽬组操作⼿册(屏幕中:“编号以上”栏表⽰检验的5个样品中中有⼏个超标准上限,相当于不合格的数⽬;“最⼤“栏表⽰检验的5个样品中检验结果的最⼤值;“最⼩“栏表⽰检验的5个样品中检验结果的最⼩值;“标准偏差“栏表⽰检验的5个样品的标准偏差值;“废品“、”不符合“值通过点击“共享”按扭,系统⾃动计算)(5)检验结果输⼊完后,保存(⼀旦在“主数据维护->维护物料的检验计划->创建检验计划->检验特性->特性的缺陷代码维护”中维护了特性的缺陷代码,在输⼊超标的检验结果,保存后,系统会⾃动产⽣质量通知单如下:)SAP QM 项⽬组操作⼿册2.修改检验结果(1)交易代码:QE02(2)路径:后勤->质量管理->质量检验->检验结果->⽤于操作->更改(3)其他操作跟记录检验结果的(3)(4)(5)的步骤⼀样修改相应的内容3.查看结果记录(1)交易代码:QE03(2)路径:后勤->质量管理->质量检验->检验结果->⽤于操作->显⽰(3)其他操作跟记录检验结果的(3)(4)(5)的步骤⼀样查看相应的内容⼀⼀⼀使⽤决策维护说明:检验结果输⼊系统后,检验部门主管运⾏报表对检验结果进⾏确认与签核运⾏报表(Z1QM05)SAP QM 项⽬组操作⼿册1.记录使⽤决策(1)交易代码:QA11(2)路径:后勤->质量管理->质量检验->检验批->使⽤决策->记录(按屏幕输⼊“检验批”)SAP QM 项⽬组操作⼿册(3)按回车键进⼊(2.修改使⽤决策(1)交易代码:QA12(2)路径:后勤->质量管理->质量检验->检验批->使⽤决策->带有历史记录的更改(3)其他操作跟记录使⽤决策中的(3)(4)步骤⼀样修改相应的字段3.显⽰使⽤决策(1)交易代码:QA13(2)路径:后勤->质量管理->质量检验->检验批->使⽤决策->显⽰(3)其他操作跟记录使⽤决策中的(3)(4)步骤⼀样查看相应的字段。

  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。

最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改
QM算法说明
一、需求分析
本算法要求输入一最小项和无关项的待化简表达式,通过程序处理输出化简后的结果。

二、算法流程
程序首先要求用户输入待化简表达式的变量数,然后要求用户逐个输入值为1的项,以2表示输入结束,再要求用户逐个输入无关项同样以2结束。

程序将用户输入的所有数据储存在一个数据容器vector中,并将相关项单独存在另一个vector中。

然后程序通过循环遍历所有相关项,将相邻的项合并成蕴涵项存入新建的vector中,无法再合并的项显然为本源蕴涵项,存入专门的容器。

之后再对新建的vector中的蕴涵项重复上述操作,直到找到所有的本源蕴涵项。

由于变量最多为10个,故合并最多进行10次,故所有合并可在一个10元vector数组内完成。

当之前的工作完成时,此时显然已找到所有的本源蕴涵项,此时遍历之前存储的相关项,统计被覆盖的次数并输出只被覆盖一次的项所属的本源蕴涵项(皆为本质本源蕴涵项)。

之后再从vector尾部开始输出其他本源蕴涵项直到所有的相关项都被覆盖为止。

三、运行结果
测试数据采用《现代逻辑设计》(第二版)P86的样例,F=Σm(4,5,6,8,9,10,13)+d(0,7,15);
结果并非最优的,是因为最后没有寻找最小覆盖导致的。

附:C++源代码
#include <iostream>
#include <cmath>
#include <cstdlib>
#include <vector>
//#include <fstream>
using namespace std;
//ofstream out("c://a.log");
bool comp(int n, char* a, char* b)
{
for(int i=0; i<n; i++)
{
if(a[i]!=b[i] && (a[i]!='-'&&b[i]!='-'))return false;
}
}
int implicant(int n, char*a, char*b)
{
int count = 0,temp;
for(int i=0; i<n; i++)
{
if(a[i]!=b[i])
{
count++;
temp = i;
}
}
if(count == 1)return temp;
else return -1;
}
bool cointain(int n, char* a, char* b)
{
for(int i=0; i<n; i++)
{
if(a[i]!=b[i] && (a[i]!='-'))return false;
}
}
int main()
{
int i,j,k,l,n,count,tmp;
char *temp,c;
vector <char*> v[10];
vector <char*> relative;
vector <char*> prime;
vector <char*> result;
bool flag[2];
cout<<"输入变量数:"<<endl;
cin>>n;
temp = new char[n];
cout<<"请输入最小项(2结束):"<<endl;
flag[0] = true;
while(flag[0])
{
for(i = 0; i<n; i++)
{
cin>>temp[i];
if(temp[i]!='0' && temp[i]!='1')
{
flag[0] = false;
break;
}
}
if(flag[0])
{
v[0].push_back(new char[n]);
relative.push_back(new char[n]);
strcpy(v[0].back(),temp);
strcpy(relative.back(),temp);
}
}
cout<<"请输入无关项(2结束):"<<endl;
flag[0] = true;
while(flag[0])
{
for(i = 0; i<n; i++)
{
cin>>temp[i];
if(temp[i]!='0' && temp[i]!='1')
{
flag[0] = false;
break;
}
}
if(flag[0])
{
v[0].push_back(new char[n]);
strcpy(v[0].back(),temp);
}
}
for(i = 0; i<10; i++)
{
if(v[i].empty())break;
for(j = 0; j<v[i].size(); j++)
{
flag[0] = false;
for(k = 0; k<v[i].size(); k++)
{
if(implicant(n,v[i][j],v[i][k])!=-1)
{
strcpy(temp,v[i][j]);
temp[implicant(n,v[i][j],v[i][k])]='-';
flag[1] = true;
flag[0] = true;
for(l=0;l<v[i+1].size();l++)
{
if(!strcmp(v[i+1][l],temp))flag[1] = false;
}
if(flag[1])
{
v[i+1].push_back(new char[n]);
strcpy(v[i+1].back(),temp);
}
}
}
if(!flag[0])
{
prime.push_back(new char[n]);
strcpy(prime.back(),v[i][j]);
}
}
}
for(i=0;i<relative.size() && !relative.empty();i++)
{
count = 0;
for(j = 0; j<prime.size()&& !prime.empty(); j++)
{
if(comp(n,relative[i],prime[j]))
{
count++;
tmp=j;
}
}
if(count==1)
{
result.push_back(new char[n]);
strcpy(result.back(),prime[tmp]);
for(j=0;j<relative.size();j++)
{
if(comp(n,relative[j],prime[tmp]))
{
relative.erase(relative.begin()+j);
j--;
}
}
prime.erase(prime.begin()+tmp);
i--;
}
}
while(!relative.empty())
{
strcpy(temp, prime.back());
prime.pop_back();
count = 0;
for(i=0;i<relative.size();i++)
{
if(comp(n,relative[i],temp))
{
relative.erase(relative.begin()+i);
i--;
count++;
}
}
if(count > 0)
{
result.push_back(new char[n]);
strcpy(result.back(),temp);
}
}
while(!result.empty())
{
for(i = 0; i < 4; i++)
cout<<*(result.back()+i);
cout<<" ";
result.pop_back();
}
cout<<endl;
system("PAUSE");
}
最新文件---------------- 仅供参考--------------------已改成-----------word文本 --------------------- 方便更改。

相关文档
最新文档