Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- //Ese 2
- #include<iostream>
- #include "conio.h"
- using namespace std;
- class MT
- {
- int n_Stati;
- int n_Stati_F;
- int n_Caratteri;
- int testina;
- int pos_Stato;
- // char* Sigma;
- char Sigma[5]{'a','b','x','z','@'};
- // char* Stati;
- char Stati[10]{'q','w','e','r','t','y','u','i','o','P'};
- // bool* Stati_F;
- bool Stati_F[10]{0,0,0,0,0,0,0,0,0,1};
- string Stringa;
- // string** DeltaT;
- string DeltaT[10][5]{{"wad","-","Pxi","-","-"}, //q
- {"wad","ebs","wxd","-","i@s"}, //w
- {"rxd","wxd","exs","-","-"}, //e
- {"-","tbd","rxd","-","-"}, //r
- {"yas","tbd","-","tzd","-"}, //t
- {"-","uzd","-","yzs","-"}, //y
- {"wad","ubd","-","uzd","-"}, //u
- {"oxs","-","ixs","-","-"}, //i
- {"oas","obs","oxs","ozs","q@d"},//o
- {"-","-","-","-","-"}}; //p
- bool fine;
- public:
- MT(int _n_Stati,int _n_Caratteri,string _Stringa);
- void SetMT();
- void SetDeltaT();
- void Computa();
- string Delta(int stato,int carattere);
- };
- string MT :: Delta(int stato, int carattere)
- {
- return DeltaT[stato][carattere];
- }
- void MT :: Computa()
- {
- string box;
- char ca;
- char stat;
- int pos_carattere;
- while(fine==false)
- {
- for(int i =0 ; i< n_Caratteri; i++){if(Stringa[testina]==Sigma[i]){pos_carattere=i;}}
- box=Delta(pos_Stato,pos_carattere);
- if(box=="-"){cout<<"Errore non esiste nessuna configurazione per Delta("<<Stati[pos_Stato]<<Sigma[pos_carattere]<<") ! "<<endl;break;}
- stat=box[0];
- for(int i =0 ; i< n_Stati; i++){if(Stati[i]==stat){pos_Stato=i;}}
- ca=box[1];
- switch(box[2])
- {
- case'd' :
- Stringa[testina]=ca;
- testina++;
- break;
- case's' :
- Stringa[testina]=ca;
- testina--;
- break;
- case'i' :
- Stringa[testina]=ca;
- break;
- }
- for(int i=0;i<31+testina;i++)cout<<" ";
- cout<<"|"<<endl;
- cout<<"Configurazione : "<<box<<" Stringa : "<<Stringa<<endl;
- if(Stati_F[pos_Stato]==true){fine=true; cout<<"Stringa riconosciuta =) !"<<endl;}
- if(getch()=='e')break;
- }
- system("pause");
- }
- void MT :: SetMT()
- {
- for(int x=0; x <n_Stati; x++){cout<<"Stato "<<x<<" : "; cin>>Stati[x]; if(isupper(Stati[x])){Stati_F[x]==true;} else{Stati_F[x]==false;}}
- for(int x=0; x <n_Caratteri ; x++){cout<<"Carattere "<<x<<" : "; cin>>Sigma[x];}
- }
- void MT :: SetDeltaT()
- {
- for(int x=0; x <n_Stati; x++)
- {
- for(int y=0; y <n_Caratteri ; y++){cout<<"Delta("<<Stati[x]<<","<<Sigma[y]<<") : "; cin>>DeltaT[x][y];}
- }
- }
- MT :: MT(int _n_Stati,int _n_Caratteri,string _Stringa)
- {
- testina=1;
- n_Stati=_n_Stati;
- n_Caratteri=_n_Caratteri;
- // n_Caratteri++;
- fine=false;
- pos_Stato=0;
- Stringa=_Stringa;
- /* Sigma=new char[n_Caratteri];
- Stati=new char[n_Stati];
- Stati_F=new bool[n_Stati];
- DeltaT=new string*[n_Stati];
- for(int x=0; x<n_Stati; x++){DeltaT[x]=new string[n_Caratteri];}*/
- }
- int main()
- {
- cout<<"Simulatore Macchina di Turing \n \n "<<endl;
- cout<<"Premi e per uscire o un qualsiasi altro tasto per proseguire con la computazione."<<endl;
- cout<<"La | indica la posizione della testina nel momento successivo alla computazione. \n \n";
- MT a(10,5,"@aaabbbaaa@");
- //a.SetMT();
- //a.SetDeltaT();
- a.Computa();
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement