Tema: Automatas
Ver Mensaje Individual
  #1 (permalink)  
Antiguo 27/09/2005, 23:57
Avatar de Jorgemen
Jorgemen
 
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 19 años
Puntos: 1
Automatas

El siguiente código resuleve automátas, esta es una forma de resolución de problemas por medio de patrones, por ejemplo el código resuleve por medio de patrones si un año es bisiesto o no, esto es facil con la programación comuún, pero con automatas tienes qeu encontrar un patron que te permita construir tu diagrama de estados y luego recién codificar, si desean más información aqui les doy un link donde se pueden descargar un libro muy bueno...

http://lizt.mty.itesm.mx/~rbrena/AyL.html

Código PHP:
// para monomio
function verificarMonomio($edValor)
        {
                
$es=false;        // indica si es falso o verdadero
                
$salir=false;    // mientras sea falso verifica....
                
$estado=0
                
$delantero=0;
                
$longitud=strlen($edValor);
                while(!
$salir)
                {
                    switch(
$estado)
                    {
                        case 
0:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='+')||($c=='-'))
                            {
                                
$estado=1;
                            }
                            elseif(
$this->esDigito($c))
                            {
                                
$estado=2;
                            }
                            else 
                                
$estado=9;
                            break;
                        case 
1:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=2;
                            }
                            else 
                            {
                                
$estado=9;
                            }
                            break;
                        case 
2:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=2;
                            }
                            elseif((
$c==',')||($c=='.'))
                            {
                                
$estado=3;
                            }
                            elseif(
$this->esLetra($c))
                            {
                                
$estado=5;
                            }
                            else
                            {
                                
$estado=9;
                            }
                            break;
                        case 
3:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigitoNoCero($c))
                            {
                                
$estado=4;
                            }
                            elseif (
$this->esDigito($c))
                            {
                                
$estado=10;
                            }
                            else 
                            {
                                
$estado=5;
                            }
                            break;
                        case 
4:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esLetra($c))
                            {
                                
$estado=5;
                            }
                            elseif (
$this->esDigitoNoCero($c))
                            {
                                
$estado=4;
                            }
                            else
                            {    
                                
$estado=9;
                            }
                            break;
                        case 
10:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigitoNoCero($c))
                            {
                                
$estado=11;
                            }
                            else 
                            {
                                
$estado=9;
                            }
                            break;
                        case 
11:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esLetra($c))
                            {
                                
$estado=5;
                            }
                            else 
                            {
                                
$estado=9;
                            }
                            break;
                        case 
5:    
                            if(
$longitud==$delantero)
                            {
                                
$es=true;
                                
$salir=true;
                            }
                            else
                            {
                                
$c=$edValor[$delantero];
                                
$delantero++;
                                if (
$c=='^')
                                {
                                    
$estado=6;
                                }
                                elseif (
$this->esLetra($c))
                                {
                                    
$estado=5;
                                }
                                else 
                                {
                                    
$estado=9;
                                }
                            }
                            
                            break;
                        case 
6:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='+')||($c=='-'))
                            {
                                
$estado=7;
                            }
                            elseif (
$this->esDigito($c))
                            {
                                
$estado=8;
                            }
                            else 
                            {
                                
$estado=9;
                            }
                            
                            break;
                        case 
7:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=8;
                            }
                            else 
                            {
                                
$estado=9;
                            }
                            
                            break;
                        case 
8:    
                            if(
$longitud==$delantero)
                            {
                                
$es=true;
                                
$salir=true;
                            }
                            else
                            {
                                
$c=$edValor[$delantero];
                                
$delantero++;
                                if (
$this->esLetra($c))
                                {
                                    
$estado=5;
                                }
                                elseif (
$this->esDigito($c))
                                {
                                    
$estado=8;
                                }
                                else 
                                {
                                    
$estado=9;
                                }
                            }
                            break;
                        case 
9:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarFraccion()