Ver Mensaje Individual
  #2 (permalink)  
Antiguo 25/09/2015, 01:46
eferion
 
Fecha de Ingreso: octubre-2014
Ubicación: Madrid
Mensajes: 1.212
Antigüedad: 9 años, 7 meses
Puntos: 204
Respuesta: Resultados no son los esperados

tu programa tiene varios errores y algúnos detalles a mejorar.

errores

¿Qué bono se aplica si la producción es menor de 1000? Si tu respuesta rápida es 0... repasa el programa.

Si no se trabaja ningún día, ¿Cuánto vale sbon,spzatext? Si tu respuesta rápida vuelve a ser 0... vuelve a repasar el programa.

En resumen... suma,sbon,spzatext,bono y otras tantas variables no están inicializadas, luego arrojarán resultados totalmente aleatorios.

Otra más... ¿qué bono se aplica si prod vale exactamente 1500?

mejoras

if ... if ... if ... if ... hay diseños mejores a la hora de concatenar varios if. La primera opción pasa por usar la sentencia else, de tal forma que evitas la posibilidad de solapar condiciones (imagínate que te equivocas y en vez de prod>=1400 pones prod>=140...

Código C:
Ver original
  1. if (prod>=1000&&prod<1200) ...
  2. else if (prod<1300) ...
  3. else if (prod<1400) ...
  4. else if (prod<1500) ...
  5. else /* prod >= 1500 */ ...

otra opción, aplicable a tu caso, sería omitir los else pero ir acumulando el bono:

Código C:
Ver original
  1. if(prod>=1000) bono=0.10;
  2. if(prod>=1200) bono+=0.05;
  3. if(prod>=1300) bono+=0.05;
  4. // ...

Por otro lado, los nombres de algunas variables no tienen ningún sentido. ¿Por qué una variable que se llama text es de tipo int? Puedes alegar que el nombre viene de TiempoEXTra, pero a la hora de usar acrónimos tienes que evitar que el nombre parezca algo que no es. Hay muchas formas de nombrar variables, yo te aconsejaría usar algúna en la que los fragmentos de cada palabra estuviesen bien diferenciados, ya sea con cambios de mayúsuclas-minúsculas (TExt ó tExt) o con el uso de separadores (t_ext). Y lo mismo aplicable a otras tantas variables.

También tienes que procurar que el nombre utilizado sea totalmente representativo, es decir, que el nombre sea capaz de indicar la utilidad de esa variable. En esta línea, sxdia podría tener un nombre un poco más largo, como sueldoxdia. La idea es que el programa sea fácil de leer. Cuando lo estás haciendo es fácil recordar todos los detalles del programa, pero si lo coge alguien nuevo o tú dentro de un tiempo puede no ser tan sencillo entender el código.

Otra cosa más, queda raro que declares una variable de un tipo e intentes almacenar datos de un tipo diferente. Tal es el caso de sxdia, declarada como float pero al usuario únicamente le dejas meter un int. Este tipo de prácticas pueden dar problemas en programas más complejos... perfectamente puedes no darte cuenta de que scanf te está almacenando un int y tu, al esperar un float veas que desaparecen los decimales y que el resultado final es incorrecto.

Y para terminar, procura no tener variables sin uso. No aportan absolutamente nada al programa salvo basura.

En la línea del párrafo anterior, conviene que aprendas a fijarte en los warnings del compilador de cara a intentar eliminarlos todos. Vale que un warning no deja de ser una advertencia, pero algunas de esas advertencias son bastante serias... por ejemplo el compilador te devolverá un warning si en una función que, por ejemplo, tiene que retorar un int no se encuentra el return correspondiente... ¿qué devuelve entonces la función? pues esta indeterminación tan sería es tratada como un simple warning. No olvides que los warnings son básicamente errores que no impiden que se genere código compilable, así que acostúmbrate a tratarlos como errores.

Un saludo