domingo, 7 de abril de 2013

Autómata Pila Determinista en C++


En el curso de Teoria de la Computación el profe nos dejo en el laboratorio la implementación de un APD que sea para cierto lenguaje definido,entonces hizo uno chicha nomas C(WWr), para facilitar mi implementación hize uso de librerias para “dibujar” el APD(definido) y de la Libreria Estandar de C++ (STL) para llenar y desempilar la pila.Básicamente el código consiste en dividir el string y comparalo para que pase a empilarlo y desempilarl(se imprime el proceso).Ahora para su ejecución en C++ tienes q tener instalado winbgim o te saldrá 1000000 errores(no mentira),ya mucho florillo a continuación el código:



Si éste código te ha servido, no olvides en regalarnos un like y/o compartir con tus amigos para que este blog sigua creciendo ...


#include 
#include 
#include 
#include
#include 
#include 
#include 
#include 
#include 
#include 
#define MAX 100
HANDLE hCon;

using namespace std;

void waitForLeftMouseClick();
void SetColor(int i);

int grafica()
{

    settextstyle(0,0,2);

    setcolor(WHITE);
    outtextxy(50,70,"TEORIA DE LA COMPUTACION");
    outtextxy(70,90," APD [ww^r]");
    setcolor(RED);
    settextstyle(0,0,1);
    setlinestyle(CENTER_LINE,20,2);

    circle (108, 260, 40);circle (60, 260, 6);circle (60, 260, 4);circle (60, 260, 2);//0
    circle (343, 260, 35);circle (343, 260, 40);//1

    setlinestyle(CENTER_LINE,20,2);
    setcolor(WHITE);
    settextstyle(0,0,2);
    outtextxy(85,250,"q0");
    outtextxy(320,250,"q1");

    setcolor(LIGHTBLUE);
    //////conectores
    settextstyle(0,0,2);
    arc (225, 390, 60, 120, 180);circle (311, 235, 4);//0,1
    arc (108, 210, 320, 220, 25);circle (128, 223, 4);//0,0
    arc (340, 210, 320, 220, 25);circle (355, 223, 4);//1,1
    setcolor(YELLOW);
    outtextxy (50, 140,"a, & / X");
    outtextxy (50, 157,"b, & / Y");
    outtextxy (290, 140,"X, & / a");
    outtextxy (290, 157,"Y, & / b");
    outtextxy (155, 235,"&, & / &");
    return 0;
}

void waitForLeftMouseClick()
{
    clearmouseclick(WM_LBUTTONDOWN);
    const int DELAY = 50; 
    int x, y;
    while (!ismouseclick(WM_LBUTTONDOWN))
        delay(DELAY);
    getmouseclick(WM_LBUTTONDOWN, x, y);
}

void reconocedor()
{
     stackoperation;    
     string palabra,sub_palabra;
     int tam,tamb;
     cout<<"\n --> Ingrese palabra: ";
     cin>>palabra;
     tam=palabra.size();    
     tamb=tam-1;

     string pri_palabra=("c"+palabra.substr(1,tamb/2));//primera parte de la cadena
     string   sec_palabra=(palabra.substr(tamb/2+1,tamb)+"c");//segunda parte de la cadena

     string inv_palabra(sec_palabra.begin(),sec_palabra.end());//invierto sec_palabra
     reverse(inv_palabra.begin(),inv_palabra.end());

     if(pri_palabra==inv_palabra)//si la primera subcadena es igual a la segunda subcadena
     {
          settextstyle(0,0,2);
          setcolor(GREEN);
          outtextxy(100,350,"Palabra Aceptada");
           int i=0;
           SetColor(10);cout<<"\n\tEmpilando en q0 :"<=0; i--)
          {
              for(signed int j = 0; j < i; j++)
              {
                 if(palabra[j]=='a'){SetColor(6);cout<<"\t[";SetColor(15); operation.top(); operation.pop(); cout<<" X ";SetColor(6);cout<<"]";SetColor(15);}
                 else if(palabra[j]=='b'){SetColor(6);cout<<"\t[";SetColor(15); operation.top(); operation.pop(); cout<<" Y ";SetColor(6);cout<<"]";SetColor(15);}
                 else               {SetColor(6);cout<<"[";SetColor(15); operation.top(); operation.pop(); cout<<" Z ";SetColor(6);cout<<"]";SetColor(15);}
              }
           cout< Ingrese opcion: ";
        cin>>op;
        switch(op)
        {
                   case 1:
                           {
                               system("cls");
                            imprimematrix();
                            cout<<"\t\t";reconocedor();
                            getch();
                            break;}
                   };                 
        }while(op!=2);
    system("PAUSE");
    return EXIT_SUCCESS;
}

void SetColor(int i)
    {
     if(hCon == NULL)
     hCon = GetStdHandle(STD_OUTPUT_HANDLE);
     SetConsoleTextAttribute(hCon, i);
    }

2 comentarios:

Related Posts Plugin for WordPress, Blogger...