Ingenierìa En Computaciòn

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


No hay comentarios:

Publicar un comentario