| Ver tema anterior :: Ver siguiente tema | | Autor | Mensaje |
|---|
Nachopla
Registrado: 22 Abr 2011 Mensajes: 5
| Publicado: 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ú
| Publicado: 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)
| Publicado: 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
| Publicado: 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
| Publicado: 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)
| Publicado: 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 | |  | | |
| No puede crear mensajes No puede responder temas No puede editar sus mensajes No puede borrar sus mensajes No puede votar en encuestas
|
|
| |