Advertisement
cardel

Ejercicio 11 de Julio de 2020

Jul 11th, 2020
2,329
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 6.07 KB | None | 0 0
  1. ;;¿Que datos necesito del trabajador?
  2. ;;Tipo de cargo (operario, supervisor, ejecutivo)
  3. ;;Horas extra trabajadas D (numero)
  4. ;;Horas extra trabajadas N (numero)
  5. ;;Horas extra trabajadas F (numero)
  6. ;;Años que lleva en la empresa (numero)
  7.  
  8. ;;Autor: Carlos A Delgado
  9. ;;Fecha: 11 de Julio de 2020
  10. ;;Contrato: calcular-salario: simbolo, numero, numero, numero, numero -> numero
  11. ;;Propósito: Es calcular el salario de un trabajador, considerando su tipo, horas extras y descuentos ley
  12. ;;Ejemplos (calcular-salario 'ejecutivo 60 20 20 16) 7589120
  13. ;; (calcular-salario 'operativo 40 40 40 40) 3317600
  14. (define (calcular-salario tipo heD heN heF years)
  15.   (-
  16.    (salario-total tipo heD heN heF years)
  17.    (descuentos (salario-total tipo heD heN heF years))
  18.    )
  19.   )
  20.  
  21. (check-expect (calcular-salario 'ejecutivo 60 20 20 16) 7589120)
  22. (check-expect (calcular-salario 'operativo 40 40 40 40) 3317600)
  23.  
  24. ;contrato: salario-total: simbolo, numero,numero,numero,numero -> numero
  25. (define (salario-total tipo heD heN heF years)
  26.   (+
  27.    (salario-base tipo)
  28.    (horas-extras-D tipo heD)
  29.    (horas-extras-N tipo heN)
  30.    (horas-extras-F tipo heF)
  31.    (bonificacion-tiempo tipo years)
  32.    )
  33.   )
  34.  
  35. ;contrato: salario-base: simbolo -> numero
  36. (define (salario-base tipo)
  37.   (cond
  38.     [(symbol=? tipo 'operativo) 1100000]
  39.     [(symbol=? tipo 'supervisor) 2300000]
  40.     [(symbol=? tipo 'ejecutivo) 4500000]
  41.     [else (error "Tipo de trabajador erroneo")]
  42.     )
  43. )
  44.  
  45. ;contrato: horas-extras-D: simbolo, numero -> numero
  46. (define (horas-extras-D tipo heD)
  47.   (cond
  48.     [(symbol=? tipo 'operativo) (* heD 8000)]
  49.     [(symbol=? tipo 'supervisor) (* heD 15000)]
  50.     [(symbol=? tipo 'ejecutivo) (* heD 25000)]
  51.     [else (error "Tipo de trabajador erroneo")]
  52.     )
  53. )
  54.  
  55. ;contrato: horas-extras-N: simbolo, numero -> numero
  56. (define (horas-extras-N tipo heN)
  57.   (cond
  58.     [(symbol=? tipo 'operativo) (* heN 12000)]
  59.     [(symbol=? tipo 'supervisor) (* heN 18000)]
  60.     [(symbol=? tipo 'ejecutivo) (* heN 35000)]
  61.     [else (error "Tipo de trabajador erroneo")]
  62.     )
  63. )
  64.  
  65. ;contrato: horas-extras-F: simbolo, numero -> numero
  66. (define (horas-extras-F tipo heF)
  67.   (cond
  68.     [(symbol=? tipo 'operativo) (* heF 15000)]
  69.     [(symbol=? tipo 'supervisor) (* heF 22000)]
  70.     [(symbol=? tipo 'ejecutivo) (* heF 50000)]
  71.     [else (error "Tipo de trabajador erroneo")]
  72.     )
  73. )
  74.  
  75. ;contrato: bonificacion-tiempo: simbolo, numero -> numero
  76.  
  77. (define (bonificacion-tiempo tipo years)
  78.   (cond
  79.     [(symbol=? tipo 'operativo)
  80.      (cond
  81.        [(and (>= years 0) (< years 5)) 0]
  82.        [(and (>= years 5) (< years 10)) 100000]
  83.        [(and (>= years 10) (< years 15)) 300000]
  84.        [(and (>= years 15) (< years 20)) 800000]
  85.        [(and (>= years 20) (< years 25)) 1000000]
  86.        [ (>= years 25) 1500000]
  87.        [else (error "Número de años incorrecto")])    
  88.      ]
  89.     [(symbol=? tipo 'supervisor)
  90.      (cond
  91.        [(and (>= years 0) (< years 5)) 120000]
  92.        [(and (>= years 5) (< years 10)) 340000]
  93.        [(and (>= years 10) (< years 15)) 580600]
  94.        [(and (>= years 15) (< years 20)) 1500000]
  95.        [(and (>= years 20) (< years 25)) 2000000]
  96.        [ (>= years 25) 3000000]
  97.        [else (error "Número de años incorrecto")])
  98.      ]
  99.     [(symbol=? tipo 'ejecutivo)
  100.      (cond
  101.        [(and (>= years 0) (< years 5)) 400000]
  102.        [(and (>= years 5) (< years 10)) 800000]
  103.        [(and (>= years 10) (< years 15)) 1100000]
  104.        [(and (>= years 15) (< years 20)) 2100000]
  105.        [(and (>= years 20) (< years 25)) 3500000]
  106.        [ (>= years 25) 4000000]
  107.        [else (error "Número de años incorrecto")])
  108.      ]
  109.     [else (error "Tipo de trabajador erroneo")]
  110.     )
  111. )
  112.  
  113. ;contrato: descuentos: numero -> numero
  114. (define (descuentos salTotal)
  115.   (+
  116.    (descuento-seguridad-social (* 0.4 salTotal))
  117.    (descuento-retefuente salTotal)
  118.    )
  119.   )
  120.  
  121. ;contrato: descuento-seguridad-social: numero -> numero
  122. (define (descuento-seguridad-social IBC)
  123.   (+
  124.    (descuento-salud IBC)
  125.    (descuento-pension IBC)
  126.    (descuento-ARP IBC)
  127.    ))
  128.  
  129.  
  130.  
  131. ;contrato: descuento-salud: numero -> numero
  132. (define (descuento-salud IBC)
  133.   (* 0.4 0.125 IBC)
  134.   )
  135.  
  136. ;contrato: descuento-pension: numero->numero
  137. (define (descuento-pension IBC)
  138.   (* 0.4 0.16 IBC)
  139.   )
  140.  
  141. ;contrato: descuento-pension: numero->numero
  142. (define (descuento-ARP IBC)
  143.   (* 0.05 IBC)
  144.   )
  145.  
  146. ;contrato: descuento-retefuente: numero->numero
  147. (define (descuento-retefuente salTotal)
  148.   (if
  149.    (>= salTotal 3500000)
  150.    (* (calcular-porcentaje salTotal) salTotal)
  151.    0)
  152.   )
  153.  
  154. ;calcular-porcentaje: numero -> numero
  155. ;Esta función no se está USANDO
  156. ; (define (calcular-porcentaje-larga salTotal)
  157. ;   (cond
  158. ;     [(and (>= salTotal 3500000) (< salTotal 4000000)) 0.1]
  159. ;     [(and (>= salTotal 4000000) (< salTotal 4500000)) 0.105]
  160. ;     [(and (>= salTotal 4500000) (< salTotal 5000000)) 0.11]
  161. ;     [(and (>= salTotal 5000000) (< salTotal 5500000)) 0.115]
  162. ;     [(and (>= salTotal 5500000) (< salTotal 6000000)) 0.12]
  163. ;     [(and (>= salTotal 6000000) (< salTotal 6500000)) 0.125]
  164. ;     [(and (>= salTotal 6500000) (< salTotal 7000000)) 0.13]
  165. ;     [(and (>= salTotal 7000000) (< salTotal 7500000)) 0.135]
  166. ;     [(and (>= salTotal 7500000) (< salTotal 8000000)) 0.14]
  167. ;     [(and (>= salTotal 8000000) (< salTotal 8500000)) 0.145]
  168. ;     [(and (>= salTotal 8500000) (< salTotal 9000000)) 0.15]
  169. ;     [(and (>= salTotal 9000000) (< salTotal 9500000)) 0.155]
  170. ;     [(and (>= salTotal 9500000) (< salTotal 10000000)) 0.16]
  171. ;     [(and (>= salTotal 10000000) (< salTotal 10500000)) 0.165]
  172. ;     [(and (>= salTotal 10500000) (< salTotal 11000000)) 0.17]
  173. ;     [(and (>= salTotal 11000000) (< salTotal 11500000)) 0.175]
  174. ;     [(and (>= salTotal 11500000) (< salTotal 12000000)) 0.18]
  175. ;     [(and (>= salTotal 12000000) (< salTotal 12500000)) 0.185]
  176. ;     [(and (>= salTotal 12500000) (< salTotal 13000000)) 0.19]
  177. ;     [(and (>= salTotal 13000000) (< salTotal 13500000)) 0.195]
  178. ;     [(>= salTotal 13500000) 0.2]
  179. ;     ))
  180. ;
  181.  
  182. ;calcular-porcentaje: numero -> numero
  183.  
  184. (define (calcular-porcentaje salTotal)
  185.   (+ (* (floor (/ (- salTotal 3500000) 500000)) 0.005) 0.1)
  186.   )
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement