Dev - C++ - Ayuda con pequeño problema con if anidados en c

 
Vista:
sin imagen de perfil
Val: 6
Ha disminuido su posición en 6 puestos en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con pequeño problema con if anidados en c

Publicado por daniel (4 intervenciones) el 03/03/2018 06:31:00
Hola amigos, soy estudiante de programacion y apenas estoy iniciando con c, es un pequeño problema con if anidados, lo que pasa es que me compila por completo, pero al ejecutar la serie de acciones solo me ejecuta el primer if, y no compara lo demas... Me podrian ayudar a identificar que pasa con los if?

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
#include <stdio.h>
#include <windows.h>
float leer();
void ordenamiento(float,float,float);
int main(){
	float a,b,c;
	a=leer();
	b=leer();
	c=leer();
	ordenamiento(a,b,c);
	system("pause");
	return 0;
}
void ordenamiento(float x,float y,float z){
	if(x<z<y){ //este es el unico if que ejecuta, el resto los salta, lo que quiero hacer en este programa es que me ordene los numeros de menor a mayor
		printf("el orden es: %f, %f, %f\n",x,z,y);
	}else if(x<y<z){
		printf("el orden es: %f, %f, %f\n",x,y,z);
	}else if(y<x<z){
		printf("el orden es: %f, %f, %f\n",y,x,z);
	}else if(z<y<x){
		printf("el orden es: %f, %f, %f\n",z,y,x);
	}else if (z<x<y){
		printf("el orden es: %f, %f, %f\n",x,y,z);
	}else if (y<z<x){
		printf("el orden es: %f, %f, %f\n",y,z,z);
	}
}
float leer (){
	float n=0;
	printf("Dame el valor decimal: ");
	scanf("%f",&n);
	return n;
Valora esta pregunta
Me gusta: Está pregunta es útil y esta claraNo me gusta: Está pregunta no esta clara o no es útil
0
Responder
sin imagen de perfil
Val: 417
Ha mantenido su posición en Dev - C++ (en relación al último mes)
Gráfica de Dev - C++

Ayuda con pequeño problema con if anidados en c

Publicado por Thanatos (199 intervenciones) el 04/03/2018 04:42:16
Las operaciones que se realizan con los operadores relacionales: ==, !=, <, >, <= y >=; devuelven como resultado 1 ó 0:

1 cuando la expresión es verdadera

0 cuando la expresión es falsa

Supongamos que les damos estos valores a las variables x, y, z:

x = 3.0f
y = 2.0f
z = 1.0f

Si escribes la condición de esta manera:
1
2
3
if (x < y < z) {
 
}

Primero se evalúa la expresión: 3.0 < 2.0, al ser falsa, el resultado será 0.
Luego, el resultado anterior se compara con el valor de z: 0 < 1.0. Esta expresión es verdadera, entonces el resultado final será 1.

Las sentencias if toman como verdadero cualquier valor diferente de 0. Al hacer las comparaciones de esa manera la mayoría de los resultados que obtendrás serán verdaderos, por eso en la mayoría de los casos sólo se ejecuta el código del primer if.

Si ejecutas este código, verás los resultados que se obtienen combinando los valores del ejemplo de diferentes maneras:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
#include <stdio.h>
 
void evaluar(float, float, float);
 
int main(void) {
    evaluar(1.0f, 1.0f, 1.0f);
    evaluar(1.0f, 1.0f, 2.0f);
    evaluar(1.0f, 1.0f, 3.0f);
    evaluar(1.0f, 2.0f, 1.0f);
    evaluar(1.0f, 2.0f, 2.0f);
    evaluar(1.0f, 2.0f, 3.0f);
    evaluar(1.0f, 3.0f, 1.0f);
    evaluar(1.0f, 3.0f, 2.0f);
    evaluar(1.0f, 3.0f, 3.0f);
    evaluar(2.0f, 1.0f, 1.0f);
    evaluar(2.0f, 1.0f, 2.0f);
    evaluar(2.0f, 1.0f, 3.0f);
    evaluar(2.0f, 2.0f, 1.0f);
    evaluar(2.0f, 2.0f, 2.0f);
    evaluar(2.0f, 2.0f, 3.0f);
    evaluar(2.0f, 3.0f, 1.0f);
    evaluar(2.0f, 3.0f, 2.0f);
    evaluar(2.0f, 3.0f, 3.0f);
    evaluar(3.0f, 1.0f, 1.0f);
    evaluar(3.0f, 1.0f, 2.0f);
    evaluar(3.0f, 1.0f, 3.0f);
    evaluar(3.0f, 2.0f, 1.0f);
    evaluar(3.0f, 2.0f, 2.0f);
    evaluar(3.0f, 2.0f, 3.0f);
    evaluar(3.0f, 3.0f, 1.0f);
    evaluar(3.0f, 3.0f, 2.0f);
    evaluar(3.0f, 3.0f, 3.0f);
 
    return 0;
}
 
void evaluar(float n1, float n2, float n3) {
    printf("%.2f < %.2f < %.2f = ", n1, n2, n3);
 
    if (n1 < n2 < n3) {
        printf("verdadero\n");
    } else {
        printf("falso\n");
    }
}

Una forma de obtener el resultado que esperas, es utilizar el operador lógico &&:
1
x < y && y < z
Valora esta respuesta
Me gusta: Está respuesta es útil y esta claraNo me gusta: Está respuesta no esta clara o no es útil
1
Comentar