Ver Mensaje Individual
  #2 (permalink)  
Antiguo 23/10/2006, 14:06
Avatar de Erikfrancisco
Erikfrancisco
 
Fecha de Ingreso: noviembre-2003
Ubicación: Estado de México
Mensajes: 503
Antigüedad: 22 años, 10 meses
Puntos: 4
Hola de nuevo, la respuesta la tienes en este código:

Código PHP:
<?php  
$operacion 
= "30*2+8/6";
$pos = 0;

if ( !
is_int ( $operacion ) ) 
{
   for ( 
$y = 0; $y < strlen ( $operacion ); $y++ )
   {
      
$operaciones = array ( '+', '-', '*', '/' );

      for ( 
$x = 0 ; $x < count ( $operaciones ); $x++ )
      {
         if ( 
substr ( $operacion, $pos, 1 ) == $operaciones[$x] )
         {
            
// si encontro una operación guardamos su posicion y la operacion
            
$op[] = $pos.",".substr ( $operacion, $pos, 1 );
         }
      }
      
$pos += 1;
   }

   
$contador = 1;
   
$acumula = 0;

   for ( 
$e = 0; $e < count ($op); $e++ )
   {
      
$divide = explode ( ",", $op[$e] );

      if ( 
$e != count ( $op ) - 1 )
      {
         
$siguiente = explode ( ",", $op[$e + 1] );
         
$sig_operacion = $siguiente[0] + 1;
      }
      else
      {
         
$sig_operacion = strlen ( $operacion ) - ( $divide[0] + 1 );
      }

      if ( 
$contador == 1 )
      {
         
$calcula[] = substr ( $operacion, 0, $divide[0] );
         
$calcula[] = substr ( $operacion, $divide[0] + 1, $sig_operacion );

         switch ( 
$divide[1] )
         {
            case 
'+':
               
$resultado = $calcula[0] + $calcula[1];
               break;
            case 
'-':
               
$resultado = $calcula[0] - $calcula[1];
               break;
            case 
'*':
               
$resultado = $calcula[0] * $calcula[1];
               break;
            case 
'/':
               
$resultado = $calcula[0] / $calcula[1];
               break;
            default:
               echo 
'<p>No es una operación valida.</p>';
               break;
         }

         
$acumula = $resultado;
         
$contador += 1;
      }
      else
      {
         
$calcula = substr ( $operacion, $divide[0] + 1, $sig_operacion );

         switch ( 
$divide[1] )
         {
            case 
'+':
               
$resultado = $acumula + $calcula;
               break;
            case 
'-':
               
$resultado = $acumula - $calcula;
               break;
            case 
'*':
               
$resultado = $acumula * $calcula;
               break;
            case 
'/':
               
$resultado = $acumula / $calcula;
               break;
            default:
               echo 
'<p>No es una operación valida.</p>';
               break;
         }
         
$acumula = $resultado;
      }
   }

   echo 
$acumula;
}
else 
{ 
   echo 
$operacion; 
}
?>
Nota: No se podrán hacer operaciones con cararcteres extraños, es decir, la operacion a realizar no puede estar declarada de esta forma (2*8)-6, pero si puede estar de este modo 2*8-6. ¿Me entiendes? La variable operación sólo puede contener números y las operaciones /,*,+,-.

Espero te sirva de algo o por lo menos te de una idea. Suerte