PDA

Ver la versión completa : Es correcto?




jairogon
07-01-2010, 06:39 PM
fact *=n==0 ? 1.0 : n;


Es correcto expresar lo anterior como



fact=fact*n;
if(fact==0) fact=1.0;
else fact=n;

csaralg
07-01-2010, 08:56 PM
Hola, me parece que no es correcto.



fact *= n==0 ? 1.0 : n;


se puede expresar de esta forma:



if( n==0 ) {
fact = fact * 1.0;
}
else {
fact = fact * n;
}


¿quieres calcular el factorial de n? que te parece éste código:



int fact = 1;
while( n!=0 ) fact *= n--;


Saludos.

Shell Root
07-01-2010, 09:14 PM
A simple vista, es correcto. Falta mirar en tiempo de ejecución.


Hola, me parece que no es correcto.
mmm no sé, creo que si es correcto.

csaralg
07-01-2010, 09:52 PM
@Shell Root

Seguro? Ummm...

El codigo:

fact *= n==0 ? 1.0 : n;

Esta usando una estructura de asignacion condicional:

[variable] = [codicion] ? [valor si verdadero] : [valor si falso]

eso se puede representar como:

if( [condicion] ) {
[variable] = [valor si verdadero]
}
else {
[variable] = [valor si falso]
}

pero el operador de asignación no es simple es una asignación con producto:

[variable] *= [valor]

que puede expresarse como:

[variable] = [variable] * [valor]

Reemplazando:

[variable] = fact
[condicion] = n==0
[valor si verdadero] = 1.0
[valor si falso] = n

nos quedara:



if( n==0 ) {
fact = fact * 1.0;
}
else {
fact = fact * n;
}


El código de jairogon, esta bien escrito sintácticamente pero no representa la instrucción que quiere.

Saludos.