Foros del Web » Programando para Internet » PHP »

PHP OO Calculadora POO duda función preg_match

Estas en el tema de Calculadora POO duda función preg_match en el foro de PHP en Foros del Web. bueno hola soy nuevo en el foro y también programando en php, estaba bien con la calculadora sumando restando multiplicando dividiendo ahora quería mejorarlo y ...
  #1 (permalink)  
Antiguo 18/08/2011, 14:22
 
Fecha de Ingreso: agosto-2011
Ubicación: la paz
Mensajes: 83
Antigüedad: 12 años, 8 meses
Puntos: 4
Pregunta Calculadora POO duda función preg_match

bueno hola soy nuevo en el foro y también programando en php, estaba bien con la calculadora sumando restando multiplicando dividiendo ahora quería mejorarlo y por eso agregue RAÍZ, EXPONENTE, HEXADECIMAL Y BINARIO

EL PROBLEMA:

bueno estoy usando la función preg_match cosa de que me reconozca +,-,*,/, esos signos ahora como hago para que me reconozca raíz exponente hexa y bina

el preg_match que use para +,-,/,* me lo paso un amigo la verdad no entiendo muy bien como funciona todavía lo leí en el manual pero no me deja algo claro

si lo haces correr funciona bien solo la (+,-,*,/) . Pero no lanza el resultado si es que quisiera sacar raíz, exponente hexa o bina.

me falta el código de hexa y bina eso luego lo resolvere. bueno en si mas que todo mi duda es como funciona el preg_match y el código que debo utilizar para sacar lo que deseo. o por lo menos como hacer para que funcionen la raiz y exponente

el codigo

Código PHP:
<html>
<head>
<title>Calculadora</title>
</head>
<body>
<?php
class calculadora {
    var 
$nums '';
    var 
$calc '';
    var 
$op '';

    function 
mostrar () {
        
$num = @$_GET['num'][0];
        
$calc = @$_GET['calc'];

        if(empty( 
$num ) AND empty( $calc )) {
            return 
false;
        }

        if(!isset( 
$display )) {
            
$display $calc;
        }

        
$this->nums .= empty( $num ) ? $display $display.$num;

        
$this->setOperacao();

        if(!empty( 
$this->op )) {
            
$this->calc $this->nums.rawurldecode$this->op ).$num;
        }

        return 
$this->calcular();
    }

    function 
setOperacao () {
        if(!empty( 
$_GET['op'] )) {
            
$this->op $_GET['op'];
        }
    }

    function 
calcular() {
        
$calc = empty( $this->calc ) ? $this->nums $this->calc;

        if(isset( 
$_GET['resultado'] )) {
            if(
preg_match'/^([0-9]+)(\/|\*|\+|\-)([0-9]+)+$/'$calc$match )) {
                switch( 
$match[2] ) {
                    case 
"+":
                    return 
$match[1]+$match[3];
                    break;
                    case 
"-":
                    return 
$match[1]-$match[3];
                    break;
                    case 
"/":
                    return 
$match[1]/$match[3];
                    break;
                    case 
"*":
                    return 
$match[1]*$match[3];
                    break;
                    case 
"^":
                    return 
pow($match1[1],$match[3]);
                    break;
                    case 
"raiz":
                    return 
sqrt($match1[1]);
                    break;
                }
            } else {
                return 
"Ocorrio un error";
            }
        }
        return 
$calc;
    }
}
$calc = new calculadora();
?>
<form action="" method="get">
<table id="calculadora" cellpadding="10" cellspacing="0" align="center">
<tr>
  <td align="center" colspan="5">
      <span id="titulo">Calculadora</span><br/>
       <input id="calc" type="text" name="calc" value="<?=$calc->mostrar();?>"/>
   </td>
</tr>
<tr>
  <td>
     <input type="submit" name="num[]" value="7" />
  </td>
  <td>
     <input type="submit" name="num[]" value="8" />
  </td>
  <td>
     <input type="submit" name="num[]" value="9" />
  </td>
  <td>
     <input type="submit" name="op" value="/" />
  </td>
  <td>
     <input type="submit" name="op" value="^" />
  </td>
</tr>
<tr>
  <td>
     <input type="submit" name="num[]" value="4" />
  </td>
  <td>
      <input type="submit" name="num[]" value="5" />
  </td>
  <td>
      <input type="submit" name="num[]" value="6" />
  </td>
  <td>
      <input type="submit" name="op" value="*" />
  </td>
  <td>
     <input type="submit" name="op" value="raiz" />
  </td>
</tr>
<tr>
   <td>
      <input type="submit" name="num[]" value="1" />
   </td>
    <td>
<input type="submit" name="num[]" value="2" />
   </td>
   <td>
      <input type="submit" name="num[]" value="3" />
   </td>
   <td>
      <input type="submit" name="op" value="-" />
   </td>
   <td>
     <input type="submit" name="op" value="hexa" />
  </td>
</tr>
<tr>
  <td>
      <input type="submit" name="num[]" value="0" />
  </td>
  <td>
      <input type="submit" name="num[]" value="." />
  </td>
  <td>
      <input type="submit" name="resultado" value="=" />
  </td>
  <td>
      <input type="submit" name="op" value="+" />
  </td>
  <td>
     <input type="submit" name="op" value="bina" />
  </td>
</tr>
<td align="center" colspan="5"> <input type="reset" value="restaurar"/></td>
</table>
</form>
</body>
</html>
  #2 (permalink)  
Antiguo 18/08/2011, 15:25
Avatar de jotaincubus  
Fecha de Ingreso: mayo-2005
Ubicación: Medellin - Colombia
Mensajes: 1.797
Antigüedad: 18 años, 11 meses
Puntos: 394
Respuesta: Calculadora POO duda función preg_match

Veraz preg_match utiliza expresiones regulares, en si la función es simple, lo que te paso tu amigo lo que hace es separar los numero de los símbolos para saber que operación debe realizar la calculadora.

Miremos el exponencial

echo pow(-1, 20);

Entonces deberás modificar la expresión regular para que te saque el POW para saber que el usuario esta utilizando exponencial.

O también podes utilizar algún símbolo especial para que en la expresión regular lo saques y sepas que eso es exponencial.

Pásate por la wiki del foro que hay un tema espectacular acerca de expresiones regulares.
__________________
Por que existe gente que no agradece después de que se le ha brindado tiempo y ayuda ???
  #3 (permalink)  
Antiguo 18/08/2011, 15:29
Avatar de andresdzphp
Colaborador
 
Fecha de Ingreso: julio-2011
Ubicación: $this->Colombia;
Mensajes: 2.749
Antigüedad: 12 años, 9 meses
Puntos: 793
Respuesta: Calculadora POO duda función preg_match

Hola amils21, la expresión regular que tienes sólo sirve en caso de tener 2 números y un signo, en el caso de la raiz cuadrada sólo necesitas el número al cual le vas a sacar la raíz cuadrada. Número + Signo, podrías hacer algo así antes de empezar la primera condición de preg match:

Código PHP:
Ver original
  1. if (preg_match('/([0-9]+)(raiz|bina|hexa)/', $calc, $match2)) {
  2.    
  3.     switch ($match2[2]) {
  4.         case "raiz":
  5.             return sqrt($match2[1]);
  6.             break;
  7.     }
  8.    
  9.     return $calc;
  10.  
  11. }

De esta forma la calculadora espera un número y que se decida que operación hacer (raiz, bina o hexa).
__________________
Si sabemos como leer e interpretar el manual será mucho más fácil aprender PHP. En lugar de confiar en ejemplos o copiar y pegar - PHP

Última edición por andresdzphp; 18/08/2011 a las 15:35 Razón: Quité algo que no era necesario
  #4 (permalink)  
Antiguo 18/08/2011, 16:40
 
Fecha de Ingreso: agosto-2011
Ubicación: la paz
Mensajes: 83
Antigüedad: 12 años, 8 meses
Puntos: 4
Respuesta: Calculadora POO duda función preg_match

muchas gracias muchachos me sirvio la ayuda este preg_match me esta dando problemas pero ya entendi un poco mejor gracias me sirvio de mucho el codigo y si voy a pasar por el wiki del foro.

Pero ahora no s epor que mi botos restaurara que deberia dejar el texbox en blanco no fonciona pero sera en otra gracias.

Etiquetas: calculadora, html, poo
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




La zona horaria es GMT -6. Ahora son las 17:20.