Advertisement
juaniisuar

ej 1 p 2

Apr 7th, 2016
358
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 3.11 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. ; pantalla : Number -> Image
  18. ; transforma el estado del sistema en una imagen a mostrar a través de la cláusula to-draw
  19. (define (pantalla n)
  20.   (cond ((<= n 50) (place-image (circle n "solid" "yellow") 150 150
  21.                                   (empty-scene 300 300)))
  22.         ((<= n 100) (place-image (circle n "solid" "red") 150 150
  23.                                   (empty-scene 300 300)))
  24.         ((<= n 150) (place-image (circle n "solid" "green") 150 150
  25.                                   (empty-scene 300 300)))))
  26.  
  27.  
  28. ; incrementar : Number -> Number
  29. ; suma uno a su argumento
  30. (define (incrementar n) (if (= n 150) 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 ((number? (string->number k)) (* (string->number k) 10) )
  38.                           (else n)))
  39.  
  40. ; la siguiente expresión big-bang incorpora un manejador de eventos, asociado al paso del tiempo.
  41. (big-bang 0                 ; estado inicial del sistema
  42.           [to-draw pantalla]
  43.           [on-key tecla]
  44.           [on-tick incrementar]    
  45.           )
  46.  
  47. ; to-draw: al principio, y luego de manejar cualquier evento,
  48. ; se invoca la función pantalla pasando como argumento el valor del estado actual
  49.  
  50. ; on-tick: Manejador de eventos. Cada vez que el reloj de la computadora avance uno (es decir, cuando se produce el evento "tick"),
  51. ; invocar a la función decrementar.
  52. ; El resultado de esta función será el nuevo estado del sistema.
  53. ; Recuerde que luego de invocar a cualquier manejador de eventos (decrementar en este caso), se invoca a la función pantalla.
  54.  
  55. ; PRESIONE ejecutar y vea qué sucede. Ahora reemplace el manejador del evento on-tick por la función incrementar y ejecute nuevamente.
  56.  
  57. ; EJERCICIO: Invente tres preguntas del estilo "Qué pasa si..." e implemente las respuestas en DrRacket.
  58. ; 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