JuanFelipeArango28

Proyecto

Sep 30th, 2020 (edited)
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 10.45 KB | None | 0 0
  1. (require 2htdp/batch-io)
  2. ;Estructuras:
  3. (define-struct aspirante (codigo nombre apellido c1 c2 c3 c4 c5 programa))
  4. (define-struct aspiprom (codigo nombre apellido promedio))
  5. ;Listas:
  6. (define lista-aspirantes empty)
  7.  
  8. ;Proyecto final FDP  
  9. ;Autores: Juan Sebastian Grajales, 202059897. Juan Felipe Arango Guzman, 202060066. Diego Fernando Llanos Mondragón, 202060029
  10. ;Fecha: 27-09-20
  11.  
  12. ;Punto 1
  13. ;Contrato: cargar-aspirantes: string -> void  (el void es debido que usamos set!, este no devuelve un resultado si no que hace un cambio a la variable)
  14. ;Propósito: Cargar una lista, pudiendo cambiarla por otra si se desea
  15. ;Ejemplos:
  16. ;Definicion:
  17.  
  18. (define  (cargar-aspirantes rutaarchivo)
  19.   (cond
  20.     [(not (string? rutaarchivo)) (error "El dato ingresado debe ser una ruta de archivo puesta como cadena de texto")]
  21.     [else
  22.      (local
  23.        (
  24.         (define (cargar archivo)
  25.           (read-words/line archivo))
  26.         (define (tostruct lsst)
  27.           (cond
  28.             [(empty? lsst) empty]
  29.             [else (cons (make-aspirante  
  30.                          (string->number (first (first lsst)) )
  31.                          (second (first lsst))
  32.                          (third (first lsst))
  33.                          (string->number (fourth (first lsst)) )
  34.                          (string->number (fifth (first lsst)) )
  35.                          (string->number (first (rest (rest (rest (rest (rest (first lsst))))))) )
  36.                          (string->number (first (rest (rest (rest (rest (rest (rest (first lsst)))))))) )
  37.                          (string->number (first (rest (rest (rest (rest (rest (rest (rest (first lsst))))))))) )
  38.                          (first (rest (rest (rest (rest (rest (rest (rest (rest (first lsst)))))))))) )
  39.                         (tostruct (rest lsst)) )]
  40.             )
  41.           )
  42.         )
  43.  
  44.        (set! lista-aspirantes (list->vector (tostruct (cargar rutaarchivo))))
  45.  
  46.        )]
  47.     )
  48.   )
  49.  
  50. ;Punto 2
  51. ;Contrato: string, string -> archivo.txt
  52. ;Propósito: generar un archivo que contenga los datos de los estudiantes, sacando el promedio con respecto al ICFES según el programa al que el aspirante solicite y ordenándolos de mayor a menor
  53. ;Ejemplos:
  54. ;Definicion:
  55.  
  56. (define (generar-listado programa nombrearchivo)
  57.   (cond
  58.     [(not (and (string? programa) (string? programa))) (error "Los elementos ingresados deben ser cadenas de texto")]
  59.     [else
  60.      (local
  61.        (
  62.         (define (filtro lst prog)
  63.           (cond
  64.             [(empty? lst) empty]
  65.             [(equal? prog (aspirante-programa (first lst))) (cons (first lst) (filtro (rest lst) prog))]
  66.             [else (filtro (rest lst) prog)]
  67.             )
  68.           )
  69.         (define (listaprom lstf prog)
  70.           (cond
  71.             [(empty? lstf) empty]
  72.             [else
  73.              (local
  74.                (
  75.                 (define (promedio aspi prog)
  76.                   (cond
  77.                     [(or (equal? prog "2724") (equal? prog "3743"))
  78.                      (+ (* (aspirante-c1 aspi) 0.21)
  79.                         (* (aspirante-c2 aspi) 0.26)
  80.                         (* (aspirante-c3 aspi) 0.15)
  81.                         (* (aspirante-c4 aspi) 0.15)
  82.                         (* (aspirante-c5 aspi) 0.23))]
  83.          
  84.                     [(equal? prog "2710")
  85.                      (+ (* (aspirante-c1 aspi) 0.25)
  86.                         (* (aspirante-c2 aspi) 0.25)
  87.                         (* (aspirante-c3 aspi) 0.25)
  88.                         (* (aspirante-c4 aspi) 0.15)
  89.                         (* (aspirante-c5 aspi) 0.10))]
  90.    
  91.  
  92.                     [(equal? prog "3753")
  93.                      (+ (* (aspirante-c1 aspi) 0.15)
  94.                         (* (aspirante-c2 aspi) 0.35)
  95.                         (* (aspirante-c3 aspi) 0.30)
  96.                         (* (aspirante-c4 aspi) 0.15)
  97.                         (* (aspirante-c5 aspi) 0.05))]
  98.  
  99.                     [(equal? prog "2712")
  100.                      (+ (* (aspirante-c1 aspi) 0.15)
  101.                         (* (aspirante-c2 aspi) 0.35)
  102.                         (* (aspirante-c3 aspi) 0.40)
  103.                         (* (aspirante-c4 aspi) 0.05)
  104.                         (* (aspirante-c5 aspi) 0.05))]
  105.  
  106.                     [(equal? prog "3249")
  107.                      (+ (* (aspirante-c1 aspi) 0.40)
  108.                         (* (aspirante-c2 aspi) 0.10)
  109.                         (* (aspirante-c3 aspi) 0.10)
  110.                         (* (aspirante-c4 aspi) 0.40)
  111.                         (* (aspirante-c5 aspi) 0))]
  112.                              
  113.                     [(equal? prog "3841")
  114.                      (+ (* (aspirante-c1 aspi) 0.20)
  115.                         (* (aspirante-c2 aspi) 0.35)
  116.                         (* (aspirante-c3 aspi) 0.15)
  117.                         (* (aspirante-c4 aspi) 0.20)
  118.                         (* (aspirante-c5 aspi) 0.10))]
  119.  
  120.                     [(equal? prog "3845")
  121.                      (+ (* (aspirante-c1 aspi) 0.30)
  122.                         (* (aspirante-c2 aspi) 0.30)
  123.                         (* (aspirante-c3 aspi) 0.10)
  124.                         (* (aspirante-c4 aspi) 0.20)
  125.                         (* (aspirante-c5 aspi) 0.10))]
  126.          
  127.                     [else (error "programa ingresado no valido")]    
  128.                     )
  129.                   )
  130.                 )
  131.                (cons (make-aspiprom (aspirante-codigo (first lstf))
  132.                                     (aspirante-nombre (first lstf))
  133.                                     (aspirante-apellido (first lstf))
  134.                                     (promedio (first lstf) prog))
  135.                      (listaprom (rest lstf) prog))
  136.                )]
  137.             )
  138.           )
  139.  
  140.  
  141.         (define (ordenar lstp)
  142.           (cond
  143.             [(empty? lstp) empty]
  144.             [else
  145.              (local
  146.                (
  147.                 (define (ordenaraux aspirantep lstpo)
  148.                   (cond
  149.                     [(empty? lstpo) (cons aspirantep empty)]
  150.                     [(> (aspiprom-promedio aspirantep ) (aspiprom-promedio (first lstpo)) )
  151.                      (cons aspirantep lstpo)]
  152.                     [else (cons (first lstpo) (ordenaraux aspirantep (rest lstpo)))]
  153.                     )
  154.                   )
  155.                 )
  156.                (ordenaraux (first lstp) (ordenar (rest lstp)))
  157.                )]
  158.             )
  159.           )
  160.         (define (totext lstp)
  161.           (cond
  162.             [(empty? lstp) " "]
  163.             [else (string-append (number->string (aspiprom-codigo (first lstp))) " "
  164.                                  (aspiprom-nombre (first lstp)) " "
  165.                                  (aspiprom-apellido (first lstp)) " "
  166.                                  (number->string (aspiprom-promedio (first lstp))) " "
  167.                                  "\n"
  168.                                  (totext (rest lstp)) )]
  169.             )
  170.           )
  171.         )
  172.        (begin
  173.          (set! lista-aspirantes (vector->list lista-aspirantes))
  174.          (write-file nombrearchivo (totext (ordenar (listaprom (filtro lista-aspirantes programa) programa))))  
  175.          (set! lista-aspirantes (list->vector lista-aspirantes)) )
  176.        )]
  177.     )
  178.   )
  179.  
  180. ;Punto 3
  181. ;Contrato: eliminar-aspirante: lista numerica -> display (datos de aspirantes eliminados)
  182. ;Proposito: Eliminar de la lista de aspirantes quienes tengan la ficha de inscripcion que este dentro de la lista que se le da a la funcion y luego mostrar en pantalla los datos de estos
  183. ;Ejemplos:
  184. ;Definicion:
  185. (define (eliminar-aspirante listanum)
  186.   (cond
  187.     [(empty? listanum) (error "El aspirante buscado no esta en la lista")]
  188.     [else
  189.      (local
  190.        (
  191.         (define (v  lsta  listanum)
  192.           (cond
  193.             ((empty? lsta) empty)
  194.             ((vaux (aspirante-codigo (first lsta)) listanum) (v (rest lsta) listanum))
  195.             (else (cons (first lsta ) (v(rest lsta) listanum)))        
  196.             )
  197.           )
  198.         (define (vaux codigo listanum)
  199.           (cond
  200.             ((empty? listanum) #f)
  201.             ((equal? codigo (first listanum)) #t)
  202.             (else (vaux codigo (rest listanum)))
  203.             )
  204.           )
  205.         (define (w  lsta  listanum)
  206.           (cond
  207.             ((empty? lsta) empty)
  208.             ((waux (aspirante-codigo (first lsta)) listanum) (w (rest lsta) listanum))
  209.             (else (cons (first lsta ) (w(rest lsta) listanum)))        
  210.             )
  211.           )
  212.         (define (waux num u)
  213.           (cond
  214.             ((empty? u) #t)
  215.             ((equal? num (first u)) #f)
  216.             (else (waux num (rest u)))
  217.             )
  218.           )  
  219.         )
  220.        (begin
  221.          (set! lista-aspirantes (vector->list lista-aspirantes))
  222.          (display (w lista-aspirantes listanum))
  223.          (set! lista-aspirantes (v lista-aspirantes listanum))
  224.          (set! lista-aspirantes (list->vector lista-aspirantes))
  225.          ))]
  226.     )
  227.   )
  228.  
  229. ;Punto 4
  230. ;Contrato: string -> archivo.txt
  231. ;Proposito: Guardar en un archivo de texto el valor de la lista de los aspirantes actualizado las veces que se desee, cada vez que se borre un estudiante, esta función actualiza la lista guardando los cambios.
  232. ;Ejemplos:
  233. ;Definicion:
  234. (define (guardar-aspirantes nombrearchivo)
  235.   (cond
  236.     [(not (string? nombrearchivo)) (error "La entrada debe ser una cadena que represente el nombre con el que se guardara el archivo")]
  237.     [else
  238.      (local
  239.        (
  240.         (define (totext2 lstp)
  241.           (cond
  242.             [(empty? lstp) " "]
  243.             [else (string-append (number->string (aspirante-codigo (first lstp))) " "
  244.                                  (aspirante-nombre (first lstp)) " "
  245.                                  (aspirante-apellido (first lstp)) " "
  246.                                  (number->string (aspirante-c1 (first lstp))) " "
  247.                                  (number->string (aspirante-c2 (first lstp))) " "
  248.                                  (number->string (aspirante-c3 (first lstp))) " "
  249.                                  (number->string (aspirante-c4 (first lstp))) " "
  250.                                  (number->string (aspirante-c5 (first lstp))) " "
  251.                                  (aspirante-programa (first lstp)) " "
  252.                                  "\n"
  253.                                  (totext2 (rest lstp)) )]
  254.  
  255.             )
  256.           )
  257.         )
  258.        (begin
  259.          (set! lista-aspirantes (vector->list lista-aspirantes))
  260.          (write-file nombrearchivo (totext2 lista-aspirantes))
  261.          (set! lista-aspirantes (list->vector lista-aspirantes))
  262.          ))]
  263.     )
  264.   )
  265.  
  266.  
Add Comment
Please, Sign In to add comment