Ver Mensaje Individual
  #2 (permalink)  
Antiguo 03/03/2016, 04:07
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 10 años, 1 mes
Puntos: 204
Respuesta: Duda con If (HASTA EL ULTIMO)

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 original
  1. if (prom=10);
  2. {
  3. }
  4. else if(prom<9.9 && prom>9.1)
  5. {
  6. }
  7. else if(prom<9.0 && prom>8.1)
  8. {
  9. }
  10. else if(prom<8.0 && prom>7.1)
  11. {
  12. }
  13. else if (prom<7.0 && prom>6.1)
  14. {
  15. }
  16. 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 original
  1. if( promedio == 10.0 )
  2. else if( promedio > 9.5 ) // promedio < 10 && promedio > 9.5
  3. else if( promedio > 9.0 ) // promedio <= 9.5 && promedio > 9.0
  4. else if( promedio > 6.0) // promedio <=9.0 && promedio > 6.0
  5. ...

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.
__________________
La ayuda se paga con esfuerzo o con dinero. Si no estás dispuesto a esforzarte y quieres que te hagan los deberes pide presupuesto, al menos así ahorrarás tiempo.