Advertisement
Frugalitas

Untitled

Feb 24th, 2017
103
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 3.24 KB | None | 0 0
  1. //Ese 2
  2.  
  3. #include<iostream>
  4. #include "conio.h"
  5.  
  6. using namespace std;
  7.  
  8. class MT
  9. {
  10. int n_Stati;
  11. int n_Stati_F;
  12. int n_Caratteri;
  13. int testina;
  14. int pos_Stato;
  15. // char* Sigma;
  16. char Sigma[5]{'a','b','x','z','@'};
  17. // char* Stati;
  18. char Stati[10]{'q','w','e','r','t','y','u','i','o','P'};
  19. // bool* Stati_F;
  20. bool Stati_F[10]{0,0,0,0,0,0,0,0,0,1};
  21. string Stringa;
  22. // string** DeltaT;
  23. string DeltaT[10][5]{{"wad","-","Pxi","-","-"}, //q
  24. {"wad","ebs","wxd","-","i@s"}, //w
  25. {"rxd","wxd","exs","-","-"}, //e
  26. {"-","tbd","rxd","-","-"}, //r
  27. {"yas","tbd","-","tzd","-"}, //t
  28. {"-","uzd","-","yzs","-"}, //y
  29. {"wad","ubd","-","uzd","-"}, //u
  30. {"oxs","-","ixs","-","-"}, //i
  31. {"oas","obs","oxs","ozs","q@d"},//o
  32. {"-","-","-","-","-"}}; //p
  33. bool fine;
  34.  
  35. public:
  36.  
  37. MT(int _n_Stati,int _n_Caratteri,string _Stringa);
  38. void SetMT();
  39. void SetDeltaT();
  40. void Computa();
  41. string Delta(int stato,int carattere);
  42.  
  43. };
  44.  
  45. string MT :: Delta(int stato, int carattere)
  46. {
  47. return DeltaT[stato][carattere];
  48. }
  49.  
  50. void MT :: Computa()
  51. {
  52. string box;
  53. char ca;
  54. char stat;
  55. int pos_carattere;
  56. while(fine==false)
  57. {
  58. for(int i =0 ; i< n_Caratteri; i++){if(Stringa[testina]==Sigma[i]){pos_carattere=i;}}
  59. box=Delta(pos_Stato,pos_carattere);
  60. if(box=="-"){cout<<"Errore non esiste nessuna configurazione per Delta("<<Stati[pos_Stato]<<Sigma[pos_carattere]<<") ! "<<endl;break;}
  61. stat=box[0];
  62. for(int i =0 ; i< n_Stati; i++){if(Stati[i]==stat){pos_Stato=i;}}
  63. ca=box[1];
  64. switch(box[2])
  65. {
  66. case'd' :
  67. Stringa[testina]=ca;
  68. testina++;
  69. break;
  70. case's' :
  71. Stringa[testina]=ca;
  72. testina--;
  73. break;
  74. case'i' :
  75. Stringa[testina]=ca;
  76. break;
  77.  
  78. }
  79. for(int i=0;i<31+testina;i++)cout<<" ";
  80. cout<<"|"<<endl;
  81. cout<<"Configurazione : "<<box<<" Stringa : "<<Stringa<<endl;
  82. if(Stati_F[pos_Stato]==true){fine=true; cout<<"Stringa riconosciuta =) !"<<endl;}
  83. if(getch()=='e')break;
  84. }
  85.  
  86. system("pause");
  87. }
  88.  
  89. void MT :: SetMT()
  90. {
  91. 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;}}
  92. for(int x=0; x <n_Caratteri ; x++){cout<<"Carattere "<<x<<" : "; cin>>Sigma[x];}
  93. }
  94. void MT :: SetDeltaT()
  95. {
  96. for(int x=0; x <n_Stati; x++)
  97. {
  98. for(int y=0; y <n_Caratteri ; y++){cout<<"Delta("<<Stati[x]<<","<<Sigma[y]<<") : "; cin>>DeltaT[x][y];}
  99. }
  100. }
  101.  
  102. MT :: MT(int _n_Stati,int _n_Caratteri,string _Stringa)
  103. {
  104. testina=1;
  105. n_Stati=_n_Stati;
  106. n_Caratteri=_n_Caratteri;
  107. // n_Caratteri++;
  108. fine=false;
  109. pos_Stato=0;
  110. Stringa=_Stringa;
  111. /* Sigma=new char[n_Caratteri];
  112. Stati=new char[n_Stati];
  113. Stati_F=new bool[n_Stati];
  114. DeltaT=new string*[n_Stati];
  115. for(int x=0; x<n_Stati; x++){DeltaT[x]=new string[n_Caratteri];}*/
  116. }
  117.  
  118. int main()
  119. {
  120. cout<<"Simulatore Macchina di Turing \n \n "<<endl;
  121. cout<<"Premi e per uscire o un qualsiasi altro tasto per proseguire con la computazione."<<endl;
  122. cout<<"La | indica la posizione della testina nel momento successivo alla computazione. \n \n";
  123. MT a(10,5,"@aaabbbaaa@");
  124. //a.SetMT();
  125. //a.SetDeltaT();
  126. a.Computa();
  127. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement