Hola, estaba mirando casualmente dos temas, uno que se refiere al operador ternario y otro sobre como obtener el mayor de 3 números..
y en el tema del operador ternario se hablaba acerca de la utilidad de este operador, en este caso compruebo que resulta conveniente usarlo..
por eso vean la función 2 parece la más conveniente aunque en realidad a mi forma de verlo las 3 terminan realizando comparaciones, que a nivel de ensamblador resultan simples restas..
si alguno sabe como el procesador procesa la información o al menos sabe como se realizan las comparaciones, sabrá a que me refiero.
int max_valor_de_tres_1(int a,int b,int c){
if(a>b)
if(a>c)
return a;
if(b>a)
if(b>c)
return b;
if(c>a)
if(c>b)
return c;
return 0;
}
int max_valor_de_tres_2(int a,int b,int c){
return a>b? (a>c?a:(b>c?b:c)) : (b>c?b:c);
}
int max_valor_de_tres_3(int a,int b,int c){
if((a-b>0)&&(a-c>0)){return a;}
if((b-a>0)&&(b-c>0)){return b;}
if((c-a>0)&&(c-b>0)){return c;}
return 0;
}
int main(){
int a,b,c;
a = 3;
b=4;
c=5;
int res = max_valor_de_tres_3(a,b,c);
printf("%d",res);
printf("\n");
system("pause");
return 0;
}
Estos eran los temas
http://foro.elhacker.net/programacion_cc/aporte_operador_condicional-t383420.0.html
http://foro.elhacker.net/programacion_cc/help_calcular_maximo_de_3_numeros_usando_funcion-t383403.0.html
muy bueno.
Y si los valores de dos de esas 3 variables es igual?
Cita de: CloudswX en 21 Febrero 2013, 03:53 AM
Y si los valores de dos de esas 3 variables es igual?
return 0;
retorna 0
aunque debería retornar algo como "false" o NaN porque si el mayor es 0 entonces tendrías un error en el algoritmo
claro, por eso yo decía que la mejor es la función 2, las otras estaban incompletas...
igualmente se puede ahcer eso que dice engelx, es decir , luego de llamar a la función , se evalúa el resultado (por ejemplo 'false') y en base a eso se determina que se va a usar uno de los números, etc también la función puede retornar uno de los números si los 3 son iguales, igualmente me quedo con la opción B para este problema ;D
Cita de: 85 en 21 Febrero 2013, 01:46 AM
Hola, estaba mirando casualmente dos temas, uno que se refiere al operador ternario y otro sobre como obtener el mayor de 3 números..
Algunas observaciones.
Cuando se busca el máximo de tres números si no es uno de los dos primeros debe ser el ultimo. La primera función se puede reducir a:
int max_valor_de_tres_1(int a,int b,int c)
{
if (a > b && a > c)
return a;
if (b > a && b > c)
return b;
return c;
}
En la segunda función primero se comparan las variables a y b, el menor de estos debe ignorarse en las siguientes comparaciones ya que no es posible que sea el máximo. Se reduce a:
int max_valor_de_tres_2(int a,int b,int c)
{
return a > b ? (a > c ? a : c) : (b > c ? b : c);
}
En la tercera función se debe evitar el uso de expresiones como "a - b" porque en el lenguaje C si el resultado de la resta sale del rango valido del tipo int se genera comportamiento no definido, esto es, no hay garantías sobre el comportamiento del programa. Mejor utilizar las comparaciones "a > b", "a > c", etc. ya que son directas y su resultado esta garantizado (1 o 0, dependiendo del resultado de la comparación).
Por ultimo otra opción es combinar el uso de una sentencia condicional y el operador ternario:
int max_tres(int a, int b, int c)
{
if (a < c)
a = c;
return a > b ? a : b;
}
Un saludo