Created
September 22, 2014 10:25
-
-
Save AliZafar120/e98eb8e412553c8e0c8e to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
#include <iostream> | |
#include <cstdio> | |
#include <string> | |
#include <vector> | |
#include<conio.h> | |
#include <sstream> | |
using namespace std; | |
struct content | |
{ | |
vector<char> store; | |
}; | |
int main(void) | |
{ | |
vector<char> fin,bgin,last,no,temps,finas; | |
char start,temp; | |
cout << "Enter the 1st Step" <<endl; | |
cin >>start; | |
temps.push_back(start); | |
cout << "Enter the final(accepted) steps\npress q to end entering" <<endl; | |
for(;;) | |
{ | |
cin>>temp; | |
if(temp=='q') break; | |
fin.push_back(temp); | |
} | |
cout <<"Enter the transitions with spaces" <<endl; | |
string hudai; | |
getline(cin, hudai); | |
char sym[3]={'{',',','}'}; | |
bool paisi= false; | |
for(;;) | |
{ | |
char sym[3]={'{',',','}'}; | |
bool paisi= false; | |
string givenstring; | |
getline(cin, givenstring); | |
for(int i=0;i<3;i++) | |
{ | |
for(int j=0; j<givenstring.length(); j++) | |
{ | |
if(sym[i]==givenstring[j]){ | |
givenstring[j] = ' '; | |
paisi=true; | |
} | |
} | |
} | |
istringstream iss(givenstring); | |
if(!paisi) | |
{ | |
iss>>temp; | |
if(temp!='q') bgin.push_back(temp); | |
else if(temp=='q') break; | |
iss>>temp; | |
no.push_back(temp); | |
iss>>temp; | |
last.push_back(temp); | |
} | |
else if(paisi) | |
{ | |
iss>>temp; | |
bgin.push_back(temp); | |
iss>>temp; | |
no.push_back(temp); | |
iss>>temp; | |
last.push_back(temp); | |
while(iss>>temp) | |
{ | |
bgin.push_back(bgin.back()); | |
no.push_back(no.back()); | |
last.push_back(temp); | |
} | |
} | |
// cout<<"bgin.size"<<bgin.size()<<endl | |
} | |
//total signs in automata | |
vector<char> tempsighsn; | |
for(int i=0;i<no.size();i++) | |
{ | |
bool flag =true; | |
for(int j=0;j<tempsighsn.size();j++) | |
{ | |
if(tempsighsn[j]==no[i]) flag=false; | |
} | |
if(flag) tempsighsn.push_back(no[i]); | |
} | |
cout <<"The signs are :"; | |
for(int i=0;i<tempsighsn.size();i++)cout<<tempsighsn[i]<<" "; | |
cout<<endl; | |
int total=0; | |
content steps[no.size()]; | |
steps[total].store.push_back(temps[0]); | |
total=1; | |
for(int i=0;i< tempsighsn.size(); i++)//jotogula sign ase | |
{ | |
for(int b=0;b<total ;b++) | |
{ | |
for(int g=0;g<steps[b].store.size();g++)//store er steps e joto element ta | |
{ | |
// temp e dhukay | |
temps.push_back(steps[b].store[g]); | |
} | |
for(;;) | |
{ | |
for(int k=0;k<temps.size();k++) | |
{ | |
for(int j=0;j<bgin.size();j++) | |
{ | |
if (temps[k]==bgin[j] && tempsighsn[i]==no[j]) | |
{ | |
bool flag=true; | |
for(int t=0;t<finas.size();t++) {if(finas[t]==last[j]) flag= false;} | |
if(flag) finas.push_back(last[j]); | |
} | |
} | |
} | |
if(finas.empty()) | |
{ | |
temps.clear(); | |
finas.clear(); | |
break; | |
} | |
bool flag= true; | |
for(int i=0;i<total;i++) | |
{ | |
bool flagin=true; | |
for(int j=0;j<finas.size();j++) | |
{ | |
if(finas[j] != steps[i].store[j]) flagin=false; | |
} | |
if(flagin==true) { flag=false;break;} | |
} | |
if(flag) | |
{ | |
for(int i=0;i<finas.size();i++) | |
{ | |
steps[total].store.push_back(finas[i]); | |
} | |
total++; | |
} | |
else if(!flag) | |
{ | |
temps.clear(); | |
finas.clear(); | |
break; | |
} | |
temps.clear(); | |
for(int m=0;m<finas.size();m++) temps.push_back(finas[m]); | |
finas.clear(); | |
} | |
} | |
} | |
for(int i=0;i<total;i++) | |
{ | |
cout<<"step : "<<i<<"has "; | |
for(int j=0;j<steps[i].store.size();j++) | |
{cout<<steps[i].store[j]<<" ";} | |
cout<<endl; | |
} | |
//Nfa to dfa : | |
temps.clear(); | |
finas.clear(); | |
for(int i=0;i<total;i++) | |
{ | |
for(int j=0;j<tempsighsn.size();j++) | |
{ | |
//showing input dfa | |
cout<<"{"; | |
for(int k=0; k<steps[i].store.size();k++) | |
{ | |
if(k==steps[i].store.size()-1) cout<<steps[i].store[k]<<"}"; | |
else cout<<steps[i].store[k]<<","; | |
} | |
for(int k=0; k<steps[i].store.size();k++) | |
temps.push_back(steps[i].store[k]); | |
//a space | |
cout <<"\t\t"; | |
//showing sign | |
cout<<tempsighsn[j]; | |
//a space | |
cout <<"\t\t"; | |
//Showing output | |
for(int k=0;k<temps.size();k++) | |
{ | |
for(int n=0;n<bgin.size();n++) | |
{ | |
if (temps[k]==bgin[n] && tempsighsn[j]==no[n]) | |
{ | |
bool sim=false; | |
for(int s=0;s<finas.size();s++) if(finas[s]==last[n]) sim=true; | |
if(!sim) finas.push_back(last[n]); | |
} | |
} | |
} | |
cout<<"{"; | |
for(int m=0;m<finas.size();m++) | |
{ | |
if(m==finas.size()-1)cout<<finas[m]<<"}"; | |
else cout<<finas[m]<<","; | |
} | |
cout<<endl; | |
temps.clear(); | |
finas.clear(); | |
} | |
} | |
cout<< " Now Enter a operation "<<endl; | |
string inp,hudaii; | |
getline(cin,hudaii); | |
getline(cin,inp); | |
bool finalstep=false; | |
temps.clear(); | |
temps.push_back(start); | |
for(int i=0;i< inp.size(); i++) | |
{ | |
for(int k=0;k<temps.size();k++) | |
{ | |
for(int j=0;j<bgin.size();j++) | |
{ | |
if (temps[k]==bgin[j] && inp[i]==no[j]) | |
{ | |
finas.push_back(last[j]); | |
} | |
} | |
} | |
cout<<"From "; | |
for(int m=0;m<temps.size();m++) cout<<temps[m]<<" "; | |
cout<<"input "<<inp[i]<<" we go to "; | |
for(int m=0;m<finas.size();m++) cout<<finas[m]<<" "; | |
cout<<endl; | |
temps.clear(); | |
for(int m=0;m<finas.size();m++) temps.push_back(finas[m]); | |
if(i!=inp.length()-1) finas.clear(); | |
} | |
for(int j=0;j<fin.size();j++) | |
{ | |
for(int k=0;k<finas.size();k++) | |
{ | |
if(finas[k]==fin[j]) | |
{finalstep=true; | |
break; | |
} | |
} | |
} | |
if(finalstep==true) cout<<"Case Accepted"<<endl; | |
else cout<<"Case Not Accepted"<<endl; | |
} | |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment