JuanFelipeArango28

proyecto final

Sep 27th, 2020 (edited)
326
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Scheme 7.14 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.                                            
Add Comment
Please, Sign In to add comment