[ Foro de C ]

Problemas con if (nivel principiante)

07-Oct-2012 20:36
Miguel Angel Alvarez Gonzalez
2 Respuestas

Que tal  todos. Estoy tomando el curso de Nacho Cabanes pero tengo un inconveniente con un problema. Tengo que hacer un programa en el que el usuario ingrese 5 numeros enteros y el programa nos diga cual de ellos es el menor y cual es el mayor. No me aparece ningun error. Pero solo aparece lo de el primer printf. La forma en que lo trate de hacer es la siguiente.


#include <stdio.h>

int main()  {

int num1, num2, num3, num4, num5;

printf ( "Escribe cinco numeros enteros\n" );
scanf ( "%d%d%d%d%d" , &num1, &num2, &num3, &num4, &num5 );

if (((( num1 > num2 ) && ( num2 > num3 )) && ( num3 > num4 )) && ( num4 > num5 )) {
 printf ( "%d  es el mayor\n" , num1 );  }

else
 if (((( num2 > num1 ) && ( num1 > num3 )) && ( num3 > num4 )) && ( num4 > num5 )) {
 printf ( "%d  es el mayor\n" , num2 );  }

 else
   if (((( num3 > num1 ) && ( num1 > num2 )) && ( num2 > num4 )) && ( num4 > num5 )) {
   printf ( "%d  es el mayor\n" , num3 );  }

   else
     if (((( num4 > num1 ) && ( num1 > num2 )) && ( num2 > num3 )) && ( num3 > num5 )) {
     printf ( "%d  es el mayor\n" , num4 );  }

     else
       if (((( num5 > num1 ) && ( num1 > num2 )) && ( num2 > num3 )) && ( num3 > num4 )) {
       printf ( "%d  es el mayor\n" , num5 );  }

if (((( num1< num2 ) && ( num2 < num3 )) && ( num3 < num4 )) && ( num4 < num5 ))  {
 printf ( "%d es el menor\n" , num1 );  }

else
 if (((( num2 < num1 ) && ( num1 < num3 )) && ( num3 < num4 )) && ( num4 < num5 ))  {
   printf ( "%d es el menor\n" , num2 );  }

 else
   if (((( num3 < num2 ) && ( num2 < num1 )) && ( num1 < num4 )) && ( num4 < num5 ))  {
   printf ( "%d es el menor\n" , num3 );  }

   else
     if (((( num4 < num2 ) && ( num2 < num3 )) && ( num3 < num1 )) && ( num1 < num5 ))  {
     printf ( "%d es el menor\n" , num4 );  }

     else
       if (((( num5 < num2 ) && ( num2 < num3 )) && ( num3 < num4 )) && ( num4 < num1 ))  {
       printf ( "%d es el menor\n" , num5 );  }

return 0;
}
 
       


10-Oct-2012 22:55
Nacho Cabanes (+83)

Tienes un par de errores, uno grave y otro menos importante:

- El que n1 sea el mayor de todos no implica nada en la relación entre (por ejemplo) n2 y n3, de modo que no es correcto:

if (((( n1 > n2 ) && ( n2 > n3 )) && ( n3 > n4 )) && ( n4 > n5 )) {
 printf ( "%d  es el mayor\n" , n1 );  }

Sino

if ( (n1 > n2) && ( n1 > n3 ) && ( n1 > n4 )) && ( n1 > n5 ))
 printf ( "%d  es el mayor\n" , n1 );  

(habrás visto que, de paso, he quitado paréntesis innecesarios).


- Además, ¿qué ocurre cuando dos datos son iguales?  Si siempre comparas con "mayor que", no se comportará correctamente si dos o más datos coinciden. Por eso, es más fiable ver si es "mayor o igual":

if ( (n1 >= n2) && ( n1 >= n3 ) && ( n1 >= n4 )) && ( n1 >= n5 ))
 printf ( "%d  es el mayor\n" , n1 );  


11-Oct-2012 05:55
Miguel Angel Alvarez Gonzalez

A o.k entendido. Muchisimas gracias por la ayuda.  






(No se puede continuar esta discusión porque tiene más de dos meses de antigüedad. Si tienes dudas parecidas, abre un nuevo hilo.)