jueves, 12 de septiembre de 2013

Decimal a binario en PHP

Otro de los algoritmos más famosos por la comunidad de programadores es pasar un número entero positivo al sistema binario ( es decir, a 0 y a 1), que es el "lenguaje" que entienden nuestros aparatos eléctricos, domésticos y ordenadores entre otros.

Por ejemplo, para pasar el número decimal 100 a binario, únicamente tenemos que ir dividendo entre 2 y el resultado volverlo a dividir hasta que sea 1. Después de derecha a izquierda, cogemos todos los restos y los ordenamos. Aquí tenéis un ejemplo.
Conversion.JPG

Una de las posibles soluciones ( y la más complicada) es este ejemplo, dónde para solucionar el algoritmo hay que crear dos bucles y un array que almacene los restos de las divisiones.

<?php
/* Creamos la variable dividendo y la mostramos por pantalla */
$dividendo=64;
echo 'El numero en decimal es: '.$dividendo;
/*Creamos la funcion con un bucle while*/

function binario($dividendo)
{
	$resultadoRestos=array(); /*Creamos un array para ir almacenando los restos*/
	while ($dividendo > 0)
	{
		$resultado=$dividendo/2; /*Calculamos el resultado*/
		$resto=$dividendo%2; /*Calculamos el resto de la division*/
		$resultadoRestos[]=$resto; /*Almacenamos el resto*/
		$dividendo=intval($resultado); /*Asignamos el numero entero resultante a la  variable dividendo de nuevo*/
	}
	/*Ordenamos el array por el indice descendente y creamos un bucle foreach para mostrar el valor*/
	krsort($resultadoRestos); 
	foreach ($resultadoRestos as $clave => $valor) 
	{ 
		echo $valor; /*Imprimimos el valor*/
	} 
}

/* LLamamos a la función y la mostramos por pantalla */

echo ' y en binario es: ';
$binarios=binario($dividendo);
?>

Y la siguiente solución (muchísimo más correcta y con menos código) utilizando la función de PHP decbin.

<?php
/* Creamos la variable $numero y la mostramos por pantalla */

$numero=5;
echo 'El numero en decimal es: '.$numero;

/*Ahora creamos la variable $binario con la función de PHP decbin y la mostramos*/

$binario=decbin($numero);
echo ' y en binario es: '.$binario;
?>

Por último, si queremos pasar un número binario a decimal lo más sencillo sería usar la función de PHP bindec, que nos ahorrará mucho tiempo!

La función Factorial en PHP

Hoy hablaremos de la función factorial, ampliamente conocida por todos los programadores y entusiastas de las matemáticas.

Es una función muy utilizada como por ejemplo en el cálculo de binomiales. Para los que empezamos en el mundo de la programación, es una de las funciones que siempre aprendemos; tanto para practicar los bucles como para las funciones recursivas.

Voy a exponer algunas la formas de resolver esta función:

La primera, con un bucle for.

<?php
/* Creamos la variable con el número que deseamos y lo mostramos por pantalla */

$numero= 5;
echo 'El factorial del numero: '.$numero;

/* Creamos la función con un bucle for decreciente, recorremos $numero y que nos devuelve el resultado en la variable $total */

function factorial($numero)
{
	$total=1;
	for ( $i = $numero ; $i >= 1 ; $i--) 
	{
		$total=$total*$i;
	}
	return $total;
}

/* LLamamos a la función y la mostramos por pantalla */

$resultado=factorial($numero);
echo 'Da como resultado: '.$resultado;
?> 


La segunda opción, es con una funcion recursiva.

<?php
/* Creamos la variable con el número que deseamos y lo mostramos por pantalla */

$numero= 6;
echo 'El factorial del numero: '.$numero;

/*Creamos la función recursiva*/

function factorial($n)
{
   if($n==1)
      return 1;
   else
      return $n * factorial($n-1);
}

/*Llamamos a la función y mostramos el resultado*/

echo 'Da como resultado: '.factorial($numero);
?> 

La tercera opción, con la función definida GMP_FACT (añadir el módulo en php.ini si no está habilitado)

<?php
/* Creamos la variable con el número que deseamos y lo mostramos por pantalla */

$numero= 5;
echo 'El factorial del numero: '.$numero;

/*Utilizamos la función gmp_fact para calcular el factorial y la función gmp_strval para mostrarla*/

$resultado = gmp_fact($numero);
echo 'Da como resultado: '.gmp_strval($resultado);
?> 

Como veis el resultado es el mismo, os dejo a vosotros la elección a vuestro gusto.