cardel

FDP Ejercicio

Sep 18th, 2020 (edited)
896
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. ; Se requiere una aplicación para administrar la historia academica de
  2. ; estudiantes de la universidad. El historial viene desde archivo y tiene
  3. ; la siguiente información
  4. ;
  5. ; Código  - Curso - Nota - Número creditos
  6. ;
  7. ; 1956001 750080M 3.5  4
  8. ; 2045612 750081M 2.0  2
  9. ;
  10. ; Se desea realizar funciones
  11. ; 1) Que retorne los cursos por estudiante
  12. ; 2) Que calcule el promedio ponderado de un estudiante
  13. ; 3) Que ordene los estudiantes de acuerdo a su promedio ponderado.
  14.  
  15. ;;Crear un archivos datos.txt
  16.  
  17. ;1956001 750080M 3.5  4
  18. ;2045612 750081M 2.0  2
  19. ;1956001 111050M 4.2  4
  20. ;1920000 750080M 4.5  4
  21. ;2045612 111050M 3.4  4
  22.  
  23.  
  24. ;;Vale la pena usar una estructura para los estudiantes
  25. (define-struct estudiante (codigo curso nota creditos))
  26.  
  27. ;;Cargar mis datos
  28. (define datos (read-words/line "datos.txt"))
  29.  
  30. ;;Función para transformar la lista de listas en listas de estudiantes
  31. ;;transformar-datos: lista de listas de string -> lista de estudiantes
  32. (define (transformar-datos lsst)
  33.   (cond
  34.     [(empty? lsst) '()]
  35.     [else
  36.      (cons
  37.       ;;Elemento
  38.       (make-estudiante
  39.        (first (first lsst))
  40.        (first (rest (first lsst)))
  41.        (string->number (first (rest (rest (first lsst)))))
  42.        (string->number (first (rest (rest (rest (first lsst)))))))
  43.       (transformar-datos (rest lsst))
  44.       )]))
  45.  
  46. ;;lista de estructuras estudiante
  47. (define lista-estudiantes (transformar-datos datos))
  48.  
  49. ;;Punto 1
  50. ;;Vamos hacer un filtro y vamos a retornar los que tenga el mismo código
  51.  
  52. ;;Autor: Carlos A Delgado
  53. ;;Fecha: 18 de Septiembre de 2020
  54. ;;Contrato: cursos-estudiante: lista de estudiantes, (string->booleano) -> lista de estudiantes
  55. ;;Propósito: Filtrar de un grupo de estudiante-cursos los cursos de un estudiante
  56. ;;Ejemplos
  57. (define (filtro-estudiantes lst f)
  58.   (cond
  59.     [(null? lst) '()]
  60.     [else
  61.      (local
  62.        (
  63.         (define primero (first lst))
  64.         (define resto (filtro-estudiantes (rest lst) f))
  65.         )
  66.        (cond
  67.          [(f primero) (cons primero resto)]
  68.          [else resto])
  69.        )]))
  70.  
  71. ;;Filtrar
  72. (filtro-estudiantes lista-estudiantes (lambda (x) (equal? (estudiante-codigo x) "1956001")))
  73.  
  74.  
  75. (define (lista-estudiantes-por-codigo codigo-estudiante)
  76.   (filtro-estudiantes lista-estudiantes (lambda (x) (equal? (estudiante-codigo x) codigo-estudiante)))
  77.   )
  78.  
  79. (define (lista-estudiantes-por-asignatura codigo-asignatura)
  80.   (filtro-estudiantes lista-estudiantes (lambda (x) (equal? (estudiante-curso x) codigo-asignatura)))
  81.   )
  82.  
  83.  
  84.  
  85.  
RAW Paste Data