离散数学(MFC实现真值表、最短路径)实验报告
合集下载
相关主题
- 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
- 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
- 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
//ON_WM_ACTIVATE()
//ON_CBN_SELCHANGE(IDC_COMBO_P, &CMFCApplication1Dlg::OnCbnSelchangeComboP)
ON_BN_CLICKED(IDC_RADIO1, &CMFCApplication1Dlg::OnBnClickedRadio1)
对真值P的值做出选择:OnSelChangeComboP()调用Acc1()
对真值Q的值做出选择:OnSelChangeComboQ()调用Acc1()
点击“计算按钮”:OnClickedButtonAcc()调用Acc2()
Acc2()算法大致如下:
(1)输入命题公式。
(2)在公式中寻找变元,添加变元至数组value,并输出真值表表头。
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//用于应用程序“关于”菜单项的CAboutDlg对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
//对话框数据
enum { IDD = IDD_ABOUTBOX };
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCApplication1Dlg::OnClickedButtonAcc()
//对话框数据
enum { IDD = IDD_MFCAPPLICATION1_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV支持
//实现
protected:
HICON m_hIcon;
//生成的消息映射函数
#include "m_Propos.h"
#include "atltypes.h"
// CMFCApplication1Dlg对话框
class CMFCApplication1Dlg : public CDialogEx
{
//构造
public:
CMFCApplication1Dlg(CWnd* pParent = NULL);//标准构造函数
离散数学
实验报告
班级:
姓名:
学号:
年月日
实验1
1.
理解命题逻辑相关运算,增强逻辑推理能力
2.
操作系统:Windows 7
开发环境:Visual Studio 2012
3.
(1)从键盘输入两个命题变元P和Q的真值,求他们的合取、析取、条件和双条件运算的真值。
(2)求任意一个给定命题公式的真值表,并根据真值表求主范式。
UpdateData(false);
}
void CMFCApplication1Dlg::Acc2()//功能2:计算命题公式的真值表,并根据真值表求主范式
{
UpdateData(true);
final_Value=_T("真值表\r\n");//最终要输出的文字
CString CStr=m_EditContent+_T("#");//命题公式,以#为结束标识符
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMFCApplication1Dlg对话框
(3)检查命题公式的正确性,不正确则以对话框提示用户并结束本算法,否则继续执行。
(4)初始化r=0
(5)为各个变元指派真值,指派的值由r对应的二进制数决定。即利用二进制数字转化为各变元的值。输出各个变元指派的值。
(6)根据变元指派的真值计算出命题公式的值存入truth[r]。
(7)根据命题公式的值决定将当前变元指派真值存入析合式的栈还是存入合析式的栈。
DDX_Text(pDX, IDC_EDIT, m_EditContent);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_ACC, &CMFCApplication1Dlg::OnClickedButtonAcc)
4.
程序
在MFCApp.rc中创建IDD_MFCAPP_DIALOG对话框,绘制及各控件ID如图11所示。
图11对话框绘制
在MFCAppDlg类下,创建如下函数:
点击选择项目一:OnBnClickedRadio1()更新框体内容至功能1
点击选择项目二:OnBnClickedRadio2()更新框体内容至功能2
}
else
{
UpdateData(false);
return;
}
}
else
{
UpdateData(false);
return;
}
final_Value=_T("");
CString tempC;
tempC.Format(_T("P合取Q为%c;\r\n"),v1);
final_Value+=tempC;
{
v1=v4=v3='F';
v2='T';
}
else
{
UpdateData(false);
return;
}
}
else if(p_Value=="F")
{
if(q_Value=="T")
{
v1=v4='F';
v2=v3='T';
}
else if(q_Value=="F")
{
v1=v2='F';
v3=v4='T';
{
Acc2();
}
void CMFCApplication1Dlg::Acc1()//功能1:计算命题变元的真值
{
UpdateData(true);
char v1,v2,v3,v4;
if(p_Value=="T")
{
if(q_Value=="T")
{
v1=v2=v3=v4='T';
}
else if(q_Value=="F")
};
// MFCApplication1Dlg.cpp :实现文件
//
#includБайду номын сангаас "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"
#include <cmath>
CString final_Value;
//afx_msg void OnCbnSelchangeComboP();
int m_Radio;
afx_msg void OnBnClickedRadio1();
//CEdit m_EditBox;
//CString m_EditContent;
afx_msg void OnBnClickedRadio2();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV支持
//实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
tempC.Format(_T("P析取Q为%c;\r\n"),v2);
final_Value+=tempC;
tempC.Format(_T("P条件Q为%c;\r\n"),v3);
final_Value+=tempC;
tempC.Format(_T("P双条件Q为%c;\r\n"),v4);
final_Value+=tempC;
ON_BN_CLICKED(IDC_RADIO2, &CMFCApplication1Dlg::OnBnClickedRadio2)
ON_CBN_SELCHANGE(IDC_COMBO_P, &CMFCApplication1Dlg::OnSelchangeComboP)
ON_CBN_SELCHANGE(IDC_COMBO_Q, &CMFCApplication1Dlg::OnSelchangeComboQ)
(8)r对应的二进制进行累加,r=r+1,若r<pow(2,count),执行(5),否则执行(9)
(9)根据栈内内容输出析合范式和合析范式。
程序代码
此处给出主窗体的头文件及实现文件。其余具体代码详见源文件。
// MFCApplication1Dlg.h :头文件
//
#pragma once
#include "afxwin.h"
ON_WM_SIZE()
END_MESSAGE_MAP()
BOOL CMFCApplication1Dlg::OnInitDialog(){...}
void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam){...}
void CMFCApplication1Dlg::OnPaint(){...}
DDX_Radio(pDX, IDC_RADIO1, m_Radio);
DDV_MinMaxInt(pDX, m_Radio, -1, 1);
// DDX_Control(pDX, IDC_EDIT, m_EditBox);
// DDX_Text(pDX, IDC_EDIT, m_EditContent);
DDX_CBString(pDX, IDC_COMBO_P, p_Value);
DDV_MaxChars(pDX, p_Value, 1);
DDX_CBString(pDX, IDC_COMBO_Q, q_Value);
DDV_MaxChars(pDX, q_Value, 1);
DDX_Text(pDX, IDC_EDIT_RESULT, final_Value);
CString tempC=_T("");
int count=0;//变元的数目
bool Existed=false;//变元是不是已经存在了,防止重复添加
char value[30];//变元数组
public:
afx_msg void OnCbnSelchangeCombo1();
CString p_Value;
CString q_Value;
afx_msg void OnClickedButtonAcc();
//afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CMFCApplication1Dlg::IDD, pParent)
, p_Value(_T(""))
, q_Value(_T(""))
, final_Value(_T(""))
, m_Radio(-1)
, m_EditContent(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
//应用函数
protected:
void Acc1();
void Acc2();
bool check(CString str);
public:
CString m_EditContent;
afx_msg void OnSelchangeComboP();
afx_msg void OnSelchangeComboQ();
//ON_CBN_SELCHANGE(IDC_COMBO_P, &CMFCApplication1Dlg::OnCbnSelchangeComboP)
ON_BN_CLICKED(IDC_RADIO1, &CMFCApplication1Dlg::OnBnClickedRadio1)
对真值P的值做出选择:OnSelChangeComboP()调用Acc1()
对真值Q的值做出选择:OnSelChangeComboQ()调用Acc1()
点击“计算按钮”:OnClickedButtonAcc()调用Acc2()
Acc2()算法大致如下:
(1)输入命题公式。
(2)在公式中寻找变元,添加变元至数组value,并输出真值表表头。
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
//用于应用程序“关于”菜单项的CAboutDlg对话框
class CAboutDlg : public CDialogEx
{
public:
CAboutDlg();
//对话框数据
enum { IDD = IDD_ABOUTBOX };
//当用户拖动最小化窗口时系统调用此函数取得光标
//显示。
HCURSOR CMFCApplication1Dlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CMFCApplication1Dlg::OnClickedButtonAcc()
//对话框数据
enum { IDD = IDD_MFCAPPLICATION1_DIALOG };
protected:
virtual void DoDataExchange(CDataExchange* pDX);// DDX/DDV支持
//实现
protected:
HICON m_hIcon;
//生成的消息映射函数
#include "m_Propos.h"
#include "atltypes.h"
// CMFCApplication1Dlg对话框
class CMFCApplication1Dlg : public CDialogEx
{
//构造
public:
CMFCApplication1Dlg(CWnd* pParent = NULL);//标准构造函数
离散数学
实验报告
班级:
姓名:
学号:
年月日
实验1
1.
理解命题逻辑相关运算,增强逻辑推理能力
2.
操作系统:Windows 7
开发环境:Visual Studio 2012
3.
(1)从键盘输入两个命题变元P和Q的真值,求他们的合取、析取、条件和双条件运算的真值。
(2)求任意一个给定命题公式的真值表,并根据真值表求主范式。
UpdateData(false);
}
void CMFCApplication1Dlg::Acc2()//功能2:计算命题公式的真值表,并根据真值表求主范式
{
UpdateData(true);
final_Value=_T("真值表\r\n");//最终要输出的文字
CString CStr=m_EditContent+_T("#");//命题公式,以#为结束标识符
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialogEx)
END_MESSAGE_MAP()
// CMFCApplication1Dlg对话框
(3)检查命题公式的正确性,不正确则以对话框提示用户并结束本算法,否则继续执行。
(4)初始化r=0
(5)为各个变元指派真值,指派的值由r对应的二进制数决定。即利用二进制数字转化为各变元的值。输出各个变元指派的值。
(6)根据变元指派的真值计算出命题公式的值存入truth[r]。
(7)根据命题公式的值决定将当前变元指派真值存入析合式的栈还是存入合析式的栈。
DDX_Text(pDX, IDC_EDIT, m_EditContent);
}
BEGIN_MESSAGE_MAP(CMFCApplication1Dlg, CDialogEx)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
ON_BN_CLICKED(IDC_BUTTON_ACC, &CMFCApplication1Dlg::OnClickedButtonAcc)
4.
程序
在MFCApp.rc中创建IDD_MFCAPP_DIALOG对话框,绘制及各控件ID如图11所示。
图11对话框绘制
在MFCAppDlg类下,创建如下函数:
点击选择项目一:OnBnClickedRadio1()更新框体内容至功能1
点击选择项目二:OnBnClickedRadio2()更新框体内容至功能2
}
else
{
UpdateData(false);
return;
}
}
else
{
UpdateData(false);
return;
}
final_Value=_T("");
CString tempC;
tempC.Format(_T("P合取Q为%c;\r\n"),v1);
final_Value+=tempC;
{
v1=v4=v3='F';
v2='T';
}
else
{
UpdateData(false);
return;
}
}
else if(p_Value=="F")
{
if(q_Value=="T")
{
v1=v4='F';
v2=v3='T';
}
else if(q_Value=="F")
{
v1=v2='F';
v3=v4='T';
{
Acc2();
}
void CMFCApplication1Dlg::Acc1()//功能1:计算命题变元的真值
{
UpdateData(true);
char v1,v2,v3,v4;
if(p_Value=="T")
{
if(q_Value=="T")
{
v1=v2=v3=v4='T';
}
else if(q_Value=="F")
};
// MFCApplication1Dlg.cpp :实现文件
//
#includБайду номын сангаас "stdafx.h"
#include "MFCApplication1.h"
#include "MFCApplication1Dlg.h"
#include "afxdialogex.h"
#include <cmath>
CString final_Value;
//afx_msg void OnCbnSelchangeComboP();
int m_Radio;
afx_msg void OnBnClickedRadio1();
//CEdit m_EditBox;
//CString m_EditContent;
afx_msg void OnBnClickedRadio2();
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV支持
//实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialogEx(CAboutDlg::IDD)
virtual BOOL OnInitDialog();
afx_msg void OnSysCommand(UINT nID, LPARAM lParam);
afx_msg void OnPaint();
afx_msg HCURSOR OnQueryDragIcon();
DECLARE_MESSAGE_MAP()
tempC.Format(_T("P析取Q为%c;\r\n"),v2);
final_Value+=tempC;
tempC.Format(_T("P条件Q为%c;\r\n"),v3);
final_Value+=tempC;
tempC.Format(_T("P双条件Q为%c;\r\n"),v4);
final_Value+=tempC;
ON_BN_CLICKED(IDC_RADIO2, &CMFCApplication1Dlg::OnBnClickedRadio2)
ON_CBN_SELCHANGE(IDC_COMBO_P, &CMFCApplication1Dlg::OnSelchangeComboP)
ON_CBN_SELCHANGE(IDC_COMBO_Q, &CMFCApplication1Dlg::OnSelchangeComboQ)
(8)r对应的二进制进行累加,r=r+1,若r<pow(2,count),执行(5),否则执行(9)
(9)根据栈内内容输出析合范式和合析范式。
程序代码
此处给出主窗体的头文件及实现文件。其余具体代码详见源文件。
// MFCApplication1Dlg.h :头文件
//
#pragma once
#include "afxwin.h"
ON_WM_SIZE()
END_MESSAGE_MAP()
BOOL CMFCApplication1Dlg::OnInitDialog(){...}
void CMFCApplication1Dlg::OnSysCommand(UINT nID, LPARAM lParam){...}
void CMFCApplication1Dlg::OnPaint(){...}
DDX_Radio(pDX, IDC_RADIO1, m_Radio);
DDV_MinMaxInt(pDX, m_Radio, -1, 1);
// DDX_Control(pDX, IDC_EDIT, m_EditBox);
// DDX_Text(pDX, IDC_EDIT, m_EditContent);
DDX_CBString(pDX, IDC_COMBO_P, p_Value);
DDV_MaxChars(pDX, p_Value, 1);
DDX_CBString(pDX, IDC_COMBO_Q, q_Value);
DDV_MaxChars(pDX, q_Value, 1);
DDX_Text(pDX, IDC_EDIT_RESULT, final_Value);
CString tempC=_T("");
int count=0;//变元的数目
bool Existed=false;//变元是不是已经存在了,防止重复添加
char value[30];//变元数组
public:
afx_msg void OnCbnSelchangeCombo1();
CString p_Value;
CString q_Value;
afx_msg void OnClickedButtonAcc();
//afx_msg void OnActivate(UINT nState, CWnd* pWndOther, BOOL bMinimized);
CMFCApplication1Dlg::CMFCApplication1Dlg(CWnd* pParent /*=NULL*/)
: CDialogEx(CMFCApplication1Dlg::IDD, pParent)
, p_Value(_T(""))
, q_Value(_T(""))
, final_Value(_T(""))
, m_Radio(-1)
, m_EditContent(_T(""))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CMFCApplication1Dlg::DoDataExchange(CDataExchange* pDX)
{
CDialogEx::DoDataExchange(pDX);
//应用函数
protected:
void Acc1();
void Acc2();
bool check(CString str);
public:
CString m_EditContent;
afx_msg void OnSelchangeComboP();
afx_msg void OnSelchangeComboQ();