Programming
T03-001-02 Ejercicios con funciones.
Enunciado
Pago nóminas con funciones
Queremos hacer un programa Java que calcule el coste mensual de las nóminas de la empresa.
La jornada semanal de un empleado es de 40 horas semanales, más horas extras, donde no se pueden tener horas extras si no se han llegado a las 40 horas de trabajo semanal, y todas las horas que superen las 40 horas, son consideradas horas extra.
Cada hora de trabajo se paga a un precio de 9,95€, mientras que las horas extras se pagan a 14,95€ la hora.
Ejemplos:
- Un trabajador que ha trabajado 30 horas una semana, le corresponde un salario esa semana de 298.5 €
- Un trabajador que ha trabajado 50 horas una semana, le corresponde un salario esa semana de 547.5 €
ENTRADA
Cada caso de prueba comienza con un número que indica cuántos empleados tiene la empresa. A continuación habrá una línea para cada uno de estos empleados. Para cada empleado se aportan 4 números enteros separados por espacio, donde cada número representa el número de horas que ha trabajado en cada una de las 4 semanas que tiene el mes.
La entrada acaba con un 0, que no debe procesarse.
SALIDA
Por cada caso de prueba, el programa escribirá la frase "El coste de las nominas este mes es de X", donde X será la suma de todas la nóminas mensuales de los empleados según lo que cada uno haya trabajado cada mes.
La salida debe ser un número decimal con solo 2 decimales.
RESTRICCIONES
Deberá resolverse el problema diseñando una función que calcule el salario semanal a pagar según las horas trabajadas. Esta función queremos que sea lo más reutilizable posible, por lo que recibirá como entrada:
- El número de horas normales trabajadas: un número entero
- El precio de cada hora normal trabajada: un número decimal (con dos decimales)
- El número de horas extra trabajadas: un número entero
- El precio de cada hora extra: un número decimal (con dos decimales)
La función devolverá el dinero a pagar, un número decimal con dos decimales.
Se proporcionan la cabecer o interfaz de dicha función en la sección MUST CONTAIN
Atención: Habrá que asegurar que la función devuelve un número decimal con dos decimales. Para saber cómo puedes hacerlo, puedes consultar este enlace
El programa principal usará la función anterior para resolver el problema.
Solución
import java.util.Scanner;
public class FSalarioEmpleados {
public static void main(String[] args) {
// TODO code application logic here
double precioHoraNormal = 9.95;
double precioHoraExtra = 14.95;
int numEmpleados;
int horasEmpleadoSemana = 0;
int numHorasNormales;
int numHorasExtra;
double nominaMensual = 0;
Scanner sc = new Scanner(System.in);
numEmpleados = sc.nextInt();
while (numEmpleados != 0) {
for (int i = 1; i <= numEmpleados; i++) {
for (int j = 1; j <= 4; j++) {
horasEmpleadoSemana = sc.nextInt();
if (horasEmpleadoSemana < 40) {
numHorasNormales = horasEmpleadoSemana;
numHorasExtra = 0;
} else {
numHorasNormales = 40;
numHorasExtra = horasEmpleadoSemana - 40;
}
nominaMensual += salarioSemanalEmpleado(numHorasNormales, precioHoraNormal, numHorasExtra, precioHoraExtra);
}
}
System.out.println("El coste de las nominas este mes es de " + nominaMensual);
nominaMensual = 0;
numEmpleados = sc.nextInt();
}
}
public static double salarioSemanalEmpleado(int horasTrabajadas, double salarioHora, int horasExtra, double salarioExtra) {
double salarioTotal = 0;
salarioTotal = horasTrabajadas * salarioHora + horasExtra * salarioExtra;
salarioTotal = Math.round(salarioTotal * 100.0) / 100.0;
return salarioTotal;
}
}
Input
5 40 40 30 45 20 35 40 10 40 40 50 50 50 30 0 10 0 0 20 30 2 40 45 40 49 40 40 45 20 0
4 40 40 30 45 20 35 40 10 40 40 50 50 50 30 0 10 2 40 45 40 49 40 40 45 20 0
Output
El coste de las nominas este mes es de 5946.0 El coste de las nominas este mes es de 3269.05
El coste de las nominas este mes es de 5448.5 El coste de las nominas este mes es de 3269.05

