Advertisement
juaniisuar

ej 2 p2

Apr 7th, 2016
355
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 3.33 KB | None | 0 0
  1. ;; The first three lines of this file were inserted by DrRacket. They record metadata
  2. ;; about the language level of this file in a form that our tools can easily process.
  3. #reader(lib "htdp-beginner-reader.ss" "lang")((modname bigbang2) (read-case-sensitive #t) (teachpacks ((lib "image.rkt" "teachpack" "2htdp") (lib "batch-io.rkt" "teachpack" "2htdp") (lib "universe.rkt" "teachpack" "2htdp"))) (htdp-settings #(#t constructor repeating-decimal #f #t none #f ((lib "image.rkt" "teachpack" "2htdp") (lib "batch-io.rkt" "teachpack" "2htdp") (lib "universe.rkt" "teachpack" "2htdp")) #f)))
  4. ; bigbang2.rkt
  5. ; Ejemplo de expresiones big-bang.
  6.  
  7. ; Este programa debe ejecutarse en el siguiente contexto:
  8. ;; Lenguaje: Estudiante principiante. Paquetes de enseñanza: 2hdtp/image y universe
  9. ;; Si no hay ningún lenguaje y paquete cargado, descomentar las siguientes líneas:
  10. ;;;#lang racket
  11. ;;;(require 2htdp/image)
  12. ;;;(require 2htdp/universe)
  13.  
  14. ; El estado del sistema será un número, que representa la longitud del radio de un círculo azul,
  15. ; a dibujarse en el centro de una escena.
  16.  
  17. (define ALTO 300)
  18. (define ANCHO 300)
  19. (define RADIO 30)
  20. (define DELTA 25)
  21. (define INICIAL (/ ALTO 2))
  22. ; pantalla : Number -> Image
  23. ; transforma el estado del sistema en una imagen a mostrar a través de la cláusula to-draw
  24. (define (pantalla n)
  25.         (place-image (circle RADIO "solid" "orange") (/ ALTO 2) n (empty-scene ANCHO ALTO)))
  26.  
  27.  
  28. ; incrementar : Number -> Number
  29. ; suma uno a su argumento
  30. (define (incrementar n) (if (= n (/ ALTO 2)) 0 (+ n 1)))
  31.  
  32.  
  33. ; decrementar : Number -> Number
  34. ; Devuelve el predecesor de un número positivo. Si el número es 0, devuelve 100.
  35. (define (decrementar n) (if (= n 0) 100 (- n 1)))
  36.  
  37. (define (tecla n k) (cond
  38.                       ((key=? k " ") INICIAL)
  39.                       ((and (key=? k "down") (<= n (- ALTO RADIO))) (+ n DELTA))
  40.                       ((and (key=? k "up") (>= n RADIO)) (- n DELTA))
  41.                       ((number? (string->number k)) (* (string->number k) 10) )
  42.                       (else n)))
  43.  
  44. (define (mouse-handler n x y event) (cond [(string=? event "button-down") y]
  45.                                           [else n]))
  46.  
  47. ; la siguiente expresión big-bang incorpora un manejador de eventos, asociado al paso del tiempo.
  48. (big-bang INICIAL                 ; estado inicial del sistema
  49.           [to-draw pantalla]
  50.           [on-key tecla]
  51.           [on-mouse mouse-handler]
  52.           ;[on-tick incrementar]    
  53.           )
  54.  
  55. ; to-draw: al principio, y luego de manejar cualquier evento,
  56. ; se invoca la función pantalla pasando como argumento el valor del estado actual
  57.  
  58. ; on-tick: Manejador de eventos. Cada vez que el reloj de la computadora avance uno (es decir, cuando se produce el evento "tick"),
  59. ; invocar a la función decrementar.
  60. ; El resultado de esta función será el nuevo estado del sistema.
  61. ; Recuerde que luego de invocar a cualquier manejador de eventos (decrementar en este caso), se invoca a la función pantalla.
  62.  
  63. ; PRESIONE ejecutar y vea qué sucede. Ahora reemplace el manejador del evento on-tick por la función incrementar y ejecute nuevamente.
  64.  
  65. ; EJERCICIO: Invente tres preguntas del estilo "Qué pasa si..." e implemente las respuestas en DrRacket.
  66. ; Algunos ejemplos: "Qué pasa si hago que decrementar reste uno siempre, aun cuando su argumento es 0"
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement