Добавил:
Upload Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз: Предмет: Файл:
Lab_3 2_сем ПРИМЕР.doc
Скачиваний:
0
Добавлен:
01.03.2025
Размер:
574.46 Кб
Скачать

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';

}

11

Соседние файлы в предмете [НЕСОРТИРОВАННОЕ]