Duda muy facil

kubanita09
04 de Junio del 2009
Hola estoy aprendiendo a programar y tengo algunas dudas por ejemplo en esta funcion quiero hallar el factorial de un # y no logro que en la segunda iteracion del for ;la var que guarda la multiplicacion del # que me entran por el numero anterior se mantenga, es decir por ejemplo:
la primera vez que el ciclo entra seria:
$var = $numero * ($numero -1)
si el # k me entran es un 5 la $var tendra 20 entonces lo k kiero es k la segunda vez que entre me multiplique 20 * numero que le sigue o sea por 3 y lo que he logrado hacer es k la primera vez lo haga pero ya la segunda vez la var toma valor 0 y lo que hace es multiiplicar el nuevo numero que me entran por el anterior, aki le hice unnos cambios y esta peor menos que menos me hace lo que quiero
function factorial($n)
{

for ($i = $n ; $i >= 2 ; $i--)
{
if ($n <= 0)

print ("Debe introducir un numero mayor que 0");

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

$var = $factorial * $i;
}

return $var;
}

echo $var = factorial(5);

si me pueden ayudar se los agradecere, tendre muchas mas dudas.

ahhh otra kosilla no se como saber si un numero es impar o no tengo esto pero es evidente que no se cumple la condicion del if pork esta muy mal declarada:

function Numeros_Primos($numero)
{
$n_primo = $numero /2;

if ($n_primo == float) //tengo k ver como decir si un # es primo o no
{
echo "true";
return true;
}
else

echo "false";
return false;
}

echo $var = Numeros_Primos(3);

gracias..

bng5
04 de Junio del 2009
Hola, así como vos sos nueva en la programación yo soy nuevo en esto de los foros. Esta es la primera vez que entro a uno.

Con respecto a los factoriales, te paso tu función corregida

<?php

function factorial($n)
{
if($n <= 0)
{
print ("Debe introducir un numero mayor que 0");
return false;
}
for($i = ($n - 1); $i >= 2; $i--)
{
// Esto no sería necesario ya que la cabecera de bucle tiene indicado que se ejecute mientras $i >= 2
//if($n <= 0)
// print ("Debe introducir un numero mayor que 0");
$n *= $i;
// Algunas veces puede ser muy útil que imprimas las operaciones pra darse cuenta qe es lo que está pasando
//echo "${n} *= ${i}n";
}
return $n;
}

echo factorial(6);

?>

El principal problema era que estabas redeclarando la varible $var en cada iteración, por lo que $var valía el resultado de la última iteración.

para eso cambiás (por ejemplo)
$var = (5 + 1);
por
$var += (5 + 1);
$var -= (5 + 1);
$var *= (5 + 1);
$var /= (5 + 1);

de esta manera afectás el valor de $var en lugar de ignárselo.

Para saber si un número es impar alcanza con utilizar el módulo:

if($n % 2)

si la condición se cumple es impar. El módulo vendría a ser el resto de una división.