Foros del Web » Programación para mayores de 30 ;) » C/C++ »

Duda con If (HASTA EL ULTIMO)

Estas en el tema de Duda con If (HASTA EL ULTIMO) en el foro de C/C++ en Foros del Web. Hacer un programa estructurado que lea 3 calificaciones y de ellas calcular el promedio y despues imprimir la letra correspondiente CON SENTENCIA IF A= 10 ...
  #1 (permalink)  
Antiguo 03/03/2016, 03:37
Avatar de fercho101096  
Fecha de Ingreso: febrero-2016
Ubicación: México
Mensajes: 2
Antigüedad: 8 años, 2 meses
Puntos: 0
Duda con If (HASTA EL ULTIMO)

Hacer un programa estructurado que lea 3 calificaciones y de ellas calcular el promedio y despues imprimir la letra correspondiente
CON SENTENCIA IF

A= 10
B=9.1-9.9
C=8.1-9
D=7.1-8
E=6.0-7
F= 5-9

PROGRAMA


#include <iostream>
#include <string>
using namespace std;
float leer (char letra);
float operaciones (float c, float d, float t);
void imprimir (float prom);
int main ()
{
float prom=0, c=0, d=0, t=0;
c=leer('c');
d=leer('d');
t=leer('t');
if (prom=10);
{
cout<<"La letra asignada es A:";
prom=operaciones (c, d, t);
imprimir (prom);
}
else if(prom<9.9 && prom>9.1)
{
cout<<"La letra asignada es B:";
prom=operaciones (c, d, t);
imprimir (prom);
}
else if(prom<9.0 && prom>8.1)
{
cout<<"La letra asignada es C:";
prom=operaciones (c, d, t);
imrpimir (prom);
}
else if(prom<8.0 && prom>7.1)
{
cout<<"La letra asignada es D:";
prom=operaciones (c, d, t);
imrpimir (prom);
}
else if (prom<7.0 && prom>6.1)
{
cout<<"La letra asignada es E:";
prom=operaciones (c, d, t);
imrpimir (prom);
}
else (prom<5.9)
{
cout<<"La letra asignada es F:";
prom=operaciones (c, d, t);
imrpimir (prom);
system ("pause");
return();
}

float leer (char c, d, t)
{
float val=0, val2=0, val3=0
cout<<"Ingrese calificacion uno:"<<c<<;
cin>>val;
return val;
cout<<"Ingrese calificacion dos:"<<d<<;
cin>>val2;
return val2;
cout<<"ingrese calificacion tres:"<<t<<;
cin>>val3;
return val3;
}
float operaciones (float c, float d, float t)
{
float prom=0;
prom=c+d+t/3
return prom;
}
void imprimir (float prom)
{
cout<<"El promedio obtenido es:"<<prom<<endl;
}


La pregunta es ¿La sentencia if esta bien escrita y si esta imprimiendo el valor dado en la sentencia?
  #2 (permalink)  
Antiguo 03/03/2016, 04:07
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
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.

Etiquetas: c++, lenguaje
Atención: Estás leyendo un tema que no tiene actividad desde hace más de 6 MESES, te recomendamos abrir un Nuevo tema en lugar de responder al actual.
Respuesta




La zona horaria es GMT -6. Ahora son las 03:32.