/
Inicio :: Foros

 F.A.Q.F.A.Q.                  Conéctese para revisar sus mensajesConéctese para revisar sus mensajes   

Duda, condicionador if cumpla mas de una condicion

 
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Ver tema anterior :: Ver siguiente tema  
AutorMensaje
Nachopla



Registrado: 22 Abr 2011
Mensajes: 5

MensajePublicado: 08/05/2011 1:34 pm
Título: Duda, condicionador if cumpla mas de una condicion

Buenas,

Se me ocurrio crear un programa bien basico, en el cual yo ingrese tres valores enteros, y me devuelva como respuesta, cual de los tres numeros es el mayor y cual de los tres es el menor, el codigo es el siguiente:

Código:
#include <stdio.h>
#include <stdlib.h>

main () {
     
      int n1, n2, n3;
           
      printf("Ingrese primer numero \n");
      scanf("%d", &n1);
      printf("Ingrese segundo numero \n");
      scanf("%d", &n2);
      printf("Ingrese tercer numero \n");
      scanf("%d", &n3);
     
         if(n1 > n3, n1 > n2)
             printf("%d es el mayor de los tres numeros \n", n1);
                           
         if(n2 > n1, n2 > n3)
             printf("%d es el mayor de los tres numeros \n", n2);
             
         if(n3 > n1, n3 > n2)
             printf("%d es el mayor de los tres numeros \n", n3);
         
         if(n1 > n3, n2 > n3)
             printf("%d es el menor de los tres numeros \n", n3);
             
         if(n1 > n2, n3 > n2)
             printf("%d es el menor de los tres numeros \n", n2);
             
         if(n2 > n1, n3 > n1)
             printf("%d es el menor de los tres numeros \n", n1);
             
       system("PAUSE");
       return 0;
       
       } 


Nota: Realizar esto
Código:
if(n1 > n3, n1 > n2)
, no lo vi en el libro que estoy estudiando, fue idea propia.

Resulta que al ingresar los valores 1 , 2 , 3 , me dice que:

3 es el mayor de los tres numeros
2 es el menor de los tres numeros
1 es el menor de los tres numeros.

Claramente el segundo enunciado es falso, pero no se porque lo lanza siendo que la condicion if( n1 > n2, n3 > n1) no se cumple.

Espero que me puedan ayudar. (si esta bien como realize el enuncionado de if).

Saludos!
Volver arriba
eduar2083



Registrado: 10 Ago 2008
Mensajes: 219
Ubicación: Lima - Perú

MensajePublicado: 08/05/2011 2:05 pm
Título:

El operador coma sirve como separador de argumentos en funciones y/o como separador de instrucciones, al parecer erróneamente intentas usarlo como un and. Una solución a tu problema podría ser la siguiente.
Código:
#include <stdio.h>


int mayor( int a, int b, int c );
int menor( int a, int b, int c );


int main( void )
 {
   int num1, num2, num3;

   printf(  "Numero 1: " );
   fflush( stdout );
    scanf( "%d", &num1 );

    printf( "Numero 2: " );
    fflush( stdout );
    scanf( "%d", &num2 );

    printf( "Numero 3: " );
    fflush( stdout );
    scanf( "%d", &num3 );

    if ( num1 == num2 && num2 == num3 )
        puts( "\nLos tres numeros son iguales" );
    else {
        printf( "\nEl mayor es: %d\n", mayor( num1, num2, num3 ) );
        printf( "El menor es: %d\n", menor( num1, num2, num3 ) );
    }

   return 0;

}


int mayor( int a, int b, int c )
{
    int mayor;

    mayor = a > b ? a : b;

    return c > mayor ? c : mayor;
}


int menor( int a, int b, int c )
{
    int menor;

    menor = a < b ? a : b;

    return c < menor ? c : menor;
}

Saludos.
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2558
Ubicación: Valladolid (España)

MensajePublicado: 08/05/2011 4:11 pm
Título:

Hola.

Una solución eficiente es utilizar una pareja de macros. Por ejemplo:

Código:
#define MIN(a, b) ((a) < (b) ? (a) : (b))
#define MAX(a, b) ((a) > (b) ? (a) : (b))

        /* --- */

    int n1 = 2, n2 = 20, n3 = -2;

    printf("El mayor es: %d\n", MAX( MAX(n1, n2), n3)); 
    printf("El menor es: %d\n", MIN( MIN(n1, n2), n3));   

        /* --- */



·?0ƒ·
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
Nachopla



Registrado: 22 Abr 2011
Mensajes: 5

MensajePublicado: 08/05/2011 5:42 pm
Título:

Gracias a ambos, pero sus respuestas superan a mis pocos conocimientos que eh adquirido hasta ahora, asi que seguire estudiando.

Saludos!
Volver arriba
rir3760



Registrado: 01 Oct 2004
Mensajes: 7517
Ubicación: Mexico

MensajePublicado: 09/05/2011 6:31 am
Título:

Siguiendo lo comentado por eduar2083:

Cuando en tu programa deseas realizar alguna operacion solo si se cumplen dos (o mas) condiciones utilizas el operador "&&" (AND logico) este resulta en 1 (verdadero, solo si se cumplen las dos) o 0 (falso, si cualquiera es falsa).

Por ejemplo la condicion en tu programa:
Código:
if (n1 > n3, n1 > n2)
   printf("%d es el mayor de los tres numeros \n", n1);

/* ... */

No genera un mensaje de error porque la coma es un operador valido, este evalua (y descarta) la primera expresion (en tu caso "n1 > n3"), a continuacion evalua la segunda (en tu caso "n1 > n2") y ese es el resultado de la expresion. Es como si solo hubieras colocado:
Código:
if (n1 > n2)
   printf("%d es el mayor de los tres numeros \n", n1);

/* ... */



Para que se evaluen las dos condiciones y se realize la operacion utilizas el operador "&&" de esta forma:
Código:
if (n1 > n3 && n1 > n2)
   printf("%d es el mayor de los tres numeros \n", n1);

/* ... */


Un saludo
_________________
C retains the basic philosophy that programmers know what they are doing; it only requires that they state their intentions explicitly.
--
Kernighan & Ritchie, The C programming language
Volver arriba
cheroky



Registrado: 22 Sep 2005
Mensajes: 2558
Ubicación: Valladolid (España)

MensajePublicado: 09/05/2011 3:51 pm
Título:

Hola.

Un mensaje de error no, pero si al compilador se le obliga a cantar lo hará en do mayor debido a que el operando de la izquierda es un expresión sin efecto.


·?0ƒ·
_________________
La cuestión no es si hay vida inteligente en otros planetas lejanos. La cuestión es si hay vida inteligente aquí.
Volver arriba
      Índice del Foro elrincondelc.com -> Principiantes C/C++
Página 1 de 1Todas las horas están en GMT - 8 Horas

 
No puede crear mensajes
No puede responder temas
No puede editar sus mensajes
No puede borrar sus mensajes
No puede votar en encuestas

(c) ElRincondelC.com

Un proyecto de UrlanHeat.com