#include <iostream>
#include <vector>
#include <algorithm>
#include <string>
#include <stdlib.h>
#define MAX 100
using namespace std;
void
VisualizarEstados(vector<int> p){
cout << " LOS ESTADOS DEL
AUTOMATA SON "<<endl;
for(int i=0; i<p.size(); i++){
cout
<< " " << i <<" -->
q" << p[i] << endl;
}
}
void DigitarAutomata(vector<int> &E,
vector<char> &S, int T[MAX][MAX]){
int
num_estado;
int
num_simbls;
char h;
cout
<< "Cuantos estados desea introducir : "<<"\t";
cin >> num_estado;
for(int i=0;
i<num_estado; i++){
E.push_back(i);
}
cout <<
"Numero de simbolos a introducir "<<"\t";
cin >>
num_simbls;
cout <<
endl;
for(int i=0;
i<num_simbls; i++){
cout
<< "\t Simbolo " << i+1 << " : ";
cin
>> h;
S.push_back(h);
}
sort(S.begin(),S.end());
cout
<< " INTRODUCCION DE TABLA DE TRANSICIONES "<<endl;
for(int i=0; i<num_estado; i++){
for(int
j=0; j<num_simbls; j++){
cout
<< "\t
T["<<i<<"]["<<j<<"] : ";
cin
>> T[i][j];
}
}
cout << " MUESTRA DE TABLA DE
TRANSICIONES "<<endl;
for(int i=0; i<num_estado; i++){
for(int
j=0; j<num_simbls; j++){
cout
<< "\t" << T[i][j] << " ";
}
cout
<< endl;
}
}
void
menu(){
cout << "PROGRAMA PARA LA
EVALUACION DE UN AFD"<<endl;
cout<<endl;
cout << "\t 1. Ingresa el
Automata:"<<endl;
cout << "\t 2. Evaluar palabra
"<<endl;
cout << "\t 3. Salir "<<endl;
cout<<endl;
cout
<< " Elija la opcion deseada: "<<"\t";
}
bool RectificarPalabra(vector<int> w, int
T[MAX][MAX], int q0, vector<int>qf){
int q, s;
q
= q0;
bool
EstadoRectificacion = false;
for(int i=0; i<w.size(); i++){
s = w[i];
q =
T[q][s];
}
for(int i=0;
i<qf.size(); i++){
if(q==qf[i]){
EstadoRectificacion = true;
break;
}
}
return EstadoRectificacion;
}
void
EvaluarPalabra(string palabra, vector<char>S, vector<int>&w){
int i, k=0;
while(w.size()!=palabra.length()){
for(i=0;
i<S.size(); i++){
if(palabra[k]==S[i]){
w.push_back(i);
}
}
k++;
}
}
int main(){
cout<<"\tCENTRO
UNIVERSITARIO UAEM ATLACOMULCO"<<endl;
cout<<endl;
cout<<"\tAUTOMATAS
Y LENGUAJES FORMALES"<<endl;
cout<<endl;
cout<<"ELABORADO POR: "<<endl;
cout<<"\t MAYTE RICARDO CRUZ"<<endl;
cout<<endl;
vector<int>
Estados;
vector<char> Simbolos;
int Transiciones[MAX][MAX];
int q0;
vector<int>qf;
vector<int>w;
bool AutomataIntroducido = false;
int op, temp, tam;
do{
menu(); cin>>op;
switch(op){
case
1:
Estados.clear();
Simbolos.clear();
qf.clear();
DigitarAutomata(Estados,
Simbolos, Transiciones);
VisualizarEstados(Estados);
cout << "Estado
inicial: ";
cin >> q0;
cout << "Numero de
estados finales del automata: "<<"\t";
cin >> tam;
cout << endl;
for(int i=0; i<tam; i++){
cout << "\t Cual es el numero de estado final:
"<<"\t";
cin >> temp;
qf.push_back(temp);
}
AutomataIntroducido = true;
break;
case
2:
if(AutomataIntroducido){
string palabra;
w.clear();
bool EstadoRectificacion =
false;
cout << "
Ingrese palabra: "<<"\t";
cin>> palabra;
EvaluarPalabra(palabra,
Simbolos, w);
EstadoRectificacion
=RectificarPalabra(w, Transiciones, q0, qf);
if(EstadoRectificacion){
cout << "\t
PALABRA ACEPTADA! "<<endl;
}
else{
cout <<
"\t PALABRA
RECHAZADA!"<<endl;
}
}
else{
cout << "Ingrese
de nuevo su automata"<<endl;
}
break;
case
3:
exit(0);
default:
cout << "Opcion incorrecta";
}
}while(op!=3);
system("pause");
return
EXIT_SUCCESS;
}
PROGRAMA COMPILADO

No hay comentarios:
Publicar un comentario