domingo, 27 de abril de 2008

Problema 3.4

Enunciado
En una empresa están liquidando los sueldos de sus empleados. Para ello cuentan con una planilla con la siguiente información de cada empleado:

  • nombre
  • sueldo básico
  • antigüedad
  • cantidad de hijos
El sueldo se liquida según la siguiente tabla:

Plus por Asignaciones Familiares:
. si el empleado tiene 3 hijos o más entonces recibe un plus del 20% de su sueldo básico.

Plus por Antigüedad:
. Los empleados percibirán un plus del 10% del sueldo básico si tienen una antigüedad entre 2 y 3 años. El 20% si su antugüedad es de entre 4 y 5 años y el 30% si la antigüedad es superior a 6 años.

Se pide desarrollar un programa que imprima:
a - El nombre de cada empleado y el sueldo neto a cobrar.
b - Al finalizar la carga de datos indique el monto total que debe abonar la empresa en concepto de sueldos.

untSueldos.h
   1:
2:// cantidad minima de hijos necesaria para que
3:// el empleado perciba la asignacion familiar
4:#define MIN_HIJOS 3
5:
6:// plus por asignacion familiar
7:#define PLUS_FAMILIAR 0.20
8:
9:// rangos de antiguedad necesaria para que
10:// el empleado pueda percibir el plus por
11:// segun su antiguedad
12:#define ANTIG1 0.10
13:#define ANTIG2 0.20
14:#define ANTIG3 0.30
15:
16:// plus por antiguedad
17:#define PLUS1 0.10
18:#define PLUS2 0.20
19:#define PLUS3 0.30
20:
21:// retorna el plus en funcion de la cantidad de
22:// hijos y del sueldo basico
23:float obtAsignacionFamiliar(float,int);
24:
25:// retorna el plus en funcion de la antiguedad y
26:// del sueldo basico
27:float obtAsignacionAntiguedad(float,int);
28:

untSueldos.c
   1:
2:#include <stdio.h>
3:#include "untSueldos.h"
4:
5:float obtAsignacionFamiliar(float basico
6: , int cantHijos)
7:{
8: float plus;
9:
10: // si la cantidad de hijos supera al minimo
11: // necesario para obtener el plus
12: if( cantHijos>=MIN_HIJOS)
13: {
14: plus=PLUS_FAMILIAR;
15: }
16: else
17: {
18: plus=0;
19: }
20:
21: return basico*plus;
22:}
23:
24:float obtAsignacionAntiguedad(float basico,int antig)
25:{
26: float plus=0;
27: if( (antig>=ANTIG1) && (antig<ANTIG2) )
28: {
29: plus=PLUS1;
30: }
31: if( (antig>=ANTIG2) && (antig<ANTIG3) )
32: {
33: plus=PLUS2;
34: }
35: if( antig>=ANTIG3 )
36: {
37: plus=PLUS3;
38: }
39:
40: return basico*plus;
41:}
42:

sueldos.c
   1:
2:#include <stdio.h>
3:#include "untSueldos.h"
4:
5:int main()
6:{
7: char nom[20];
8: float sb;
9: int ant,ch;
10: float plusFam,plusAnt,neto,suma;
11:
12: // inicializo el acumulador en el que
13: // voy a acumular los sueldos netos
14: suma=0;
15:
16: // leo los datos del primer empleado
17: printf("Ingrese (nom,sb,ant,ch): ");
18: scanf("%s %f %d %d",nom,&sb,&ant,&ch);
19:
20: while( strcmp(nom,"zzz")!=0 )
21: {
22: // obtengo el plus familiar
23: plusFam=obtAsignacionFamiliar(sb,ch);
24:
25: // obtengo el plus por antiguedad
26: plusAnt=obtAsignacionAntiguedad(sb,ant);
27:
28: // calculo el sueldo neto
29: neto=sb+plusFam+plusAnt;
30:
31: printf("%sm %f\n",nom,neto);
32:
33: // acumulo el sueldo neto
34: suma=suma+neto;
35:
36: // leo los datos del proximo empleado
37: printf("Ingrese (nom,sb,ant,ch): ");
38: scanf("%s %f %d %d",nom,&sb,&ant,&ch);
39: }
40: // muestro el total a pagar (acumulado)
41: printf("Total Sueldos: %f\n", suma);
42:}
43:








.

No hay comentarios: