NJUPT南邮 | 离散数学_实验一

该博客介绍了如何使用真值表法编程求解含n个变元的合式公式的主析取范式和主合取范式。实验内容包括列出合式公式的真值表,并给出相应的主析取和主合取范式。实验代码未在摘要中提供。
摘要由CSDN通过智能技术生成

利用真值表法求取主析取范式以及主合取范式

  1. 内容:
    编程实现用真值表法求取含n个变元的合式公式所对应的主析取范式和主合取范式。
    要求:
    能够列出合式公式的真值表并给出相应主析取和主合取范式。

  2. 实验代码:

import jdk.swing.interop.SwingInterOpUtils;

import java.util.*;
import java.util.regex.Pattern;

public class Truetable {
   
    private static HashMap<Character,Boolean> map = new HashMap<>();//用键值对存放命题的真假
    private static List<Character> Alpha = new ArrayList<>();//命题字符的列表
    private static int alphaSize = 0;
    private static String infixSentence; //中缀表达式
    private static char[] suffixSentence = new char[100];//后缀表达式
    private static Boolean res;
    private static List<Boolean[]> trueList = new ArrayList<>(); //真值序列
    private static List<Boolean[]> falseList = new ArrayList<>();//假值序列

    public static void main(String[] args) {
   
        init();
        Scanner scanner = new Scanner(System.in);
        String inputAlpha;
        System.out.println("请输入命题个数");
        alphaSize = scanner.nextInt();
        System.out.println("请输入合式公式(英文输入):析取:“|” 合取:“&”  非:“!”  单条件运算符:“->” 双条件运算:“<>”");
        do {
   
            scanner.nextLine();
            inputAlpha = scanner.nextLine();
            scanner.close();
        } while (!Pattern.matches("^[A-Za-z-><!|&()]+$", inputAlpha));//判断是是否符合输入要求
        StringBuilder sb = new StringBuilder(inputAlpha);
        infixSentence = standardExpression(inputAlpha);
        infixToSuffix(infixSentence);//调用中缀转换为后缀函数
        for (int i = 0; i < Alpha.size(); i++) {
   
            System.out.print(Alpha.get(i) + "\t");
        }
        System.out.println(inputAlpha);
        printTrueTable(0);//调用打印真值表函数
        printAns();//打印结果
    }

    private static void printAns() {
   
        disjunctiveForm();//主析取范式
        conjunctiveForm();//主合取范式
    }


    private static void conjunctiveForm() {
   
        int i = 0, j = 0;
        int k;
        String ans = "";

        for (Boolean[] falsearray : falseList) {
   
            StringBuilder stringBuilder = new StringBuilder(ans);
            stringBuilder.append
  • 0
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值