La pregunta sobre si el if está bien lo descubres en cuanto ejecutas el código... que siempre te dirá que la calificación es 'F'. De ahí se pueden sacar dos lecturas posibles:
- No te has molestado en probar el código (la que espero sea la menos probable)
- Tiras la caña para ver si hay suerte y te salvamos el pellejo
¿Tanto cuesta decir que no te sale la secuencia de ifs?
Al primer if le falta "algo" para hacer una comparación en vez de una asignación y con eso te he dicho bastante para ir tirando con ese problema.
Cuando corrijas lo anterior puedes preguntarte cómo es posible que estés haciendo una cadena de if en la que preguntas por el promedio cuando es algo que aún no has calculado... de hecho lo calculas dentro del if, una vez que has visto que el promedio está dentro de un rango determinado. Suena complicado porque está mal hecho, es así de sencillo. Primero calcula el promedio, lo cual únicamente necesitas calcular una vez ya que es invariante una vez tienes las tres notas, y después compara dicho promedio para ver qué letra le asignas.
En cuanto a la cadena de ifs, y asumiendo que has corregido lo comentado hasta ahora, fíjate bien:
Código C:
Ver originalif (prom=10);
{
}
else if(prom<9.9 && prom>9.1)
{
}
else if(prom<9.0 && prom>8.1)
{
}
else if(prom<8.0 && prom>7.1)
{
}
else if (prom<7.0 && prom>6.1)
{
}
else (prom<5.9)
¿Qué sucede si el promedio da 9.99? Técnicamente no es igual a 10 pero es mayor que 9.9 luego... ¿no se le asigna letra? No es digno de recibir una calificación por haberse quedado a las puertas de la gloria? Lo mismo te pasa con, por ejemplo, 9.03, 8.05, 7.01, 6.0, 5.96, ...
¿Por qué sucede esto? Básicamente porque estás componiendo mal la cadena de ifs.
if-else funciona así: Se comprueba la condición del if, si se cumple se ejecuta el código que sigue al if y, si no, se ejecuta lo que se encuentre dentro del else. Por tanto no tiene sentido que hagas preguntas del tipo: "Si la nota es 10 entonces A, si no, verifico que
el número es menor que 10 y que además es mayor que 9... la parte en negrita sobra porque es algo que ya has evaluado con la primera condición... has llegado al else precisamente porque el número no es igual a 10 (asumamos que no se admiten notas mayor a 10.0, luego el promedio jamás podrá dar un resultado mayor a 10.0)
Tu cadena de ifs debería parecerse más a la siguiente:
Código C:
Ver originalif( promedio == 10.0 )
else if( promedio > 9.5 ) // promedio < 10 && promedio > 9.5
else if( promedio > 9.0 ) // promedio <= 9.5 && promedio > 9.0
else if( promedio > 6.0) // promedio <=9.0 && promedio > 6.0
...
Y bueno, cuando te de por probar el código verás que el promedio está mal calculado... la típica tonteria de C que dice que el operador de división tiene más prioridad que los de suma. Hay que tener cuidado al escribir operaciones sin paréntesis...
Para la próxima vez agradeceríamos que el código lo decorases con la etiqueta del lenguaje correspondiente (mira el desplegable "highlight") y que no te hagas el tonto. Sabes, o al menos deberías saber, si tu programa funciona... no te hagas el tonto o te ganarás el silencio como respuesta.
Un saludo.