Advertisement
Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- #pragma once
- #include<string>
- class Delta {
- public:
- std::vector<std::string> initial;
- std::vector<std::string> element;
- std::vector<std::string> final;
- };
- #pragma once
- #include <string>
- #include <vector>
- #include "Delta.h"
- class AFD
- {
- public:
- AFD();
- void citire();
- void afisare();
- void verificare(std::string cuvant);
- std::vector<std::string> separareCuvant(std::string cuvant);
- bool apartineAlfabet(std::string cuvant);
- void setStareInitiala(std::vector<std::string> stareNoua);
- private:
- std::vector<std::string> Stari;
- std::vector<std::string> Sigma;
- std::vector<std::string> StareInit;
- std::vector<std::string >StariFinale;
- Delta Delta;
- };
- #include "AFD.h"
- #include <fstream>
- #include<iostream>
- AFD::AFD()
- {
- }
- void AFD::citire()
- {
- int numberOftransition;
- int numarStari;
- int numarStariInit;
- int numarElemente;
- int numarStariFinale;
- std::ifstream f("input.txt");
- f >> numarStari;
- Stari.resize(numarStari);
- for (int i = 0; i < numarStari; ++i)
- f >> Stari[i];
- f >> numarElemente;
- Sigma.resize(numarElemente);
- for (int i = 0; i < numarElemente; ++i)
- f >> Sigma[i];
- f >> numarStariInit;
- StareInit.resize(numarStariInit);
- f >> StareInit[0];
- f >> numberOftransition;
- Delta.initial.resize(numberOftransition);
- Delta.element.resize(numberOftransition);
- Delta.final.resize(numberOftransition);
- for (int i = 0; i < numberOftransition; ++i)
- {
- f >> Delta.initial[i];
- f >> Delta.element[i];
- f >> Delta.final[i];
- }
- f >> numarStariFinale;
- StariFinale.resize(numarStariFinale);
- for (int i = 0; i < numarStariFinale; ++i)
- f >> StariFinale[i];
- }
- void AFD::afisare()
- {
- /*for (int i = 0; i < Stari.size(); ++i)
- std::cout << Stari[i] << " ";
- std::cout <<std:: endl;
- for (int i = 0; i < Sigma.size(); ++i)
- std::cout << Sigma[i] << " ";
- std::cout << std::endl;
- std::cout << "Starea initiala: " << StareInit[0];
- std::cout << std::endl;
- for (int i = 0; i < Delta.first.size(); ++i)
- {
- std::cout << Delta.stareDePlecare[i]<<" ";
- std::cout << Delta.first[i] << " ";
- std::cout << Delta.second[i] << std::endl;
- }
- std::cout << "Starile finale:" << std::endl;
- for (int i = 0; i < StariFinale.size(); ++i)
- std::cout << StariFinale[i] << " ";
- */
- std::cout << "Automatul dat este: ";
- std::cout << std::endl;
- std::cout << std::endl;
- std::cout << "Stari: { ";
- for (int i = 0; i < Stari.size()-1; ++i)
- std::cout << Stari[i] << ", ";
- std::cout << Stari[Stari.size()-1] << "}" << std::endl;
- std::cout << "Sigma: {";
- for (int i = 0; i < Sigma.size() - 1; ++i)
- std::cout << Sigma[i] << ", ";
- std::cout << Sigma[Sigma.size() - 1] << "}" << std::endl;
- std::cout << "Stare initiala: " << StareInit[0] << std::endl;
- if (StariFinale.size() > 1)
- {
- std::cout << "Starile finale: {";
- for (int i = 0; i < StariFinale.size() - 1; ++i)
- std::cout << StariFinale[i] << ", ";
- std::cout << StariFinale[StariFinale.size() - 1] << "}" << std::endl;
- }
- else
- std::cout << "Starea finala: {" << StariFinale[0] << " }" << std::endl;
- std::cout << "Tranzitiile: " << std::endl;
- for (int i = 0; i < Delta.initial.size(); ++i)
- {
- std::cout <<"("<< Delta.initial[i] <<"," << Delta.element[i]<<") ->" << Delta.final[i] << std::endl;
- }
- }
- void AFD::verificare(std::string cuvant)
- {
- unsigned int blocaj=0;
- unsigned int acceptat = 0;
- std::vector<std::string> sir = separareCuvant(cuvant);
- std::string stareCurenta = StareInit[0];
- for (int j = 0; j < sir.size(); ++j) {
- if (apartineAlfabet(cuvant) == false)
- {
- blocaj = 0;
- std::cout << "Cuvantul contine caractere care nu fac parte din alfabet!!! =>" << std::endl;
- break;
- }
- for (int k = 0; k < Delta.element.size(); ++k)
- {
- if (stareCurenta == Delta.initial[k]) {
- blocaj = 0;
- if (Delta.element[k] == sir[j]) {
- blocaj = 1;
- stareCurenta = Delta.final[k];
- break;
- }
- }
- }
- }
- if (blocaj == 1) {
- for (int i = 0; i < StariFinale.size(); ++i)
- if (stareCurenta == StariFinale[i])
- {
- acceptat = 1;
- }
- if (acceptat == 1)
- std::cout << " cuvant acceptat";
- else
- std::cout << "cuvantul nu este acceptat";
- }
- else
- {
- std::cout << "Blocaj";
- }
- }
- std::vector<std::string> AFD::separareCuvant(std::string cuvant)
- {
- std::vector<std::string> sir;
- sir.resize(cuvant.length());
- for (int i = 0; i < cuvant.length(); ++i)
- sir[i] = cuvant[i];
- return sir;
- }
- bool AFD::apartineAlfabet(std::string cuvant)
- {
- std::vector<std::string>sir = separareCuvant(cuvant);
- for (int i = 0; i < sir.size(); ++i) {
- bool check = false;
- for (int j = 0; j < Sigma.size(); ++j)
- if (sir[i] == Sigma[j])
- check=true;
- if (check == false)
- return false;
- }
- return true;
- }
- void AFD::setStareInitiala(std::vector<std::string> stareNoua)
- {
- StareInit = stareNoua;
- }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement