Advertisement
JuanFelipeArango28

Untitled

Aug 9th, 2020
721
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 3.29 KB | None | 0 0
  1. (define-struct celular (marca memoria espacio gama-alta? costo))
  2. (define-struct computador (marca procesador gama-alta? costo))
  3. (define-struct accesorio (nombre costo))
  4.  
  5. (define-struct venta (producto cantidad))
  6. (define-struct costo-discriminado (subtotal iva icl total))
  7.  
  8. (define  celular1 (make-celular 'xiaomi 4 64 false 600000))
  9. (define computador1 (make-computador 'acer 'intel true 2500000))
  10. (define accesorio1 (make-accesorio 'raton 90000))
  11.  
  12. (define venta1 (make-venta celular1 2))
  13.  
  14. ;Autor: Juan Felipe Arango Guzman
  15. ;Fecha: 09/08/2020
  16. ;Contrato: venta-discriminada: venta -> costo-discriminado
  17. ;Proposito: calcular el costo de un producto con y sin los impuestos a los que aplica
  18. ;Ejemplos:
  19. ;(venta-discriminada venta1) (make-costo-discriminado 1200000 228000 120000 1548000)
  20. ;Definicion:
  21. (define (venta-discriminada venta)
  22.   (cond
  23.     [(not (venta? venta)) (error "la estuctura ingresada debe ser de tipo venta") ]
  24.     [(celular? (venta-producto venta))
  25.      (make-costo-discriminado  (subtotal venta)
  26.                                (iva venta)
  27.                                (icl venta)
  28.                                (total venta))]
  29.     [(computador? (venta-producto venta))
  30.      (make-costo-discriminado  (subtotal venta)
  31.                                (iva venta)
  32.                                (icl venta)
  33.                                (total venta))]
  34.     [(accesorio? (venta-producto venta))
  35.      (make-costo-discriminado  (subtotal venta)
  36.                                (iva venta)
  37.                                (icl venta)
  38.                                (total venta))]
  39.     [else "El producto ingresado no es valido"]
  40.     )
  41.   )
  42.  
  43. ;Contrato: subtotal: venta -> numero
  44. (define (subtotal venta)
  45.   (cond
  46.     [(celular? (venta-producto venta))
  47.      (* (venta-cantidad venta)
  48.         (celular-costo (venta-producto venta)))]
  49.     [(computador? (venta-producto venta))
  50.      (* (venta-cantidad venta)
  51.         (computador-costo (venta-producto venta)))]
  52.     [(accesorio? (venta-producto venta))
  53.      (* (venta-cantidad venta)
  54.         (accesorio-costo (venta-producto venta)))]
  55.     )
  56.   )
  57. ;Contrato: iva: venta -> numero
  58. (define (iva venta)
  59.   (cond
  60.     [(celular? (venta-producto venta))
  61.      (* 0.19
  62.         (subtotal venta))]
  63.     [(computador? (venta-producto venta))
  64.      (* 0.19
  65.         (subtotal venta))]
  66.     [(accesorio? (venta-producto venta))
  67.      (* 0.19
  68.         (subtotal venta))]
  69.     )
  70.   )
  71. ;Contrato: icl: venta -> numero
  72. (define (icl venta)
  73.   (cond
  74.     [(celular? (venta-producto venta))
  75.      (cond
  76.        [(or (> (subtotal venta) 500000) (equal? true (celular-gama-alta? (venta-producto venta))))
  77.         (* 0.10
  78.         (subtotal venta))]
  79.        [else 0]
  80.        )]
  81.     [(computador? (venta-producto venta))
  82.      (cond
  83.        [(or (> (subtotal venta) 500000) (equal? true (computador-gama-alta? (venta-producto venta))))
  84.         (* 0.10
  85.         (subtotal venta))]
  86.        [else 0]
  87.        )]
  88.     [(accesorio? (venta-producto venta))
  89.      (cond
  90.        [(> (subtotal venta) 500000) (* 0.10 (subtotal venta))]
  91.        [else 0]
  92.        )]
  93.     )
  94.   )
  95. ;Contrato: total:
  96. (define (total venta)
  97.   (+ (subtotal venta)
  98.      (iva venta)
  99.      (icl venta))
  100.   )
  101.  
  102. ;Pruebas:
  103. (check-expect (venta-discriminada venta1) (make-costo-discriminado 1200000 228000 120000 1548000))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement