Foros del Web » Programando para Internet » PHP » Frameworks y PHP orientado a objetos »

Automatas

Estas en el tema de Automatas en el foro de Frameworks y PHP orientado a objetos en Foros del Web. 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 ...
  #1 (permalink)  
Antiguo 27/09/2005, 23:57
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
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() 
  #2 (permalink)  
Antiguo 27/09/2005, 23:58
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
Puntos: 1
fracción

Código PHP:
function verificarFraccion($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->esDigitoNoCero($c))
                            {
                                
$estado=2;
                            }
                            else 
                                
$estado=5;
                            break;
                        case 
1:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigitoNoCero($c))
                            {
                                
$estado=2;
                            }
                            else 
                            {
                                
$estado=5;
                            }
                            break;
                        case 
2:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=2;
                            }
                            elseif(
$c=='/'
                            {
                                
$estado=3;
                            }
                            else
                            {
                                
$estado=5;
                            }
                            break;
                        case 
3:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigitoNoCero($c))
                            {
                                
$estado=4;
                            }
                            elseif((
$c=='+')||($c=='-'))
                            {
                                
$estado=6;
                            }
                            else 
                            {
                                
$estado=5;
                            }
                            break;
                        case 
6:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigitoNoCero($c))
                            {
                                
$estado=4;
                            }
                            else 
                            {
                                
$estado=5;
                            }
                            break;
                        case 
4:    
                            if(
$longitud==$delantero)
                            {
                                
$es=true;
                                
$salir=true;
                            }
                            else
                            {
                                
$c=$edValor[$delantero];
                                
$delantero++;
                                if (
$this->esDigito($c))
                                {
                                    
$estado=4;
                                }
                                else
                                {
                                    
$estado=5;
                                }
                            }
                            break;
                        case 
5:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarFraccion() 
  #3 (permalink)  
Antiguo 27/09/2005, 23:59
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
Puntos: 1
valida un hora

Código PHP:
function verificarHora($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=='0')||($c=='1'))
                            {
                                
$estado=2;
                            }
                            elseif(
$c=='2')
                            {
                                
$estado=3;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
2:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=4;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
3:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3'))
                            {
                                
$estado=4;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
4:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c==':')
                            {
                                
$estado=5;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
5:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5'))
                            {    
                                
$estado=6;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
6:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=7;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
7:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c==':')
                            {
                                
$estado=8;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
8:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5'))
                            {    
                                
$estado=9;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
9:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=10;
                            }
                            else 
                                
$estado=11;
                            break;
                        case 
10:    
                            if(
$delantero==$longitud)
                            {
                                
$es=true;
                                
$salir=true;
                            }
                            else
                            {
                                
$estado=11;
                            }
                            break;
                        case 
11:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarHora() 
  #4 (permalink)  
Antiguo 28/09/2005, 00:01
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
Puntos: 1
número e identificador de variable

Código PHP:
function verificarNumero($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=='0')&&($longitud==$delantero))
                            {
                                
$es=true;
                                
$salir=true;
                            }
                            elseif (
$c=='+')
                            {    
                                
$estado=3;
                            }
                            elseif (
$this->esDigitoNoCero($c))
                            {
                                
$estado=1;
                            }                    
                            else 
                                
$estado=2;
                            break;
                        case 
3:    
                            
$c=$edValor[$delantero];
                            if((
$c=='0')&&($longitud==$delantero))
                            {
                                
$es=true;
                                
$salir=true;
                            }
                            elseif (
$this->esDigitoNoCero($c))
                            {    
                                
$estado=1;
                            }
                            else 
                                
$estado=2;
                            break;
                        case 
1:    //if longitud es igual a 1 no se actualiza $c    
                            
if($longitud>1)        
                            {    
                                
$c=$edValor[$delantero];
                                
$delantero++;
                            }
                            if (
$this->esDigito($c))
                            {
                                if(
$delantero==$longitud)
                                {
                                    
$es=true;
                                    
$salir=true;
                                }
                                else
                                {
                                    
$estado=1;
                                }
                            }
                            else 
                                
$estado=2;
                            break;
                        case 
2:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarNumero()
        
    //
    //    función automata para verificar variable ---------------------------------------------------------------------------------
    //
        
function verificarVariable($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 (
$this->esLetra($c))
                            {
                                
$estado=1;
                            }
                            else 
                                
$estado=2;
                            break;
                        case 
1:    
                            if(
$longitud>1)        
                            {    
                                
$c=$edValor[$delantero];
                                
$delantero++;
                            }
                            if ((
$this->esLetra($c))||($c=='_')||($this->esDigito($c)))
                            {
                                if(
$delantero==$longitud)
                                {
                                    
$es=true;
                                    
$salir=true;
                                }
                                else
                                {
                                    
$estado=1;
                                }
                            }
                            else 
                            {
                                
$estado=2;
                            }
                            break;
                        case 
2:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarVariable() 
  #5 (permalink)  
Antiguo 28/09/2005, 00:04
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
Puntos: 1
bisiesto Parte 1

Código PHP:
function verificarBisiesto($edValor)
        {
            
$j=0;
            while(
$edValor[$j]<>'/')
            {
                
$j++;
            }
            
                
$es="error";        // 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 (
$this->esDigito($c))
                            {
                                if(
$j==1)
                                {
                                    if ((
$c=='0')||($c=='4')||($c=='8'))
                                    {
                                        
$estado=6;
                                    }
                                    else 
//if (($c=='1')||($c=='3')||($c=='5')||($c=='7')||($c=='9')) 
                                    
{
                                        
$estado=5;
                                    }
                                }
                                elseif(
$j==2)
                                {
                                    if ((
$c=='0')||($c=='2')||($c=='4')||($c=='6')||($c=='8'))
                                    {
                                        
$estado=3;
                                    }
                                    else 
//if (($c=='1')||($c=='3')||($c=='5')||($c=='7')||($c=='9')) 
                                    
{
                                        
$estado=4;
                                    }
                                }
                                else    
//($j>2)
                                
{
                                    
$j--;
                                    
$estado=0;
                                }

                            }
//fin if
                            
                            
else 
                            {
                                
$estado=35;
                            }
                            break;
                        case 
1:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                if(
$j>2)
                                {
                                    
$estado=0;
                                }
                                
$estado=2;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
2:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='2')||($c=='4')||($c=='6')||($c=='8'))
                            {
                                
$estado=3;
                            }
                            elseif((
$c=='1')||($c=='3')||($c=='5')||($c=='7')||($c=='9')) 
                            {
                                
$estado=4;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
3:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='4')||($c=='8'))
                            {
                                
$estado=6;
                            }
                            elseif ((
$c=='1')||($c=='3')||($c=='5')||($c=='7')||($c=='9'))
                            {
                                
$estado=5;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
4:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='2')||($c=='6'))
                            {
                                
$estado=6;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
5:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=7;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
6:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=8;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
7:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=11;
                            }
                            elseif (
$c=='1')
                            {
                                
$estado=12;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
8:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=9;
                            }
                            elseif (
$c=='1')
                            {
                                
$estado=10;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
9:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='1')||($c=='3')||($c=='5')||($c=='7')||($c=='8'))
                            {
                                
$estado=13;
                            }
                            elseif ((
$c=='2'))
                            {
                                
$estado=14;
                            }
                            elseif ((
$c=='4')||($c=='6')||($c=='9'))
                            {
                                
$estado=15;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
10:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='2'))
                            {
                                
$estado=13;
                            }
                            elseif (
$c=='1')
                            {
                                
$estado=15;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
11:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='2')
                            {
                                
$estado=16;
                            }
                            elseif ((
$c=='1')||($c=='3')||($c=='5')||($c=='7')||($c=='8'))
                            {
                                
$estado=17;
                            }
                            elseif ((
$c=='4')||($c=='6')||($c=='9'))
                            {
                                
$estado=18;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
12:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='2'))
                            {
                                
$estado=17;
                            }
                            elseif (
$c=='1')
                            {
                                
$estado=18;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
13:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=19;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
14:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=20;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
15:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=21;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
16:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=22;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
17:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=23;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
18:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='/')
                            {
                                
$estado=24;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
19:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=25;
                            }
                            elseif ((
$c=='1')||($c=='2'))
                            {
                                
$estado=36;
                            }
                            elseif (
$c=='3')
                            {
                                
$estado=26;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
20:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=25;
                            }
                            elseif ((
$c=='1')||($c=='2'))
                            {
                                
$estado=36;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
21:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=25;
                            }
                            elseif ((
$c=='1')||($c=='2'))
                            {
                                
$estado=36;
                            }
                            elseif (
$c=='3')
                            {
                                
$estado=27;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
22:    
                            
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=28;
                            }
                            elseif (
$c=='1')
                            {
                                
$estado=29;
                            }
                            elseif (
$c=='2')
                            {
                                
$estado=30;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
23:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=28;
                            }
                            elseif ((
$c=='1')||($c=='2'))
                            {
                                
$estado=29;
                            }
                            elseif (
$c=='3')
                            {
                                
$estado=31;
                            }
                            else
                                
$estado=35;
                            break;
                        case 
24:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=28;
                            }
                            elseif ((
$c=='1')||($c=='2'))
                            {
                                
$estado=29;
                            }
                            elseif (
$c=='3')
                            {
                                
$estado=32;
                            }
                            else
                                
$estado=35;
                            break; 
  #6 (permalink)  
Antiguo 28/09/2005, 00:05
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
Puntos: 1
Parte 2
Código PHP:
case 25:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5')||($c=='6')||($c=='7')||($c=='8')||($c=='9'))
                            {
                                
$estado=33;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
26:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1'))
                            {
                                
$estado=33;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
27:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=33;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
28:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5')||($c=='6')||($c=='7')||($c=='8')||($c=='9'))
                            {
                                
$estado=34;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
29:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5')||($c=='6')||($c=='7')||($c=='8')||($c=='9'))
                            {
                                
$estado=34;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
30:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5')||($c=='6')||($c=='7')||($c=='8'))
                            {
                                
$estado=34;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
31:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1'))
                            {
                                
$estado=34;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
32:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$c=='0')
                            {
                                
$estado=34;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
36:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5')||($c=='6')||($c=='7')||($c=='8')||($c=='9'))
                            {
                                
$estado=33;
                            }
                            else 
                                
$estado=35;
                            break;
                        case 
33:    
                            if(
$delantero==$longitud)
                            {
                                
$es="bisiesto";
                                
$salir=true;
                            }
                            else
                            {
                                
$estado=35;
                            }
                            break;
                        case 
34:    
                            if(
$delantero==$longitud)
                            {
                                
$es="noBisiesto";
                                
$salir=true;
                            }
                            else
                            {
                                
$estado=35;
                            }
                            break;
                        case 
35:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarBisiesto() 
  #7 (permalink)  
Antiguo 28/09/2005, 01:10
Avatar de Jorgemen  
Fecha de Ingreso: mayo-2005
Ubicación: Perú
Mensajes: 322
Antigüedad: 18 años, 11 meses
Puntos: 1
Validar Código Universitario
Código PHP:
function verificarCodigo($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=='7')||($c=='8')||($c=='9'))
                            {
                                
$estado=1;
                            }
                            elseif(
$c=='0')
                            {
                                
$estado=9;
                            }
                            else 
                                
$estado=15;
                            break;
                        case 
9:
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='0')||($c=='1')||($c=='2')||($c=='3')||($c=='4')||($c=='5'))
                            {
                                
$estado=10;
                            }
                            else 
                                
$estado=15;
                            break;
                        case 
10:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=11;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
11:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=12;
                            }
                            else
                            {
                                
$estado=15;
                            }
                        case 
12:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=13;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
13:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=14;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
14:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='a')||($c=='b')||($c=='c')||($c=='d')||($c=='e')||($c=='f')||($c=='g')||($c=='h')||
                                (
$c=='i')||($c=='j')||($c=='k'))
                            {
                                
$estado=16;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
16:
                            if(
$longitud==$delantero)
                            {
                                if(
$this->letraCorrecta($edValor))
                                {
                                    
$es=true;
                                    
$salir=true;
                                }
                                else
                                    
$estado=15;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            
                            break;
                        case 
1:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=2;
                            }
                            else 
                            {
                                
$estado=15;
                            }
                            break;
                        case 
2:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=3;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
3:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=4;
                            }
                            else
                            {
                                
$estado=15;
                            }
                        case 
4:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=5;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
5:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if (
$this->esDigito($c))
                            {
                                
$estado=6;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
6:    
                            
$c=$edValor[$delantero];
                            
$delantero++;
                            if ((
$c=='a')||($c=='b')||($c=='c')||($c=='d')||($c=='e')||($c=='f')||($c=='g')||($c=='h')||
                                (
$c=='i')||($c=='j')||($c=='k'))
                            {
                                
$estado=7;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            break;
                        case 
7:    
                            if(
$longitud==$delantero)
                            {
                                if(
$this->letraCorrecta($edValor))
                                {
                                    
$es=true;
                                    
$salir=true;
                                }
                                else
                                    
$estado=15;
                            }
                            else
                            {
                                
$estado=15;
                            }
                            
                            break;
                        case 
15:    
                            
$salir=true;
                            break;
                        default:
                            echo 
"ocurrio un error!!";
                    }    
// fin swhish
                
}     //fin while
            
return $es;
        }
//FIN verficarFraccion() 
  #8 (permalink)  
Antiguo 30/09/2005, 16:39
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 7 meses
Puntos: 0
Se utilizan bastente, aunque a veces inadvertidos

Hola,

Estoy 100% de acuerdo contigo. Muchas veces se desprecia el uso de automatas en soluciones, sobre todo los automatas finitos deterministas; otras veces los programadores lo utilizan sin tener idea de que eso exactamente lo que estan utilizando.

Los ejemplos que has puesto anteriormente quisas pudieran resolverse mediante otras vias, pero hay muchos casos en que es necesario el uso de automatas.

En la ingenieria de un software es necesario tener en cuenta suficiente flexibilidad en las soluciones para garantizar aplicar las soluciones que proponemos en la mayor cantidad de esenarios posibles.

Voy a poner un ejemplo basado en la contruccion de un CMS ( Content Management System ) de como se hace necesario la utilizacion de un automata "dinamico" para manejar el workflow de una noticia.

Cuando hablamos de noticia como entidad dentro del CMS notaremos que presenta un estado actual; este estado es realmente dinamico segun el contexto donde vayamos a utilizar el CMS, y asi mismo de dinamico es la variacion de este atributo estado de la noticia.

En el caso de una editorial digital que fuese a utilizar nuestro CMS pues la noticia debe pasar por una secuencia de estados ( muy especifica para esta editarial ) que permiten el correcto funcionamiento del sistema, especificamente los estados de la noticia serian ( inedita, aprobada, correjida, rechazada, publicada, archivada, etc.. ) para que, segun el esquema de trabajo de un periodico digital, la noticia deba ser creada, luego revisada por un corrector, luego aprobada por un jefe de redaccion, y publicada y despublicada por un publicador; cada rol lleva la noticia a un estado diferente como pueden seguramente comprobar.

Ahora, en el caso de la utilizacion del CMS por parte simple cliente que solo necesita publicar noticias en su sitio web el conjunto de estados de una noticia seria diferente, asi como los roles que interactuan en el cambio de estado de la misma. En este caso la noticia solamente necesitaria tener los estados de inedita, publicada, archivada porque no tenemos ni jefes de redaccion, ni publicadores especializados, ni correctores, entre otros.

Por lo tanto la definicion de los estados de las noticias, asi como las interacciones de los diferentes roles para diferentes dominios del problemas, estan sujetos a un dinamismo; y una solucion para esto es representar los estados y el cambio de estos mediante un automata finito determinista "dinamico" o especifico para cada caso ( uno para la agencia de prensa digital, y otro para el simple cliente ). De esta forma representamos el workflow que se necesita para cada caso.

Espero que con este ejemplo vean que es muy util la utilizacion de los automatas.

Saludos
__________________
Alojamiento Web - Alojamiento web y Servidores dedicados. Servidores en USA y Londres.
Hosting,PHP,Java,CSS,SEO BLOG - Web Hosting, Posicionamiento Web, Programacion en PHP, Java, CSS y mucho mas.
  #9 (permalink)  
Antiguo 03/11/2005, 14:32
 
Fecha de Ingreso: mayo-2005
Mensajes: 201
Antigüedad: 18 años, 11 meses
Puntos: 2
Primero para jorgemen, seria conveniente que pusieras en las faqs las impmentaciones con auomatas que hiciste para que esten al alcanze de los demas y no se pierdan en este mensaje.

Segundo y como aportacion adicional a la excelente explicacion de javier_enithost en general los automatas y las maquinas de estado finitas son de interes en el desarrollo OO, ya que los objetos en su naturaleza tiene estados de acuerdo a ciertas condiciones, de tal modo que hasta en UML existen mediante los diagramas de actividades y los diagramas de estado, para modelar el comportamento interno de los objetos.
__________________
Saludos!
Mty-NL..
  #10 (permalink)  
Antiguo 11/11/2005, 14:48
Avatar de Webstudio
Colaborador
 
Fecha de Ingreso: noviembre-2001
Ubicación: 127.0.0.1
Mensajes: 3.499
Antigüedad: 22 años, 5 meses
Puntos: 69
Estoy de acuerdo acuerdo con Herminio, no tanto con Jorgemen o Javier, ya que si bien la vida de un objeto puede compararse a una máquina de estados, el acercamiento de Jorgemen es neta y puramente procedural, aunque esté alojado en una función encapsulada. Y además, un autómata se utiliza para la resolución de caminos a través de estados, no para temas tan triviales como el status de una nota en un CMS. Esto es, para mi, un claro caso de sobreingeniería.
__________________
Tutoriales Photoshop | Web-Studio.com.ar
Artículos PHP | ZonaPHP.com
  #11 (permalink)  
Antiguo 12/11/2005, 18:24
 
Fecha de Ingreso: septiembre-2005
Mensajes: 30
Antigüedad: 18 años, 7 meses
Puntos: 0
Solo mi comentario, pero bien fundamentado

Hola :

Bueno .. voy a centrar mi debate con webstudio y hersan principalmente; es fundamental que siempre intercambiemos opiniones.

Las referencias que hare son todas basadas en la teoria de POO y UML, pero basada sobre todo en las fundamentaciones de Grady Booch, uno de los padres de la ingenieria del software y de los grandes como se podria decir. Es uno de los duennos de la compannia Rational Software, seguro sabran de ella.

Primero que todo respeto las opiniones de ambos.
Por que no coincido que es redundancia hablar de clases/atributos + objetos/estados y maquinas de estados ???? Por que les aseguro que mi ejemplo NO es sobre-ingenieria ????

Una clase es una representacion abstracta que define la estructura y comportamiento BIEN DEFINIDOS que le son comunes a un grupo de objetos.
---- estoy basado en la definicion de clases -----

El estado de un objeto se define a partir de los valores que en un momento dado tiene el conjunto de los atributos que lo forman.

El paso de estado de un objeto depende fundamentalmente de su comportamiento BIEN DEFINIDO .... en el ejemplo que yo puse nuestro modelo de solucion es exactamente el mismo pero el dinamismo del cambio de estados rompe con el comportamiento bien definido que antes enfatize tanto.

El cambio de estados de un objeto puede estar representado por una maquina de estados, pero no siempre viceversa. ( si no cumple la def. de objetos/clases )

Insisto que el intercambio siempre es muy bueno, asi que espero por sus respuestas


Saludos
__________________
Alojamiento Web - Alojamiento web y Servidores dedicados. Servidores en USA y Londres.
Hosting,PHP,Java,CSS,SEO BLOG - Web Hosting, Posicionamiento Web, Programacion en PHP, Java, CSS y mucho mas.

Última edición por javier_enithost; 12/11/2005 a las 18:33
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta

SíEste tema le ha gustado a 1 personas (incluyéndote)




La zona horaria es GMT -6. Ahora son las 16:21.