[ Foro de C ]

ayuda con un ejercicio de números reales

09-Jul-2014 22:47
Invitado (sara)
10 Respuestas

Vale entiendo lo de los número reales y tal, pero con este ejercicio que se propone: Crear un programa que use tres variables x,y,z. Las tres serán números reales, y nos bastará con dos cifras decimales. Deberá pedir al usuario los valores para las tres variables y mostrar en pantalla cual es el mayor de los tres números tecleados.
Todo bien hasta llegar a la parte de mostrar qué número de los tres es mayor y que sea ese el que aparezca en la pantalla. En el pseudocódigo hice un ejercicio parecido pero claro yo en C no se como poner matriz, y el bucle for y tal...
O ¿lo estoy liando mucho?
Gracias una vez más


10-Jul-2014 19:58
Nacho Cabanes (+83)

Lo estás liando mucho.

No hace falta ningún array. La idea intuitiva es simplemente


SI n1 >= n2 Y n1 >= n3 ENTONCES mayor = n1
SI NO : SI n2 >= n1 Y n2 >= n3 ENTONCES mayor = n2
SI NO : ...




10-Jul-2014 23:22
Invitado (sara)

vale, luego me di cuenta, que esa lección estaba una página después, pero aún así tengo una duda:
Si escribo mi programa así:


#include<stdio.h>
//Crear un programa que pida al usuario tres números reales y muestre cuál es el mayor de los tres.

int main()
{
	float x, y, z;
	printf("Introduce el primer numero:\n");
	scanf("%f2.2", &x);
	printf("Introduce el segundo numero:\n");
	scanf("%f2.2", &y);
	printf("Introduce el tercer numero:\n");
	scanf("%f2.2", &z);
	{
		if(x>y && z) printf("El numero mayor es: %f", x);
		else
		{
			if (y>x && z) printf("El numero mayor es: %f", y);
			{
				if (z> x && y) printf("El numero mayor es: %f", z);
			}
		}
	}
	return 0;
}


Funciona perfectamente pero, si escribo mi programa así:


#include<stdio.h>
//Crear un programa que pida al usuario tres números reales y muestre cuál es el mayor de los tres.

int main()
{
	float x, y, z;
	printf("Introduce el primer numero:\n");
	scanf("%f2.2", &x);
	printf("Introduce el segundo numero:\n");
	scanf("%f2.2", &y);
	printf("Introduce el tercer numero:\n");
	scanf("%f2.2", &z);
	{
		if(x>y && z) printf("El numero mayor es: %f2.2", x);
		else
		{
			if (y>x && z) printf("El numero mayor es: %f2.2", y);
			else
			printf("El numero mayor es: %f2.2", z);
		}
	}
	return 0;
}


Si al compilarlo, escribo el z mayor que el resto de los números el programa no pone que z es mayor que los otros, pone cual es el mayor de x e y.. entonces, no entiendo porque si en vez de poner if, pongo else no  sale bien.
Muchas gracias


10-Jul-2014 23:30
Nacho Cabanes (+83)

Dudo que funcione correctamente: la construcción "if (x>y && z)" es incorrecta. Si "z" es distinto de cero, la segunda parte de la condición se considera correcta, porque no estás comparando con nada. C permite construcciones como esa (aunque algunos compiladores darán un "warning") pero intuyo que lo que tú quieres es: "if (x>y && x>z)"

De igual modo, no refines tanto como "scanf("%f2.2", &x); "  Si pides un número real, usa simplemente "scanf("%f", &x);" o puedes tener efectos inesperados (¿que ocurre si pides el formato 2.2 y te teclean un número con 4 decimales? ¿se ignoran? ¿se consideran parte del siguiente número?).


11-Jul-2014 16:12
Invitado (sara)

Sí, si funcionaba pero claramente estaba mal, he modificado lo que me ha dicho y ya funciona todo.


#include<stdio.h>
//Crear un programa que pida al usuario tres números reales y muestre cuál es el mayor de los tres.

int main()
{
	float x, y, z;
	printf("Introduce el primer numero:\n");
	scanf("%f", &x);
	printf("Introduce el segundo numero:\n");
	scanf("%f", &y);
	printf("Introduce el tercer numero:\n");
	scanf("%f", &z);
	{
		if(x>y && x>z) printf("El numero mayor es: %f", x);
		else
		{
			if (y>z && y>x) printf("El numero mayor es: %f", y);
			
			else  printf("El numero mayor es: %f", z);
			
		}
	}
	return 0;
}




11-Jul-2014 17:56
Nacho Cabanes (+83)

Funcionaba de casualidad con algunos datos puntuales.   ;-)

Aun así, a ojo yo diría que sigue sin estar bien del todo. Prueba con los datos x=2, y=2, z=1, a ver si te dice el resultado correcto...


11-Jul-2014 18:17
Invitado (sara)

ALA.....
Está mal... me sale que el mayor es z=1... por qué?


12-Jul-2014 21:49
Nacho Cabanes (+83)

Haz "la traza" del programa: sigue tú "a bolígrafo" lo que ocurre, paso a paso. Verás que pasan cosas como


X = 2, Y = 2, Z = 1 :
Si 2 > 2 y 2 > 1 entonces... (no se cumple, luego X no es el mayor)
Si no, Si 2 > 2 y 2 > 1 entonces... (no se cumple, luego Y no es el mayor)
Si no, Z es el mayor (1 !!!!!)


Como verás, la lógica todavía no es buena.


13-Jul-2014 16:40
Invitado (sara)

Vale, ahora creo que lo tengo bien. Cuando introduzco 2, 2 y 1 ya me sale que el número mayor es 2.


#include<stdio.h>
//Crear un programa que pida al usuario tres números reales y muestre cuál es el mayor de los tres.

int main()
{
	float x, y, z;
	printf("Introduce el primer numero:\n");
	scanf("%f", &x);
	printf("Introduce el segundo numero:\n");
	scanf("%f", &y);
	printf("Introduce el tercer numero:\n");
	scanf("%f", &z);
	
	if(x>=y && x>=z) 
	{
		printf("El numero mayor es: %f", x);
	}
	else
	{
		if (y>=z && y>=x) 
		{
		printf("El numero mayor es: %f", y);
		}		
		else  
		{
		printf("El numero mayor es: %f", z);
		}
	}	
	return 0;
}



Gracias :))


15-Jul-2014 21:02
Nacho Cabanes (+83)

Ahora sí está perfecto. En C es un poco peligroso "ahorrar paréntesis" en las comparaciones, por si alguna prioridad que no te esperabas te juega alguna mala pasada, así que yo habría escrito


if((x>=y) && (x>=z))


pero la lógica ahora es la buena.

También puedes usar una variable "mayor" para que sea un poco menos repetitivo, con un único "printf" que muestre resultados al final, en vez de uno en cada "if":


if((x>=y) && (x>=z))
    mayor = x;



15-Jul-2014 23:41
Invitado (sara)

Es verdad, no había caído!!! Muchas gracias :D






(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.)