Pcs2d

Listas y estructuras 1 - Hardcore Tier I

Apr 17th, 2013
85
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 3.69 KB | None | 0 0
  1. ;**Estructura: la estructura lleva dentro de si misma un valor adicional llamado "aRetirar" que es el monto de lo que va a retirar el cliente, -->NO LEER: las recursivas tiene conflictos con funciones auxiliares que requieren de dos o mas variables, usar una y solo una variable estructura si se necesita.
  2. (define-struct cbank (id Ncuenta Tcuenta nTrans limit credito dinerototal aRetirar))
  3. ;**Funcion Auxiliar: Retiro nomina
  4. (define (R-Nomina Persona)
  5.   (cond
  6.     [(cbank? Persona)
  7.      (if (and (>= (cbank-aRetirar Persona) 0)
  8.               (> (cbank-dinerototal Persona) (cbank-aRetirar Persona)))
  9.          (make-cbank (cbank-id Persona)
  10.                      (cbank-Ncuenta Persona)
  11.                      (cbank-Tcuenta Persona)
  12.                      (+ (cbank-nTrans Persona) 1)
  13.                      (cbank-limit Persona)
  14.                      (cbank-credito Persona)
  15.                      (- (cbank-dinerototal Persona) (cbank-aRetirar Persona))
  16.                      (cbank-aRetirar Persona))
  17.          "No transaccion")]
  18.     [else "No transaccion"]))
  19. ;**Funcion Aunxiliar: Retiro ahorros
  20. (define (R-Ahorros Persona)
  21.   (cond
  22.     [(cbank? Persona)
  23.      (if (>= (- (cbank-dinerototal Persona) (cbank-aRetirar Persona)) 20000)
  24.          (make-cbank (cbank-id Persona)
  25.                      (cbank-Ncuenta Persona)
  26.                      (cbank-Tcuenta Persona)
  27.                      (cbank-nTrans Persona)
  28.                      (cbank-limit Persona)
  29.                      (cbank-credito Persona)
  30.                      (- (cbank-dinerototal Persona)
  31.                         (cbank-aRetirar Persona))
  32.                      (cbank-aRetirar Persona))
  33.          "Supera el limite de retiro")]
  34.     [else "No transaccion"]))
  35. ;**Funcion Auxiliar: Retiro credito, enrealidad suma al credito
  36. (define (R-Credito Persona)
  37.   (cond
  38.     [(< (cbank-aRetirar Persona) (cbank-limit Persona))
  39.      (make-cbank (cbank-id Persona)
  40.                      (cbank-Ncuenta Persona)
  41.                      (cbank-Tcuenta Persona)
  42.                      (cbank-nTrans Persona)
  43.                      (cbank-limit Persona)
  44.                      (+ (cbank-aRetirar Persona)
  45.                         (cbank-credito Persona))
  46.                      (cbank-dinerototal Persona)
  47.                      (cbank-aRetirar Persona))]
  48.     [else "No transaccion"]))
  49. ;*****----> Funcion principal <----*****
  50. (define (BancoRetiro ListaPersonas)
  51.   (cond
  52.     [(empty? ListaPersonas) empty] ;Recordar que "empty" (sin comillas) es un operador de listas.
  53.     [(symbol=? 'Nomina (cbank-Tcuenta (first ListaPersonas)))
  54.      (cons (R-Nomina (first ListaPersonas))
  55.            (BancoRetiro (rest ListaPersonas)))]
  56.     [(symbol=? 'Ahorros (cbank-Tcuenta (first ListaPersonas)))
  57.      (cons (R-Ahorros (first ListaPersonas))
  58.            (BancoRetiro (rest ListaPersonas)))]
  59.     [(symbol=? 'Credito (cbank-Tcuenta (first ListaPersonas)))
  60.      (cons (R-Credito (first ListaPersonas))
  61.            (BancoRetiro (rest ListaPersonas)))]
  62.     [else "error"]))
  63.  
  64. (define 17abril2013 (list (make-cbank "Carla Marroquin" 1999 'Nomina 0 0 0 100000 232)
  65.                           (make-cbank "Juan Paniagua" 2564 'Ahorros 0 0 0 100000 80000)
  66.                           (make-cbank "Esnaider Chichipua" 9501 'Credito 0 100000 500000 100000 232)
  67.                           (make-cbank "Jenry Valenverg" 1001 'Nomina 0 25000 0 100000 232)))
  68. ;Prueba
  69. (BancoRetiro 17abril2013);--->
  70. ;(cons (make-cbank "Carla Marroquin" 1999 'Nomina 1 0 0 99768 232)
  71. ;      (cons (make-cbank "Juan Paniagua" 2564 'Ahorros 0 0 0 20000 80000)
  72. ;            (cons (make-cbank "Esnaider Chichipua" 9501 'Credito 0 100000 500232 100000 232)
  73. ;                  (cons (make-cbank "Jenry Valenverg" 1001 'Nomina 1 25000 0 99768 232) empty))))
Advertisement
Add Comment
Please, Sign In to add comment