[ Foro de C ]
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
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 : ...
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
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?).
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;
}
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...
ALA.....
Está mal... me sale que el mayor es z=1... por qué?
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.
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 :))
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;
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.)