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 originalif (prod>=1000&&prod<1200) ...
else if (prod<1300) ...
else if (prod<1400) ...
else if (prod<1500) ...
else /* prod >= 1500 */ ...
otra opción, aplicable a tu caso, sería omitir los else pero ir acumulando el bono:
Código C:
Ver originalif(prod>=1000) bono=0.10;
if(prod>=1200) bono+=0.05;
if(prod>=1300) bono+=0.05;
// ...
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