Números impares

March 09, 06 by serumax

Resulta que los duños de una de la páginas en que estoy trabajando querían hacer un truquillo para que si el día era par (2, 4, 6, etc.) los correos de un formualrio fuesen enviado a una dirección y si el día era impar (1, 3, 5, etc.) fuesen a otro email.

No era la primera vez que me enfrentaba a este sencillo dilema de los nones y pares (útil para ir alternando, por ejemplo, el background de los comentarios). Anteriormente había recurrido a trucos poco elegantes como hacer bucles dejando una variable que me sirviera de ancla al resetearla a 0 vuelta por medio.


$vuelta=0;

for ($i=0; $i<31; $i++){

if ($vuelta==0){
$background="#FFFFFF"; //hacer una cosa
$vuelta+= 1;
}
else{
$background="#000000"; //hacer otra
$vuelta = 0;
}

}

Otra posibilidad, tal vez menos burda que la anterior, era meter los números pares en un array para luego comprobar si el número del día estaba dentro o no.


$pares=array (2,4,6,8,10,12,14,16,18,20,22,24,26,28,30);
$dpi= date(d);

if (in_array ($dpi, $pares)) {
$background="#FFFFFF"; //hacer una cosa
else{
$background="#000000"; //hacer otra
}

Pero el que busca siempre encuentra. La verdad es que tenía el razonamiento claro (un número impar solo es divisible por si mismo para que de como resultado un número natural, el 1), pero no sabía como expreslo en PHP. Porbando a tientas ponía


if (!$num/$num){//es par}

if ($num/$num){//es impar}

Pero no daba, al final por ahí encontré una solución para javascript que me sirvió, dado que la sintaxis es prácticamente la misma. No sé mucho cómo va (para las matemáticas soy un asco), pero el caso es que dependiendo si el numero es par o impar “$dpi % 2″ arroja como resultado 0 ó 1. Y por cierto, como solución es mucho más elegante que las otras, incluso se podría usar para crear automáticamente lun array con números primos y otro con pares, por si llegase a ser necesario ir almacenando los números para su uso posterior.


$dpi= date(d);

if ($dpi % 2){
$background="#FFFFFF";
}else{
$background="#000000";
}

Tutoriales
Technorati tags: ,

Add your comment

8 responses for this post

  1. ismael Says:

    Hola.
    Lo puedes resumir más todavía:

    $dpi= date(d);

    $background = $dpi % 2?”#FFFFFF”:”#000000″;

  2. Serumax Says:

    Ismael, es un gusto verte por acá nuevamente. Justamente hace unos días, tratando de modificar un plugin, estuve tratando de reslover el misterio que me planteas. Ahora con tu ejemplo me ha quedado más que claro. Gracias.

  3. Biel Says:

    Hola!
    No quisiera ser descortés… pero como matemático tengo los pelos de punta!! :D

    La verdad es que tenía el razonamiento claro (un número impar solo es divisible por si mismo para que de como resultado un número natural, el 1), pero no sabía como expreslo en PHP.

    Qué?? Un número ___primo___ es sólo divisible por 1 y por si mismo!!! Pero un número impar cualquiera, ni mucho menos!! Por ejemplo, 9 es impar, y es divisible por 3.
    Además, tanto si el número es par, como impar, $num/$num siempre es = 1!!!

    De paso, te explico que hace el $dpi % 2.
    El % en php es la operación módulo. Esta operación devuelve como resultado el resto de la división. En este caso, el divisor es 2, y por lo tanto, si vale 0 quiere decir que el resto de la división es cero, y por lo tanto par. Si es 1, es impar.

    Bueno, de todas maneras, el blog está muy bien ;)

  4. Serumax Says:

    Gracias por comentar.

    La idea es aprender entre todos… yo para las matemáticas soy nulo, debo reconocerlo. Esto de los impares era una de las cosas que más me complicaba para implementarlo PHP y la documentación es muy poca al respecto. La nota la hice con trozos de información que enconté a través de Google.

    Vuestra aclaración me parece excelente y si puedes orientarnos más con algún enlace donde se explique en profundidad se agradece.
    Saludos

  5. SOUR Says:

    Hola, mira yo también necesitaba algo similar a tí, aca hay un ejemplo que lo adecue a lo que yo necesitaba….imprime los números pares e impares desde el 1 al 5000, ahí puedes adecuarlo…suerte.

    $pares = 0;
    $impares = 0;
    for ($i=1; $i “;
    $pares++;
    }
    else {
    echo “El número $i es un número IMPAR “;
    $impares++;
    }
    }

  6. SOUR Says:

    el código quedo incompleto…. aca va otro….

    echo “Números Pares“;
    $pares = 0;
    for ($i=1; $i “;
    $pares++;
    }
    }

  7. serumax Says:

    Gracias por tu comentario.
    Mira la respuesta de Ismael, es mucho más sencillo de esa forma. Además esa sintaxis es práctica para muchos otros caso.

  8. Marcos Says:

    Mira yo en esta pagina probe este codigo:
    <?php
    $numero = $_POST['numero'];
    $division = $numero / 2;
    $resto = $numero % 2;
    switch($resto){
    case 1: $tipo = “Impar”;
    break;
    default: $tipo = “Par”;
    }

    echo”";
    echo”";
    echo”introduzca un numero para ver si es par o impar”;
    echo”";
    echo”";

    if($numero){
    echo “El resultado de la division es: “.$division;
    echo “El resultado del resto es: “.$resto;
    echo “El numero “.$numero.” es un numero “.$tipo;
    }
    ?>

    Pero con cifras sobre 10 digitos se equivoca dando todos impares.
    Alguna sugerencia?
    Gracias

Leave a Reply

Tag cloud widget powered by nktagcloud