欢迎来到淘文阁 - 分享文档赚钱的网站! | 帮助中心 好文档才是您的得力助手!
淘文阁 - 分享文档赚钱的网站
全部分类
  • 研究报告>
  • 管理文献>
  • 标准材料>
  • 技术资料>
  • 教育专区>
  • 应用文书>
  • 生活休闲>
  • 考试试题>
  • pptx模板>
  • 工商注册>
  • 期刊短文>
  • 图片设计>
  • ImageVerifierCode 换一换

    《数据结构c语言》重言式判定参考了别人的代码.doc

    • 资源ID:85465856       资源大小:38.50KB        全文页数:6页
    • 资源格式: DOC        下载积分:15金币
    快捷下载 游客一键下载
    会员登录下载
    微信登录下载
    三方登录下载: 微信开放平台登录   QQ登录  
    二维码
    微信扫一扫登录
    下载资源需要15金币
    邮箱/手机:
    温馨提示:
    快捷下载时,用户名和密码都是您填写的邮箱或者手机号,方便查询和重复下载(系统自动生成)。
    如填写123,账号就是123,密码也是123。
    支付方式: 支付宝    微信支付   
    验证码:   换一换

     
    账号:
    密码:
    验证码:   换一换
      忘记密码?
        
    友情提示
    2、PDF文件下载后,可能会被浏览器默认打开,此种情况可以点击浏览器菜单,保存网页到桌面,就可以正常下载了。
    3、本站不支持迅雷下载,请使用电脑自带的IE浏览器,或者360浏览器、谷歌浏览器下载即可。
    4、本站资源下载后的文档和图纸-无水印,预览文档经过压缩,下载后原文更清晰。
    5、试题试卷类文档,如果标题没有明确说明有答案则都视为没有答案,请知晓。

    《数据结构c语言》重言式判定参考了别人的代码.doc

    重言式判定-参考了别人的代码。 2011-05-11 17:19 122人阅读 评论(0) 收藏 举报 【重言式判别】 问题描述 一个逻辑表达式如果对于其变元的任一种取值均为真,则成为重言式;反之,如果对于其变元的任一种取值都为假,则称为矛盾式,然而,更多的情况下,既非重言式,也非矛盾式。试写一个程序,通过真值表判别一个逻辑表达式属于上述哪一类。,   基本要求 (1 ) 逻辑表达式从终端输入,长度不超过一行。逻辑运算符包括 “ ” 、 “ ” 和 “ ” ,分别表示或、与和非,运算优先程度递增,但可有括号改变,即括号内的运算优先。逻辑变元为大写字母。表达式中任何地方都可以含有多个空格符。 (2 )若是重言式或矛盾式,可以只显示 “ True  Forever ” 或 “ False Forever ” ,否则显示 “ Satisfactible ” 以及变量名序列,与用户交互。若用户对表达式变元取定一组值,程序就求出并显示逻辑表达式的值。 测试数据 (1 )(A A )(B|B ) (2 )(A& A )C (3 )A|B|C|D|E A 实现提示 (1) 识别逻辑表达式的符号形式并建立二叉树可以有两种策略:自底向上的算符优先法和自顶向下分割,先序遍历建立二叉树的方法。 (2) 可设表达式中逻辑变量数不超过20 。真值的产生可以通过在一维数组上维护一个 “ 软计数器 ” 实现,用递归算法实现更简单。 cpp view plaincopyprint?1. #include<iostream>   2. using namespace std;  3. struct Arr  4.   5.        char letter;  6.        int weight;  7.          8. class Cys  9.   10.       public:  11.              Cys();  12.              void GetTautology();/输入表达式    13.              int _CreateT(int ,int );/虚拟创建二叉树    14.              int FindMin(int ,int );/找到weight最小的    15.              int count();  /计算可满足式的值    16.              void _recursion(Arr *_arr,int i );/递归,穷举    17.              void recursion();/使用接口函数    18.              void Print();/输出结果    19.              Cys();/析构释放空间    20.       private:  21.               int num;  22.               Arr *array;  23.               Arr _arr20; /存放字母    24.               int _arrNum;   25.               int trueforever;  26.               int falseforever;  27.         28.         29.     Cys:Cys()  30.         31.           trueforever=0;  32.           falseforever=0;  33.           array=new Arr20;  34.           for(int i=0;i<20;i+)  35.                 arrayi.weight-1;  36.                 arrayi.letter='0'  37.                   38.                _arrNum=0;  39.                num=0;  40.                   41.  void Cys:GetTautology()  42.    43.       int has27=0;  44.       int weight=0;  45.       char ch;  46.     cout<<"请输入一个逻辑表达式,以#结束"<<endl;  47.     while(cin>>ch  && ch!='#')   48.       49.                      50.                   51.                   if(ch=' ')  52.                       continue;  53.                         54.                         switch(ch)  55.                                 56.                                    case '(':  57.                                           weight+=4;  58.                                           break;  59.                                    case ')':  60.                                           weight-=4;  61.                                           break;  62.                                    case '&':  63.                                           arraynum.letter=ch;  64.                                           arraynum+.weight=weight+2;  65.                                           break;   66.                                    case '|':  67.                                           arraynum.letter=ch;  68.                                           arraynum+.weight=weight+1;  69.                                           break;  70.                                    case '':  71.                                           arraynum.letter=ch;  72.                                           arraynum+.weight=weight+3;  73.                                           break;  74.                                  default:  75.                                          arraynum.letter=ch;  76.                                           if(!hasarraynum.letter-'A')  77.                                           _arr_arrNum+.letter=arraynum.letter;  78.                                                hasarraynum.letter-'A'=1;  79.                                                 80.                                          arraynum+.weight=0;  81.                                          break;   82.                                       83.                            84.                      85.         86.   int Cys: FindMin(int low,int high)  87.      88.        int min=low;  89.        while(!arraymin.weight)  90.                     min+;          91.    92.      if(min<high)  93.           for(int i=min;i<high+1;i+)  94.           if(arrayi.weight && arrayi.weight<arraymin.weight)  95.               min=i;  96.           return min;       97.             98.      else     99.           return 0;  100.     101.              102.          103.  int Cys:_CreateT(int low,int high)  104.     105.      int Min=0;  106.     / cout<<"create"<<endl;   107.      if(low>high)   108.           return 1;     109.      else if(low=high)  110.            111.         / cout<<"letter"<<arraylow.letter<<endl;   112.           int i;  113.           for(i=0;_arri.letter!=arraylow.letter;i+);/从array中寻找与_arr中相同的字母    114.           return _arri.weight;/返回它的weight(1或0)    115.              116.       else   117.             Min=FindMin(low,high);  118.             /cout<<"arrayMin.letter: "<<arrayMin.letter;   119.             switch(arrayMin.letter)  120.                  case '&': return( _CreateT(low,Min-1)&& _CreateT(Min+1,high);  121.                            break;  122.                  case '|': return( _CreateT(low,Min-1)| _CreateT(Min+1,high);  123.                            break;  124.                  case '': return(!_CreateT(Min+1,high);   125.                            break;  126.                                                   127.                         128.        129.    int Cys: count() /计算可满足式的值    130.      131.        int i=0;  132.        cout<<"请给字母赋值"<<endl;  133.     while(_arrNum-)  134.                      cout<<_arri.letter;  135.                      cin>>_arri+.weight;  136.                        137.       if(_CreateT(0,num-1)  138.            trueforever+;  139.         else  140.            falseforever+;  141.        142.          143.          144.    void Cys:_recursion(Arr _arr,int i)/递归调用    145.      146.         if(i<_arrNum)  147.                       _arri.weight=0;  148.                      / cout<<"0"<<endl;   149.                       _recursion(_arr,i+1);  150.                       _arri.weight=1;  151.                      / cout<<"1"<<endl;   152.                       _recursion(_arr,i+1);  153.                         154.        else  155.         if(!trueforever|!falseforever)       156.           157.             switch(_CreateT(0,num-1)  158.               159.             case 1:  160.                 / cout<<"trueforever+;"<<endl;   161.                  trueforever+;  162.                  break;  163.             case 0:  164.                 / cout<<"falseforever+;"<<endl;   165.                  falseforever+;  166.                  break;  167.             default :  168.                  break;  169.               170.           171.        172.           173.    void Cys:Print()  174.        if(trueforever && falseforever)/如果真假同时存在就判断它为 satisfactible.   175.              cout<<"satisfactible."<<endl;   176.            else if(!trueforever)  177.              cout<<"falseforever."<<endl;  178.              else  179.              cout<<"trueforever. "<<endl;  180.              181.             182.  void Cys:recursion()  183.    184.       _recursion(_arr,0);  185.         186.         187.  Cys:Cys()  188.       189.            delete array;  190.              191.    192.   int main()  193.     194.         cout<<"-重言式判别-"<<endl;     195.         Cys cys;  196.         char c;  197.         cys.GetTautology();  198.         cout<<"计算机穷举请按't' or 用户赋值请按'n'"<<endl;  199.         cin>>c;  200.         if(c='t')  201.             cys.recursion();/穷举   202.            else  203.             cys.count();/赋值    204.         cys.Print();  205.          system("pause");  206.          return 0;  207.             

    注意事项

    本文(《数据结构c语言》重言式判定参考了别人的代码.doc)为本站会员(e****s)主动上传,淘文阁 - 分享文档赚钱的网站仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。 若此文所含内容侵犯了您的版权或隐私,请立即通知淘文阁 - 分享文档赚钱的网站(点击联系客服),我们立即给予删除!

    温馨提示:如果因为网速或其他原因下载失败请重新下载,重复下载不扣分。




    关于淘文阁 - 版权申诉 - 用户使用规则 - 积分规则 - 联系我们

    本站为文档C TO C交易模式,本站只提供存储空间、用户上传的文档直接被用户下载,本站只是中间服务平台,本站所有文档下载所得的收益归上传人(含作者)所有。本站仅对用户上传内容的表现方式做保护处理,对上载内容本身不做任何修改或编辑。若文档所含内容侵犯了您的版权或隐私,请立即通知淘文阁网,我们立即给予删除!客服QQ:136780468 微信:18945177775 电话:18904686070

    工信部备案号:黑ICP备15003705号 © 2020-2023 www.taowenge.com 淘文阁 

    收起
    展开