Not a member of Pastebin yet?
Sign Up,
it unlocks many cool features!
- (require 2htdp/batch-io)
- ;Estructuras:
- (define-struct aspirante (codigo nombre apellido c1 c2 c3 c4 c5 programa))
- (define-struct aspiprom (codigo nombre apellido promedio))
- ;Listas:
- (define lista-aspirantes empty)
- ;Proyecto final FDP
- ;Autores: Juan Sebastian Grajales, 202059897. Juan Felipe Arango Guzman, 202060066. Diego Fernando Llanos Mondragón, 202060029
- ;Fecha: 27-09-20
- ;Punto 1
- ;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)
- ;Propósito: Cargar una lista, pudiendo cambiarla por otra si se desea
- ;Ejemplos:
- ;Definicion:
- (define (cargar-aspirantes rutaarchivo)
- (cond
- [(not (string? rutaarchivo)) (error "El dato ingresado debe ser una ruta de archivo puesta como cadena de texto")]
- [else
- (local
- (
- (define (cargar archivo)
- (read-words/line archivo))
- (define (tostruct lsst)
- (cond
- [(empty? lsst) empty]
- [else (cons (make-aspirante
- (string->number (first (first lsst)) )
- (second (first lsst))
- (third (first lsst))
- (string->number (fourth (first lsst)) )
- (string->number (fifth (first lsst)) )
- (string->number (first (rest (rest (rest (rest (rest (first lsst))))))) )
- (string->number (first (rest (rest (rest (rest (rest (rest (first lsst)))))))) )
- (string->number (first (rest (rest (rest (rest (rest (rest (rest (first lsst))))))))) )
- (first (rest (rest (rest (rest (rest (rest (rest (rest (first lsst)))))))))) )
- (tostruct (rest lsst)) )]
- )
- )
- )
- (set! lista-aspirantes (list->vector (tostruct (cargar rutaarchivo))))
- )]
- )
- )
- ;Punto 2
- ;Contrato: string, string -> archivo.txt
- ;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
- ;Ejemplos:
- ;Definicion:
- (define (generar-listado programa nombrearchivo)
- (cond
- [(not (and (string? programa) (string? programa))) (error "Los elementos ingresados deben ser cadenas de texto")]
- [else
- (local
- (
- (define (filtro lst prog)
- (cond
- [(empty? lst) empty]
- [(equal? prog (aspirante-programa (first lst))) (cons (first lst) (filtro (rest lst) prog))]
- [else (filtro (rest lst) prog)]
- )
- )
- (define (listaprom lstf prog)
- (cond
- [(empty? lstf) empty]
- [else
- (local
- (
- (define (promedio aspi prog)
- (cond
- [(or (equal? prog "2724") (equal? prog "3743"))
- (+ (* (aspirante-c1 aspi) 0.21)
- (* (aspirante-c2 aspi) 0.26)
- (* (aspirante-c3 aspi) 0.15)
- (* (aspirante-c4 aspi) 0.15)
- (* (aspirante-c5 aspi) 0.23))]
- [(equal? prog "2710")
- (+ (* (aspirante-c1 aspi) 0.25)
- (* (aspirante-c2 aspi) 0.25)
- (* (aspirante-c3 aspi) 0.25)
- (* (aspirante-c4 aspi) 0.15)
- (* (aspirante-c5 aspi) 0.10))]
- [(equal? prog "3753")
- (+ (* (aspirante-c1 aspi) 0.15)
- (* (aspirante-c2 aspi) 0.35)
- (* (aspirante-c3 aspi) 0.30)
- (* (aspirante-c4 aspi) 0.15)
- (* (aspirante-c5 aspi) 0.05))]
- [(equal? prog "2712")
- (+ (* (aspirante-c1 aspi) 0.15)
- (* (aspirante-c2 aspi) 0.35)
- (* (aspirante-c3 aspi) 0.40)
- (* (aspirante-c4 aspi) 0.05)
- (* (aspirante-c5 aspi) 0.05))]
- [(equal? prog "3249")
- (+ (* (aspirante-c1 aspi) 0.40)
- (* (aspirante-c2 aspi) 0.10)
- (* (aspirante-c3 aspi) 0.10)
- (* (aspirante-c4 aspi) 0.40)
- (* (aspirante-c5 aspi) 0))]
- [(equal? prog "3841")
- (+ (* (aspirante-c1 aspi) 0.20)
- (* (aspirante-c2 aspi) 0.35)
- (* (aspirante-c3 aspi) 0.15)
- (* (aspirante-c4 aspi) 0.20)
- (* (aspirante-c5 aspi) 0.10))]
- [(equal? prog "3845")
- (+ (* (aspirante-c1 aspi) 0.30)
- (* (aspirante-c2 aspi) 0.30)
- (* (aspirante-c3 aspi) 0.10)
- (* (aspirante-c4 aspi) 0.20)
- (* (aspirante-c5 aspi) 0.10))]
- [else (error "programa ingresado no valido")]
- )
- )
- )
- (cons (make-aspiprom (aspirante-codigo (first lstf))
- (aspirante-nombre (first lstf))
- (aspirante-apellido (first lstf))
- (promedio (first lstf) prog))
- (listaprom (rest lstf) prog))
- )]
- )
- )
- (define (ordenar lstp)
- (cond
- [(empty? lstp) empty]
- [else
- (local
- (
- (define (ordenaraux aspirantep lstpo)
- (cond
- [(empty? lstpo) (cons aspirantep empty)]
- [(> (aspiprom-promedio aspirantep ) (aspiprom-promedio (first lstpo)) )
- (cons aspirantep lstpo)]
- [else (cons (first lstpo) (ordenaraux aspirantep (rest lstpo)))]
- )
- )
- )
- (ordenaraux (first lstp) (ordenar (rest lstp)))
- )]
- )
- )
- (define (totext lstp)
- (cond
- [(empty? lstp) " "]
- [else (string-append (number->string (aspiprom-codigo (first lstp))) " "
- (aspiprom-nombre (first lstp)) " "
- (aspiprom-apellido (first lstp)) " "
- (number->string (aspiprom-promedio (first lstp))) " "
- "\n"
- (totext (rest lstp)) )]
- )
- )
- )
- (begin
- (set! lista-aspirantes (vector->list lista-aspirantes))
- (write-file nombrearchivo (totext (ordenar (listaprom (filtro lista-aspirantes programa) programa))))
- (set! lista-aspirantes (list->vector lista-aspirantes)) )
- )]
- )
- )
Add Comment
Please, Sign In to add comment