
Void aAndB(char *Message);
//a|b=-_(a^b)
char* Sheffer(char *Message, char *a, char *b, char *c, char *d);
//__a=a
char* TwoNot(char *Message, char *a, char *b, char *c, char *d);
//_(a*b)=_a^_b
//_(a^b)=_a*_b
char* DeMorganRule(char *Message, char *a, char *b, char *c, char *d);
//a^(b*c)=(a^b)*(a^c)
//a*(b^c)=(a*b)^(a*c)
char* Distribution(char *Message, char *a, char *b, char *c, char *d);
//a*(b^a)=a
//a^(b*a)=a
char* Absorbing(char *Message, char *a, char *b, char *c, char *d);
//a*_a=1
//a*a=a
char* ConstProperty(char *Message, char *a, char *b, char *c, char *d);
protected:
Void FullConst(char *Message, int Num1, int Num2, char *c);
//возвращает значение истина,
//если аргументы разные
bool Different(char a, char b);
};
#endif // !defined(AFX_CORRELATION_H__674A782D_AC8F_40F5_AE2E_58CB529F21BC__INCLUDED_)
PutInOut.h: interface for the PutInOut class.
//////////////////////////////////////////////////////////////////////
#if !defined(AFX_PUTINOUT_H__45248660_3DC7_4E92_A07B_715D285E335D__INCLUDED_)
#define AFX_PUTINOUT_H__45248660_3DC7_4E92_A07B_715D285E335D__INCLUDED_
#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000
class PutInOut :public Correlation
{
public:
char ReturnMessage[100];
void out(char *Message);
void put();
char Message[100];
};
#endif // !defined(AFX_PUTINOUT_H__45248660_3DC7_4E92_A07B_715D285E335D__INCLUDED_)
symbol.cpp : Defines the entry point for the console application.
#include "stdafx.h"
#include "Correlation.h"
#include "ctype.h"
#include "string.h"
#include "iostream.h"
#include "PutInOut.h"
/////////////////////////////////////////
int main(int argc, char* argv[])
{
int a;
PutInOut p;
p.put();
cin>>a;
return 0;
}
//////////////////////////////////////////
char *Correlation::Sheffer(char *Message, char *a, char *b, char *c, char *d)
{
if(Different(*a,*b)==true&&Message[4]!=')')
{
strcpy(Message,"_( ^ )");
Message[2]=*a;
Message[4]=*b;
}
if(Different(*a,*b)==false&&Message[4]!=')')
{
strcpy(Message,"_ ");
Message[1]=*a;
}
if( (Different(*a,*b)==true&&Message[10]!=')') ||
(Different(*a,*b)==false&&Different(*c,*b)==false&&
Different(*a,*c)==false&&Message[4]==')')
)
{
strcpy(Message,"_(_( ^ ))*_ ");
Message[4]=*a;
Message[6]=*b;
Message[11]=*c;
}
if(Different(*a,*b)==true&&Message[10]==')')
{
strcpy(Message,"_(_( ^ )^_( ^ ))");
Message[4]=*a;
Message[6]=*b;
Message[11]=*c;
Message[13]=*d;
}
cout<<Message;
cout<<" - rule of Sheffer was successfully applied...\n";
return Message;
}
////////////////////////////////////////
char* Correlation::TwoNot(char *Message, char *a, char *b, char *c, char *d)
{
char NewMessage[100];
MasNul(NewMessage);
strcpy(NewMessage,Message);
if(Message[0]=='_'&&Message[1]=='('&&Message[2])
{
MasNul(NewMessage);
NewMessage[0]='(';
for(int i=3,j=1;i<strlen(Message);i++,j++)
NewMessage[j]=Message[i];
cout<<NewMessage<<" - rule of double denial was successfully applied.\n";
}
if(Message[0]=='('&&Message[1]=='_'&&Message[2]=='_')
{
MasNul(NewMessage);
strcpy(NewMessage,"((a^b)*(c^d))");
NewMessage[2]=*a;
NewMessage[4]=*b;
NewMessage[8]=*c;
NewMessage[10]=*d;
cout<<NewMessage<<" - rule of double denial was successfully applied.\n";
}
strcpy(Message,NewMessage);
return Message;
}
///////////////////////////////////////
char* Correlation::DeMorganRule(char *Message, char *a, char *b, char *c, char *d)
{
if(Message[0]=='_'&&Message[1]=='('&&Message[3]=='^')
{
strcpy(Message,"_ *_ ");
Message[1]=*a;
Message[4]=*b;
}
if(Message[0]=='_'&&Message[1]=='('&&Message[3]=='*')
{
strcpy(Message,"_ ^_ ");
Message[1]=*a;
Message[4]=*b;
}
if(Message[0]=='_'&&Message[1]=='('&&Message[2]=='_'&&
Message[8]=='^'&&Message[9]=='_'&&Message[10]=='(')
{
strcpy(Message,"(__(a^b)*__(c^d))");
Message[4]=*a;
Message[6]=*b;
Message[12]=*c;
Message[14]=*d;
}
cout<<Message;
cout<<" - rule of De Morgan was successfully applied...\n";
return Message;
}
///////////////////////////////////////
char* Correlation::Distribution(char *Message, char *a, char *b, char *c, char *d)
{
if(Message[0]=='('&&Message[3]=='^'&&Message[5]==')'
&&Message[7]=='*'&&Message[8]=='_')
{
strcpy(Message, "(_ * )^(_ * )");
Message[2]=*c;
Message[4]=*a;
Message[9]=*c;
Message[11]=*b;
}
cout<<Message;
cout<<" - rule of distribution was successfully applied...\n";
return Message;
}
///////////////////////////////////////
char* Correlation::Absorbing(char *Message, char *a, char *b, char *c, char *d)
{
if(Message[0]=='('&&Message[1]=='('&&Message[7]=='('
&&Message[11]==')'&&Message[12]==')'&&
Different(*a,*c)==false&&Different(*a,*d)==false)
{
strcpy(Message, "a");
Message[0]=*a;
cout<<Message;
cout<<" - rule of absorbing was successfully applied...\n";
}
if(Message[0]=='('&&Message[1]=='('&&Message[7]=='('
&&Message[11]==')'&&Message[12]==')'&&
Different(*b,*c)==false&&Different(*b,*d)==false)
{
strcpy(Message, "a");
Message[0]=*b;
cout<<Message;
cout<<" - rule of absorbing was successfully applied...\n";
}
return Message;
}
//////////////////////////////////////
bool Correlation::Different(char a, char b)
{
if(toascii(a)!=toascii(b))
return true;
else return false;
}
/////////////////////////////////////
void PutInOut::put()
{
cout<<"Please write your expression.\n";
cin>>Message;
cout<<"...\n";
strcpy(ReturnMessage,Do(Message));
out(ReturnMessage);
}
//////////////////////////////////////
void PutInOut::out(char *Message)
{
cout<<"\nOutput expression.\n";
cout<<Message;
cout<<"\n\n";
}
///////////////////////////////////
char* Correlation::Do(char* Message)
{
AAndB(Message);
Message=Sheffer(Message,&a,&b,&c,&d);
Message=DeMorganRule(Message,&a,&b,&c,&d);
Message=TwoNot(Message,&a,&b,&c,&d);
Message=Distribution(Message,&a,&b,&c,&d);
Message=ConstProperty(Message,&a,&b,&c,&d);
Message=Absorbing(Message,&a,&b,&c,&d);
return Message;
}
///////////////////////////////////
void Correlation::AAndB(char *Message)
{
FullConst(Message,0,1, &a);
FullConst(Message,2,3, &b);
FullConst(Message,6,7, &c);
FullConst(Message,9,9, &d);
}
/////////////////////////////////////////////
char* Correlation::MasNul(char *Message)
{
for(int i=0;i<100;i++)
Message[i]=NULL;
return Message;
}
////////////////////////////////////////////
char* Correlation::ConstProperty(char *Message, char *a, char *b, char *c, char *d)
{
char NewMessage[100];
MasNul(NewMessage);
strcpy(NewMessage,Message);
if(Message[0]=='('&&Message[1]=='_'&&Message[3]=='*'
&&Message[5]==')'&&Message[6]=='^'&&Different(*a,*c)==false)
{
MasNul(NewMessage);
for(int i=8,j=0;i<(strlen(Message)-1);i++,j++)
NewMessage[j]=Message[i];
cout<<NewMessage<<" - rule of constant property was successfully applied...\n";
}
if(Message[7]=='('&&Message[8]=='_'&&Message[10]=='*'
&&Message[12]==')'&&Different(*b,*c)==false)
{
MasNul(NewMessage);
for(int i=1,j=0;i<5;i++,j++)
NewMessage[j]=Message[i];
cout<<NewMessage<<" - rule of constant property was successfully applied...\n";
}
strcpy(Message,NewMessage);
return Message;
}
/////////////////////////////////////////////
void Correlation::FullConst(char *Message, int Num1, int Num2, char *C)
{
if(Message[Num1]=='a'||Message[Num2]=='a')
*C='a';
if(Message[Num1]=='b'||Message[Num2]=='b')
*C='b';
if(Message[Num1]=='c'||Message[Num2]=='c')
*C='c';
if(Message[Num1]=='d'||Message[Num2]=='d')
*C='d';
}