📄 conseqdlg.cpp
字号:
// conseqDlg.cpp : 实现文件
//
#include "stdafx.h"
#include "conseq.h"
#include "conseqDlg.h"
#include"string.h"
#include"string"
#include <string>
#include <list>
#include <algorithm>
using namespace std;
#ifdef _DEBUG
#define new DEBUG_NEW
#endif
// 用于应用程序“关于”菜单项的 CAboutDlg 对话框
class CAboutDlg : public CDialog
{
public:
CAboutDlg();
// 对话框数据
enum { IDD = IDD_ABOUTBOX };
protected:
virtual void DoDataExchange(CDataExchange* pDX); // DDX/DDV 支持
// 实现
protected:
DECLARE_MESSAGE_MAP()
};
CAboutDlg::CAboutDlg() : CDialog(CAboutDlg::IDD)
{
}
void CAboutDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
}
BEGIN_MESSAGE_MAP(CAboutDlg, CDialog)
END_MESSAGE_MAP()
// CconseqDlg 对话框
CconseqDlg::CconseqDlg(CWnd* pParent /*=NULL*/)
: CDialog(CconseqDlg::IDD, pParent)
, input(_T(""))
, ttest(_T("(pvs>qvr)>(~q>~pvp)"))
{
m_hIcon = AfxGetApp()->LoadIcon(IDR_MAINFRAME);
}
void CconseqDlg::DoDataExchange(CDataExchange* pDX)
{
CDialog::DoDataExchange(pDX);
DDX_Text(pDX, IDC_INPUT, input);
DDX_Text(pDX, IDC_TE, ttest);
DDX_Control(pDX, IDC_OUTPUT, m_lListTest);
}
BEGIN_MESSAGE_MAP(CconseqDlg, CDialog)
ON_WM_SYSCOMMAND()
ON_WM_PAINT()
ON_WM_QUERYDRAGICON()
//}}AFX_MSG_MAP
ON_BN_CLICKED(IDC_OR, &CconseqDlg::OnBnClickedOr)
ON_BN_CLICKED(IDC_NOT, &CconseqDlg::OnBnClickedNot)
ON_BN_CLICKED(IDC_KONG, &CconseqDlg::OnBnClickedKong)
ON_BN_CLICKED(IDC_EXE, &CconseqDlg::OnBnClickedExe)
ON_BN_CLICKED(IDC_RE, &CconseqDlg::OnBnClickedRe)
ON_BN_CLICKED(IDC_Y, &CconseqDlg::OnBnClickedY)
ON_BN_CLICKED(IDC_L, &CconseqDlg::OnBnClickedL)
ON_BN_CLICKED(IDC_R, &CconseqDlg::OnBnClickedR)
END_MESSAGE_MAP()
// CconseqDlg 消息处理程序
BOOL CconseqDlg::OnInitDialog()
{
CDialog::OnInitDialog();
// 将“关于...”菜单项添加到系统菜单中。
// IDM_ABOUTBOX 必须在系统命令范围内。
ASSERT((IDM_ABOUTBOX & 0xFFF0) == IDM_ABOUTBOX);
ASSERT(IDM_ABOUTBOX < 0xF000);
CMenu* pSysMenu = GetSystemMenu(FALSE);
if (pSysMenu != NULL)
{
CString strAboutMenu;
strAboutMenu.LoadString(IDS_ABOUTBOX);
if (!strAboutMenu.IsEmpty())
{
pSysMenu->AppendMenu(MF_SEPARATOR);
pSysMenu->AppendMenu(MF_STRING, IDM_ABOUTBOX, strAboutMenu);
}
}
// 设置此对话框的图标。当应用程序主窗口不是对话框时,框架将自动
// 执行此操作
SetIcon(m_hIcon, TRUE); // 设置大图标
SetIcon(m_hIcon, FALSE); // 设置小图标
// TODO: 在此添加额外的初始化代码
num=0;
step=1;
memset(test,0,sizeof(test));
memset(statu,0,sizeof(statu));
head = (link *)malloc(sizeof(link));
head->next = NULL;
head->pre = NULL;
head->data='+';
plink=head;
//mt=L"(pvs>qvr)>(~q>~pvp)";
return TRUE; // 除非将焦点设置到控件,否则返回 TRUE
}
void CconseqDlg::OnSysCommand(UINT nID, LPARAM lParam)
{
if ((nID & 0xFFF0) == IDM_ABOUTBOX)
{
CAboutDlg dlgAbout;
dlgAbout.DoModal();
}
else
{
CDialog::OnSysCommand(nID, lParam);
}
}
// 如果向对话框添加最小化按钮,则需要下面的代码
// 来绘制该图标。对于使用文档/视图模型的 MFC 应用程序,
// 这将由框架自动完成。
void CconseqDlg::OnPaint()
{
CPaintDC dc(this); // 用于绘制的设备上下文
}
//当用户拖动最小化窗口时系统调用此函数取得光标显示。
//
HCURSOR CconseqDlg::OnQueryDragIcon()
{
return static_cast<HCURSOR>(m_hIcon);
}
void CconseqDlg::OnBnClickedOr()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItemTextW(IDC_TE,mt);
UpdateData(true);
mt+=L"v";
SetDlgItemTextW(IDC_TE,mt);
//GetFocus(IDC_INPUT);
/// (CEdit*)GetDlgItem(IDC_INPUT)->SetFocus();
}
void CconseqDlg::OnBnClickedNot()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItemTextW(IDC_TE,mt);
UpdateData(true);
mt+=L"~";
SetDlgItemTextW(IDC_TE,mt);
}
void CconseqDlg::OnBnClickedKong()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItemTextW(IDC_TE,mt);
UpdateData(true);
mt+=L",";
SetDlgItemTextW(IDC_TE,mt);
}
void CconseqDlg::OnBnClickedY()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItemTextW(IDC_TE,mt);
UpdateData(true);
mt+=L">";
SetDlgItemTextW(IDC_TE,mt);
}
void CconseqDlg::OnBnClickedL()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItemTextW(IDC_TE,mt);
UpdateData(true);
mt+=L"(";
SetDlgItemTextW(IDC_TE,mt);
}
void CconseqDlg::OnBnClickedR()
{
// TODO: 在此添加控件通知处理程序代码
GetDlgItemTextW(IDC_TE,mt);
UpdateData(true);
mt+=L")";
SetDlgItemTextW(IDC_TE,mt);
}
void CconseqDlg::OnBnClickedExe()
{
// TODO: 在此添加控件通知处理程序代码
toson();
yunhan();
fei();
hequ();
show();
exe();
//init();
}
void CconseqDlg::show()
{
wchar_t w[200];
GetDlgItemText(IDC_INPUT,w,200);
char temp[200];
CString c1(w);
int i=::WideCharToMultiByte (CP_ACP,WC_DEFAULTCHAR|WC_COMPOSITECHECK ,w,c1.GetLength (),temp,200,0,0);
temp[i]='\0';
int j=0;
i=0;
while( temp[i]!='\0' )
{
if( temp[i]=='~' || temp[i]=='|' ) {i++;}
else if(temp[i-1]=='~')
{ statu[num][j]=temp[i]-32;
test[num][j++]=-int(temp[i++]);
}
else if( temp[i-1]!='~'&& temp[i]!=',')
{ statu[num][j]=temp[i];
test[num][j++]=(int)temp[i++];
}
else if( temp[i]==',')
{
statu[num][j]='\0';
num++;
j=0;
i++;
}
}
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
// pLB->AddString(CString(temp));
for( i=0;i<=num;i++)
{ CString add=L"";
add.Format(L"%d、 ",step++);
j=0;
if( test[i][j]<0)
{
add+=L"~";
add+=(CString)(char)(-test[i][j]);
}
else
{
add+=(CString)(char)(test[i][j]);
}
j=1;
while( test[i][j]!=0)
{
add+=L"∨";
if( test[i][j]<0)
{
add+=L"~";
add+=(CString)(char)(-test[i][j++]);
}
else
{
add+=(CString)(char)(test[i][j++]);
}
}
m_lListTest.AddString(add);
}
}
void CconseqDlg::exe()
{
int i,j;
int count=num;
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
CString add=L"";
int news[100];
int flag=0;
for( i=0;i<count;i++)
{
for( j=i+1;j<=count;j++)
{
memset(news,0,sizeof(news));
if( !(test[i][0]+test[j][0]) && test[i][1]==0 && test[j][1]==0 )
{
add.Format(L"%d、 空 ( %d和%d归结 )",step++,i+1,j+1);
pLB->AddString(add);
pLB->AddString(L"故原命题成立");
pLB->AddString(L"");
flag=1;
init();
return;
}
else if( iscan(test[i],test[j],news) )
{
CString tmps=L"";
int lj=0;
if( test[num][lj]<0)
{
tmps+=L"~";
tmps+=(CString)(char)(-test[num][lj]);
}
else tmps+=(CString)(char)(test[num][lj]);
lj=1;
while( test[num][lj]!=0)
{
tmps+=L"∨";
if( test[num][lj]<0)
{
tmps+=L"~";
tmps+=(CString)(char)(-test[num][lj++]);
}
else tmps+=(CString)(char)(test[num][lj++]);
}
add.Format(L"%d、 %s ( %d和%d归结 )",step++,tmps,i+1,j+1);
pLB->AddString(add);
count=num;
// goto again;
}
}
}
if( !flag)
{
add=L"原命题不成立";
pLB->AddString(add);
pLB->AddString(L"");
init();
}
}
int CconseqDlg::find(int a[],int b)
{
int i;
for(i=0 ; a[i]!=0 ;i++ )
if( a[i]+b==0 )
return i;
return -1;
}
int CconseqDlg::iscan(int a[50],int b[50],int news[100])
{
int i=0,j=0;
char tmp[100];
memset(tmp,0,sizeof(tmp));
char tmp2[100];
memset(tmp2,0,sizeof(tmp2));
char tmp3[100];
memset(tmp3,0,sizeof(tmp3));
CListBox* pLB = (CListBox*)GetDlgItem(IDC_OUTPUT);
while(a[i]!=0)
{
j=find(b,a[i]);
if(j==-1)
{
i++; continue;
}
int k=0;
int s;
for( s=0;s<j;s++)
news[k++]=b[s];
for( s=j+1;b[s]!=0;s++)
news[k++]=b[s];
for( s=0;s<i;s++)
news[k++]=a[s];
for( s=i+1;a[s]!=0;s++)
news[k++]=a[s];
for(s=0;news[s]!=0;s++)
if( news[s]<0)
tmp[s]=char(-news[s]-32);
else
tmp[s]=char(news[s]);
tmp[s]='\0';
int si=0,sj;
for(si=0;si<s;si++)
for( sj=si+1;sj<s;sj++)
if( tmp[sj]==tmp[si] )
{
tmp[si]='1';
break;
}
sj=0;
for( si=0;si<s;si++)
if( tmp[si]!='1') tmp2[sj++]=tmp[si];
tmp2[sj]='\0';
int sb=sj;
int flag=0;
memset(tmp,0,sizeof(tmp));
strcpy_s(tmp,tmp2);
for( int hi=0;hi<sj;hi++)
for( int hj=hi+1;hj<sj;hj++)
if( tmp[hj]>tmp[hi] )
{
char sc=tmp[hi];
tmp[hi]=tmp[hj];
tmp[hj]=sc;
}
for( s=0;s<=num;s++)
{
memset(tmp3,0,sizeof(tmp3));
strcpy_s(tmp3,statu[s]);
sj=0;
while( tmp3[sj++]!='\0' );
for( int hi=0;hi<sj;hi++)
for( int hj=hi+1;hj<sj;hj++)
if( tmp3[hj]>tmp3[hi] )
{
char sc=tmp3[hi];
tmp3[hi]=tmp3[hj];
tmp3[hj]=sc;
}
if( !strcmp(tmp3,tmp) )
{
flag=1;
break;
}
}
if( !flag )
{
num++;
strcpy_s(statu[num],tmp2);
for(int vv=0;vv<10;vv++) test[num][vv]=0;
for( int lv=0;lv<sb;lv++)
if( statu[num][lv]<'a' ) test[num][lv]=-int(statu[num][lv])-32;
else test[num][lv]=int(statu[num][lv]);
return 1;
}
else { i++; continue;}
}
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -