Advertisement
Guest User

Untitled

a guest
Nov 21st, 2018
140
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 4.90 KB | None | 0 0
  1. #pragma once
  2. #include<string>
  3.  
  4. class Delta {
  5. public:
  6. std::vector<std::string> initial;
  7. std::vector<std::string> element;
  8. std::vector<std::string> final;
  9.  
  10. };
  11.  
  12.  
  13.  
  14. #pragma once
  15. #include <string>
  16. #include <vector>
  17. #include "Delta.h"
  18. class AFD
  19. {
  20. public:
  21. AFD();
  22. void citire();
  23. void afisare();
  24. void verificare(std::string cuvant);
  25. std::vector<std::string> separareCuvant(std::string cuvant);
  26. bool apartineAlfabet(std::string cuvant);
  27. void setStareInitiala(std::vector<std::string> stareNoua);
  28. private:
  29. std::vector<std::string> Stari;
  30. std::vector<std::string> Sigma;
  31. std::vector<std::string> StareInit;
  32. std::vector<std::string >StariFinale;
  33. Delta Delta;
  34.  
  35.  
  36. };
  37.  
  38.  
  39.  
  40.  
  41.  
  42.  
  43. #include "AFD.h"
  44. #include <fstream>
  45. #include<iostream>
  46.  
  47. AFD::AFD()
  48. {
  49. }
  50.  
  51. void AFD::citire()
  52. {
  53. int numberOftransition;
  54. int numarStari;
  55. int numarStariInit;
  56. int numarElemente;
  57. int numarStariFinale;
  58.  
  59. std::ifstream f("input.txt");
  60. f >> numarStari;
  61. Stari.resize(numarStari);
  62. for (int i = 0; i < numarStari; ++i)
  63. f >> Stari[i];
  64. f >> numarElemente;
  65. Sigma.resize(numarElemente);
  66. for (int i = 0; i < numarElemente; ++i)
  67. f >> Sigma[i];
  68. f >> numarStariInit;
  69. StareInit.resize(numarStariInit);
  70. f >> StareInit[0];
  71. f >> numberOftransition;
  72. Delta.initial.resize(numberOftransition);
  73. Delta.element.resize(numberOftransition);
  74. Delta.final.resize(numberOftransition);
  75. for (int i = 0; i < numberOftransition; ++i)
  76. {
  77. f >> Delta.initial[i];
  78. f >> Delta.element[i];
  79. f >> Delta.final[i];
  80. }
  81. f >> numarStariFinale;
  82. StariFinale.resize(numarStariFinale);
  83. for (int i = 0; i < numarStariFinale; ++i)
  84. f >> StariFinale[i];
  85.  
  86.  
  87.  
  88. }
  89.  
  90. void AFD::afisare()
  91. {
  92. /*for (int i = 0; i < Stari.size(); ++i)
  93. std::cout << Stari[i] << " ";
  94. std::cout <<std:: endl;
  95. for (int i = 0; i < Sigma.size(); ++i)
  96. std::cout << Sigma[i] << " ";
  97. std::cout << std::endl;
  98. std::cout << "Starea initiala: " << StareInit[0];
  99. std::cout << std::endl;
  100. for (int i = 0; i < Delta.first.size(); ++i)
  101. {
  102. std::cout << Delta.stareDePlecare[i]<<" ";
  103. std::cout << Delta.first[i] << " ";
  104. std::cout << Delta.second[i] << std::endl;
  105. }
  106. std::cout << "Starile finale:" << std::endl;
  107. for (int i = 0; i < StariFinale.size(); ++i)
  108. std::cout << StariFinale[i] << " ";
  109. */
  110. std::cout << "Automatul dat este: ";
  111. std::cout << std::endl;
  112. std::cout << std::endl;
  113. std::cout << "Stari: { ";
  114. for (int i = 0; i < Stari.size()-1; ++i)
  115. std::cout << Stari[i] << ", ";
  116. std::cout << Stari[Stari.size()-1] << "}" << std::endl;
  117. std::cout << "Sigma: {";
  118. for (int i = 0; i < Sigma.size() - 1; ++i)
  119. std::cout << Sigma[i] << ", ";
  120. std::cout << Sigma[Sigma.size() - 1] << "}" << std::endl;
  121. std::cout << "Stare initiala: " << StareInit[0] << std::endl;
  122. if (StariFinale.size() > 1)
  123. {
  124. std::cout << "Starile finale: {";
  125. for (int i = 0; i < StariFinale.size() - 1; ++i)
  126. std::cout << StariFinale[i] << ", ";
  127. std::cout << StariFinale[StariFinale.size() - 1] << "}" << std::endl;
  128. }
  129. else
  130. std::cout << "Starea finala: {" << StariFinale[0] << " }" << std::endl;
  131. std::cout << "Tranzitiile: " << std::endl;
  132. for (int i = 0; i < Delta.initial.size(); ++i)
  133. {
  134. std::cout <<"("<< Delta.initial[i] <<"," << Delta.element[i]<<") ->" << Delta.final[i] << std::endl;
  135. }
  136.  
  137. }
  138.  
  139. void AFD::verificare(std::string cuvant)
  140. {
  141. unsigned int blocaj=0;
  142. unsigned int acceptat = 0;
  143. std::vector<std::string> sir = separareCuvant(cuvant);
  144. std::string stareCurenta = StareInit[0];
  145. for (int j = 0; j < sir.size(); ++j) {
  146. if (apartineAlfabet(cuvant) == false)
  147. {
  148. blocaj = 0;
  149. std::cout << "Cuvantul contine caractere care nu fac parte din alfabet!!! =>" << std::endl;
  150. break;
  151. }
  152.  
  153. for (int k = 0; k < Delta.element.size(); ++k)
  154. {
  155. if (stareCurenta == Delta.initial[k]) {
  156. blocaj = 0;
  157. if (Delta.element[k] == sir[j]) {
  158. blocaj = 1;
  159. stareCurenta = Delta.final[k];
  160. break;
  161. }
  162. }
  163. }
  164.  
  165. }
  166.  
  167.  
  168.  
  169.  
  170.  
  171. if (blocaj == 1) {
  172. for (int i = 0; i < StariFinale.size(); ++i)
  173. if (stareCurenta == StariFinale[i])
  174. {
  175. acceptat = 1;
  176. }
  177. if (acceptat == 1)
  178. std::cout << " cuvant acceptat";
  179. else
  180. std::cout << "cuvantul nu este acceptat";
  181. }
  182. else
  183. {
  184. std::cout << "Blocaj";
  185. }
  186.  
  187. }
  188.  
  189.  
  190.  
  191.  
  192. std::vector<std::string> AFD::separareCuvant(std::string cuvant)
  193. {
  194. std::vector<std::string> sir;
  195. sir.resize(cuvant.length());
  196. for (int i = 0; i < cuvant.length(); ++i)
  197. sir[i] = cuvant[i];
  198. return sir;
  199. }
  200.  
  201. bool AFD::apartineAlfabet(std::string cuvant)
  202. {
  203. std::vector<std::string>sir = separareCuvant(cuvant);
  204.  
  205. for (int i = 0; i < sir.size(); ++i) {
  206. bool check = false;
  207. for (int j = 0; j < Sigma.size(); ++j)
  208. if (sir[i] == Sigma[j])
  209. check=true;
  210. if (check == false)
  211. return false;
  212. }
  213. return true;
  214. }
  215.  
  216. void AFD::setStareInitiala(std::vector<std::string> stareNoua)
  217. {
  218. StareInit = stareNoua;
  219. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement