Ingenierìa En Computaciòn
UAEM
martes, 26 de mayo de 2015
PROGRAMA: EVALUACION DE UN AFD
#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
PROGRAMA:"REGLA DE PRODUCCION (SIMBOLOS NO TERMINALES)
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
#include <fstream>
FILE *doc;
using namespace std;
void introducirLetra (char *,char *,char *, int);
void mostrarReglasDeProduccion();
void lecturaDeArchivo();
const int num=1000;
struct Gramaticas{
char regla[100];
char
produccion[100];
char
letras[100];
};
Gramaticas gram[num];
int main(int argc, char** argv) {
cout<<"\nCENTRO
UNIVERSITARIO UAEM ATLACOMULCO "<<endl;
cout<<"\nAUTOMATAS
Y LENGUAJES FORMALES"<<endl;
cout<<"\nPROGRAMA
DE REGLAS DE PRODUCCION"<<endl;
cout<<"\nELABORADO
POR:"<<endl;
cout<<"---->
HEIVILINA PEREZ ARIAS"<<endl;
cout<<"---->
MAYTE RICARDO CRUZ"<<endl;
lecturaDeArchivo();
mostrarReglasDeProduccion
();
system("pause");
return EXIT_SUCCESS;
}
void lecturaDeArchivo(){
ifstream
lecturaArchivo("produccion.txt", ios::in);
if(!lecturaArchivo){
cerr<<"No
se pudo abrir el archivo"<<endl;
exit(1);
}
char
reglas[100];
char
producciones[100];
char
variables[100];
int i=0;
while(lecturaArchivo>>reglas>>producciones>>variables){
introducirLetra(reglas,producciones,variables,i);
i++;
}
}
void introducirLetra(char *nx,char *ox,char *dx, int posicion){
if(posicion==-1){
cout<<"Ya
no hay lugar"<<endl;
return;
}
strcpy
(gram[posicion].regla, nx);
strcpy
(gram[posicion].produccion,ox);
strcpy
(gram[posicion].letras, dx);
}
void mostrarReglasDeProduccion(){
ofstream
salida("salida.txt");
doc=fopen("salida.txt","a+");
cout<<endl;
cout<<"REGLAS
DE PRODUCCION"<<' '<<setw(10)<<endl;
for(int i=0;
i<num;i++){
if(strcmp(gram[i].regla,"")!=0){
cout<<setw(10)<<gram[i].regla<<'
'<<endl;
doc=fopen("salida.txt",
"a+");
}
}
}
PROGRAMA COMPILADO
PROGRAMA: " REGLAS DE PRODUCCION (SIMBOLOS TERMINALES)"
#include <iostream>
#include <string>
#include <stdlib.h>
#include <iomanip>
#include <fstream>
using namespace std;
void introducirLetra (char *,char *,char *, int);
void mostrarReglasDeProduccion();
void lecturaDeArchivo();
const int num=1000;
struct Gramaticas{
char regla[100];
char
produccion[100];
char
letras[100];
};
Gramaticas gram[num];
int main(int argc, char** argv) {
cout<<"\nCENTRO
UNIVERSITARIO UAEM ATLACOMULCO "<<endl;
cout<<"\nAUTOMATAS
Y LENGUAJES FORMALES"<<endl;
cout<<"\nPROGRAMA
DE REGLAS DE PRODUCCION"<<endl;
cout<<"\t(Salida
de simbolos terminales)"<<endl;
cout<<"\nELABORADO
POR:"<<endl;
cout<<"---->
HEIVILINA PEREZ ARIAS"<<endl;
cout<<"---->
MAYTE RICARDO CRUZ"<<endl;
lecturaDeArchivo();
mostrarReglasDeProduccion
();
system("pause");
return EXIT_SUCCESS;
}
void lecturaDeArchivo(){
ifstream
lecturaArchivo("produccion.txt", ios::in);
if(!lecturaArchivo){
cerr<<"No
se pudo abrir el archivo"<<endl;
exit(1);
}
char
reglas[100];
char
producciones[100];
char
variables[100];
int i=0;
while(lecturaArchivo>>reglas>>producciones>>variables){
introducirLetra(reglas,producciones,variables,i);
i++;
}
}
void introducirLetra(char *nx,char *ox,char *dx, int posicion){
if(posicion==-1){
cout<<"Ya
no hay lugar"<<endl;
return;
}
strcpy
(gram[posicion].regla, nx);
strcpy
(gram[posicion].produccion,ox);
strcpy
(gram[posicion].letras, dx);
}
void mostrarReglasDeProduccion(){
ofstream
salida("salida.txt");
doc=fopen("salida.txt","a+");
cout<<endl;
cout<<setw(10)<<"REGLAS
DE PRODUCCION(simbolos terminales)"<<' '<<endl;
cout<<endl;
for(int i=0;
i<num;i++){
if(strcmp(gram[i].letras,"")!=0){
cout<<setw(10)<<gram[i].letras<<'
'<<endl;
doc=fopen("salida.txt",
"a+");
}
}
}
PROGRAMA COMPILADO
ARCHIVO TXT
Suscribirse a:
Comentarios (Atom)



















