这是一种用于识别七种动物的生产系统:老虎,豹子,斑马,长颈鹿,企鹅,鸵鸟和信天翁。为了实现这些动物的识别,该系统已经建立了以下规则基础:
2。实施过程
一开始,我直接通过给定的判断条件直接实施了此推论系统,并使用了一个简单的话,如果...否则,直接给出了所有判断条件并让用户输入,而用户的未知条件被拒绝,但这会带来诸如能够飞或产卵之类的问题可能会退出成为鸟,但是如果我知道这是鸟类,那么在衍生企鹅的过程中将拒绝以前的条件,因为其中一种企鹅不能飞。它与以前的飞鸟有冲突。因此,您可以首先绘制推理图并将层次结构划分,如下图所示:
图中的括号之后的数字可以忽略。这是我第一个版本的判断标准的数量。通过此推理图,可以将整个推理过程简单地分为两个部分,其中哺乳动物和食肉动物可以形成一个部分,而鸟类则单独起到部门的作用。此外,值得注意的是,食肉动物不能独自发出金钱。和老虎,但哺乳动物可以引入斑马,这很容易导致读者在这张照片中思考。
3。代码
#include
int main() {
printf("\n\n=====动物识别系统=====\n\n");
printf("判决条件:\n");
printf(" 1. 有毛 2.有奶 3.有羽毛 4.会飞 5.会下蛋 6.眼盯前方\n");
printf(" 7. 有蹄 8.反刍动物 9.吃肉 10.有犬齿 11.有爪 \n");
printf("12.长脖子 13.长腿 14.暗斑点 15.有黑色条纹\n");
printf("16.黄褐色 17.不会飞 18.黑白二色 19.会游泳 20.善飞\n");
printf("\n请输入已知条件序号(如2,输入999结束。):\n");
const int num = 20; //条件个数
int inputs[num] = { 0 };
int i = 0;
while (i < num) {
int temp;
scanf_s("%d", &temp);
if (temp == 999) break;

if (temp < 1 || temp >20) {
printf("序号有误,请重新输入: \n");
continue;
}
inputs[i] = temp;
i++;
}
int sign[num] = { 0 }; //标志每一个条件(有就标志为1,没有就标志为0)
int bf[num] = { 0 }; //用于备份
int j = 0;
while (inputs[j] != 0) {
sign[inputs[j] - 1] = 1;
bf[inputs[j] - 1] = 1;
j++;
}
if (sign[0] || sign[1]) {
// 满足哺乳动物条件
if (bf[0]) {
printf("\n使用规则:有毛--->哺乳动物\n");
}
else {
printf("\n使用规则:有奶--->哺乳动物\n");
}
sign[0] = 0, sign[1] = 0;

//printf("=====该动物是哺乳动物=====\n\n");
if (sign[6] || sign[7]) {
// 满足有蹄类动物条件
if (bf[6]) {
printf("\n使用规则:哺乳动物+有蹄--->有蹄类动物\n");
}
else {
printf("\n使用规则:哺乳动物+反刍动物--->有蹄类动物\n");
}
sign[6] = 0, sign[7] = 0;
//printf("=====该动物是有蹄类动物=====\n\n");
if (sign[11] && sign[12] && sign[13]) {
sign[11] = sign[12] = sign[13] = 0;
printf("\n使用规则:有蹄类动物+有长脖子+有长腿+有暗斑点--->长颈鹿\n");
printf("\n\n======该动物是长颈鹿======\n\n");
}
else if(sign[14]){
sign[14] = 0;
printf("\n使用规则:有蹄类动物+有黑色条纹--->斑马\n");
printf("\n\n======该动物是斑马======\n\n");
}
else {
printf("\n\n======无法具体判断=====\n\n");
}
}
else if (sign[8] || (sign[5] && sign[9] && sign[10])) {
if (sign[8]) {
printf("\n使用规则:吃肉--->食肉动物\n");
}
else {
printf("\n使用规则:有犬齿+有爪+眼盯前方--->食肉动物\n");
}
sign[8] = sign[5] = sign[9] = sign[10] = 0;
// 满足食肉动物条件
//printf("=====该动物是食肉动物=====\n\n");
if (sign[13] && sign[15]) {
sign[13] = sign[15] = 0;
printf("\n使用规则:食肉动物+哺乳动物+黄褐色+有暗斑点--->金钱豹\n");
printf("\n\n======该动物是金钱豹======\n\n");
}
else if (sign[14] && sign[15]) {
sign[14] = sign[15] = 0;
printf("\n使用规则:食肉动物+哺乳动物+黄褐色+黑色条纹--->虎\n");
printf("\n\n======该动物是虎======\n\n");
}
}
else {
printf("\n\n======无法具体判断=====\n\n");
}
}

else if (sign[2] || (sign[3] && sign[4])) {
// 满足鸟类条件
if (sign[2]) {
printf("\n使用规则:有羽毛--->鸟类\n");
}
else {
printf("\n使用规则:会飞+会下蛋--->鸟类\n");
}
sign[2] = 0, sign[3] = 0, sign[4] = 0;
//printf("\n\n=====该动物是鸟类=====\n\n");
if (sign[11] && sign[12] && sign[16] && sign[17]) {
sign[11] = sign[12] = sign[16] = sign[17] = 0;
printf("\n使用规则:鸟类+有长脖子+有长腿+不会飞+有黑白二色--->鸵鸟\n");
printf("\n\n======该动物是鸵鸟======\n\n");
}
else if (sign[16] && sign[17] && sign[18]) {
sign[16] = sign[17] = sign[18] = 0;
printf("\n使用规则:鸟类+会游泳+不会飞+有黑白二色--->企鹅\n");
printf("\n\n======该动物是企鹅======\n\n");
}
else if (sign[19]) {
sign[19] = 0;
printf("\n使用规则:鸟类+善飞--->信天翁\n");
printf("\n\n======该动物是信天翁======\n\n");
}
else {
printf("\n\n======无法具体判断=====\n\n");
}
}
else {
printf("\n\n======无法具体判断=====\n\n");
}
int xx = 0; //标记
for (int i = 0; i < num; i++) {
if (sign[i]) {
printf("\n\n推理最可能动物时,存在多余条件, 序号是 %d\n",i+1);
xx = 1;
}
}
if (xx == 1) printf("\n\n=======以上推理失效=======\n");
}
代码中的BF数组是用于存储用户输入条件的备份阵列,因为一旦稍后判断原始数组,条件将设置为0,这意味着无法再使用它。此外,最后一个标记循环只能说只有在您输入第二或第三层时才能给出额外的条件,并且此周期将生效。否则,在测试失败条件时,将直接给出所有条件。
4。摘要
通过实施动物识别系统的规则基础,我们对生产系统(例如推理方法)的机制有基本的理解和理解。在改进程序的过程中,制定了初始逻辑漏洞,一开始,它们只是根据问题直接推断出来的if ... else eys陈述,后来他们制作了推理图,他们确实有对这个问题的更深入了解。纠正了完全否定用户尚未输入条件的实践,并在最后向用户提出了特定的推理过程。这不仅提供了课堂上学习的内容的基本整合,而且还进一步改善了此类问题的逻辑思维和编程思想。这是一个简单的话,如果……else语句实现,读者可以根据他们的需求对其进行修改。
版权声明:本文内容由互联网用户自发贡献,该文观点仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容, 请联系本站,一经查实,本站将立刻删除。如若转载,请注明出处:http://www.linwantang.com/html/tiyuwenda/9546.html