TRES 3 NUMEROS; COMPARAR Y VER EL MAYOR

soldier_01
10 de Marzo del 2004
Que tal, les recuerdo q soy novato en esto y agradesco su ayuda de antemano, la cosa esta así:
debía hacer un programa q me diga que numero de 3 q el usuario intrusca el el mayor, en un inicio hice algo asi:
if (a>b && b>c) toncs A es mayor
if (b>a && b>c) toncs B es mayor
if (c>a && c>b) toncs C es mayor

pero pues ahi hay muchas otras cosas q validar, lo mostre al maestro de mi clase, pero me dijo q no lo queria con &&, que usara alguna validacion con 2 numero unicamente y q usara el minimo de if posibles, toncs hice algo asi:

if (a>b)
if (a>c)
"A es mayor"
else
"C es mayor"
else
if (b>c)
"B es mayor"
else
"C es mayor"

ahora creo yo q como lo puse anteriormente si corre bien, aunq no estoy seguro si sea la forma mas sencilla,, es decir, habra alguna otra forma de hacerlo?? talvez usando menos if, pero sin usar &&??

y una pregunta mas, con el codigo anterior, segun yo solo funciona si me dan 3 numeros distintos, x q si me dan 2 iguales y 1 distinto, o 3 iguales, o esas cosillas, creo q ustedes ya saben a todo lo q se debe validar para q un numero de 3 sea el mayor,, podrian ayudarme poniendo el codigo de como seria el programa de la forma mas corta posible ??? y de preferencia usando solo if, ya q es el tema de la clase, los if anidados, aunq si se debe usar otra cosa, ponganla, no importa, sirve q voy aprendiendo mas,

GRACIAS, ojala me puedan ayudar,,

nosic
10 de Marzo del 2004
#include <stdio.h>
void main (void)
{
int num[5], i=1;
char aux;

for (aux=49; aux<52; aux++)
{
printf ("introduzca el %c§ numero: ",aux);
scanf ("%d", num[i]);
i++;
}

clrscr ();
if (num[1]>num[2] && num[1]>num[3]) printf ("El 1§ numero es el mayor");
if (num[2]>num[1] && num[2]>num[3]) printf ("El 2§ numero es el mayor");
if (num[3]>num[1] && num[3]>num[2]) printf ("El 3§ numero es el mayor");
else printf ("uno de los 3 numeros introducidos es igual a otro");
getch ();
clrscr ();
}

Alejandro 3.5
10 de Marzo del 2004
Te cuento mi impresión:

La primera solución que propones es fácil de entender, aunque en promedio hace más comparaciones que la segunda. Para una secuencia de entrada: 20 - 10 - 30, este algoritmo hará cinco comparaciones.
(Nota que si pones >= en lugar de > ya estará manejando los casos en que se ingresen números iguales, igual para el segundo algoritmo).

Creo que la segunda forma que presentas es la más sintética, que no es posible hacerlo con menor cantidad de comparaciones, aunque es bastante más difícil de leer que la primera. Para la misma secuencia anterior, este algoritmo hará sólo tres comparaciones.

Encontrarás programadores que preferirán la primera solución, que garantiza que no habrá mayor desgaste cerebral cada vez que se revise el código. Otros más fanáticos de la eficiencia, preferirán la segunda.

Y sólo como curiosidad, acá vá una versión que no usa if, y que es equivalente a tu segundo algoritmo:

cout << "el mayor es: " << ((a <= b)? ((b <= c)? c : b) : ((a <= c)? c : a));

Alejandro