Advertisement
tomasfdel

Racket Práctica 3.1

May 5th, 2016
363
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
Racket 10.10 KB | None | 0 0
  1. EJERCICIO 1)
  2.  
  3. ; Representamos las coordenadas de puntos en el plano y las distancias entre ellos mediante números.
  4.  
  5. ; distancia-origen: Number Number -> Number
  6. ; Recibe la abscisa y ordenada de un punto en el plano y calcula su distancia al origen de coordenadas.
  7. (check-expect (distancia-origen 3 4) 5)
  8. (check-expect (distancia-origen 0 0) 0)
  9. (check-expect (distancia-origen -6 -8) 10)
  10. (check-within (distancia-origen -1 1) 1.41 0.01)
  11. (define (distancia-origen x y) (sqrt(+ (sqr x) (sqr y) ) ) )
  12.  
  13.  
  14. EJERCICIO 2)
  15.  
  16. ; Representamos las coordenadas de puntos en el plano y las distancias entre ellos mediante números.
  17.  
  18. ; distancia-puntos: Number Number Number Number -> Number
  19. ; Recibe x1, y1, x2, y2 , abscisas y ordenadas de dos punto en el plano. Luego, calcula la distancia entre los puntos.
  20. (check-expect (distancia-puntos 1 1 4 5) 5)
  21. (check-expect (distancia-puntos -3 -4 3 4) 10)
  22. (check-within (distancia-puntos 1 1 0 0) 1.41 0.01)
  23. (define (distancia-puntos x1 y1 x2 y2) (sqrt(+ (sqr (- x1 x2)) (sqr (- y1 y2) ) ) ) )
  24.  
  25. EJERCICIO 3)
  26.  
  27. ; Representamos las medidas de largo y volumen como números.
  28.  
  29. ; vol-cubo Number -> Number
  30. ; Recibe un número positivo que representa el largo de la arista de un cubo y calcula el volumen del mismo.
  31. (check-expect (vol-cubo 1) 1)
  32. (check-expect (vol-cubo 10) 1000)
  33. (check-expect (vol-cubo 5) 125)
  34. (define (vol-cubo l) (expt l 3) )
  35.  
  36. EJERCICIO 4)
  37.  
  38. ; Representamos las medidas de largo y volumen como números.
  39.  
  40. ; area-cubo Number -> Number
  41. ; Recibe un número positivo que representa el largo de la arista de un cubo y calcula el area del mismo.
  42. (check-expect (area-cubo 1) 6)
  43. (check-expect (area-cubo 10) 600)
  44. (check-expect (area-cubo 5) 150)
  45. (define (area-cubo l) (* 6 (sqr l) ) )
  46.  
  47. EJERCICIO 5)
  48.  
  49. ; Representamos el área de las imágenes como números.
  50.  
  51. ; area-imagen Image -> Number
  52. ; Recibe una imagen y calcula su área.
  53. (check-expect (area-imagen (rectangle 20 10 "solid" "red")) 200)
  54. (check-expect (area-imagen (circle 10 "solid" "red")) 400)
  55. (check-expect (area-imagen (rectangle 1 1 "solid" "red")) 1)
  56. (define (area-imagen n) (* (image-height n) (image-width n) ) )
  57.  
  58. EJERCICIO 6)
  59.  
  60. ; Representamos las cadenas como strings y las posiciones en la cadena como números.
  61.  
  62. ; string-insert: String Number -> String
  63. ; Recibe una cadena y un entero no negativo i. Inserta un guión ("-") en la posición i-ésima de la cadena.
  64. (check-expect (string-insert "Hola" 0) "-Hola")
  65. (check-expect (string-insert "Cadena" 5) "Caden-a")
  66. (check-expect (string-insert "Ejemplo" 2) "Ej-emplo")
  67. (define (string-insert cadena i) (string-append (substring cadena 0 i) "-" (substring cadena i (string-length cadena) ) ) )
  68.  
  69. EJERCICIO 7)
  70.  
  71. ; Representamos las cadenas como strings.
  72.  
  73. ; string-last: String -> String
  74. ; Recibe una cadena y devuelve el último caracter de la misma.
  75. (check-expect (string-last "Hola") "a")
  76. (check-expect (string-last "String") "g")
  77. (check-expect (string-last "E") "E")
  78. (define (string-last cadena) (substring cadena (- (string-length cadena) 1) (string-length cadena) ) )
  79.  
  80.  
  81. EJERCICIO 8)
  82.  
  83. ; Representamos las cadenas como strings.
  84.  
  85. ; string-remove-last: String -> String
  86. ; Recibe una cadena y un entero no negativo i. Inserta un guión ("-") en la posición i-ésima de la cadena.
  87. (check-expect (string-remove-last "Hola") "Hol")
  88. (check-expect (string-remove-last "Cadena") "Caden")
  89. (check-expect (string-remove-last "E") "")
  90. (define (string-remove-last cadena) (substring cadena 0 (- (string-length cadena) 1) ) )
  91.  
  92. EJERCICIO 10)
  93.  
  94. ; Representamos los puntos del plano mediante estructuras posn.
  95.  
  96. ; distancia-manhattan: posn -> Number
  97. ; Recibe un punto en el plano y calcula su distancia de Manhattan al origen de coordenadas.
  98. (check-expect (distancia-manhattan (make-posn 10 15)) 25)
  99. (check-expect (distancia-manhattan (make-posn -5 0)) 5)
  100. (check-expect (distancia-manhattan (make-posn -8 5)) 13)
  101. (define (distancia-manhattan n) (+ (abs (posn-x n)) (abs (posn-y n)) ) )
  102.  
  103. EJERCICIO 11)
  104.  
  105. ; Representamos las horas mediante estructuras tiempo.
  106.  
  107. ;tiempo es (make-tiempo Number Number Number)
  108. ;Interpretación: Una estructura tiempo representa una hora con tres números enteros: el primero representa la cantidad de horas; el segundo, los minutos; y el tercero, los segundos.
  109. (define-struct tiempo [Horas Minutos Segundos])
  110.  
  111.  
  112. ; tiempo->segundos: tiempo -> Number
  113. ; Recibe una hora y calcula la cantidad de segundos que pasaron desde la medianoche en esa hora.
  114. (check-expect (tiempo->segundos (make-tiempo 0 0 0)) 0)
  115. (check-expect (tiempo->segundos (make-tiempo 10 0 0)) 36000)
  116. (check-expect (tiempo->segundos (make-tiempo 10 30 50)) 37850)
  117. (define (tiempo->segundos n) (+ (* 3600 (tiempo-Horas n)) (* 60 (tiempo-Minutos n)) (tiempo-Segundos n) ) )
  118.  
  119. EJERCICIO 12)
  120.  
  121. Sub-EJERCICIO 2:
  122. ;Estado es un número
  123. ;Interpretación del Estado: Representa la distancia en píxeles del círculo al borde superior de la escena.
  124.  
  125. ;La constante ANCHO se usa para determinar el ancho del fondo a utilizar.
  126. (define ANCHO 400)
  127. ;La constante ALTO se usa para determinar el alto del fondo a utilizar.
  128. (define ALTO 200)
  129. ;La constante RADIO se usa para definir el radio del círculo.
  130. (define RADIO 20)
  131. ;La constante DELTA define cuánta distancia en píxeles recorerá el círculo en cada movimiento.
  132. (define DELTA 20)
  133.  
  134.  
  135. ;pantalla: Estado -> Image
  136. ;Ubica el círculo n píxeles debajo del margen superior del FONDO, centrado horizontalmente en la escena.
  137. (define (pantalla n) (place-image (circle RADIO "solid" "magenta") (/ ANCHO 2) n (empty-scene ANCHO ALTO)) )
  138.  
  139.  
  140. ;mover: Estado Key -> Estado
  141. ;Modifica el estado asociado al big bang, siguiendo las reglas:
  142. ; En caso de apretar la flecha arriba, el estado aumente DELTA unidades, siempre que el círculo no escape de la pantalla.
  143. ; En caso de apretar la flecha abajo, el estado disminuya DELTA unidades, siempre que el círculo no escape de la pantalla.
  144. ; En caso de apretar la barra espaciadora, el estado vuelva a la situación inicial
  145. ; Ignore cualquier otra tecla y mantenga el estado como se encuentra.
  146. (define (mover n tecla) (cond
  147.                           [(key=? tecla "up")    (if (>= n (* 2 RADIO)) (- n DELTA) n)]
  148.                           [(key=? tecla "down")  (if (<= n (- ALTO (* 2 RADIO))) (+ n DELTA) n)]
  149.                           [(key=? tecla " ") (/ ALTO 2)]
  150.                           [else n]))
  151.  
  152. ;mouse-handler; Estado Number Number String -> Estado
  153. ;Modifica el estado para que el círculo se posicione en la altura correspondiente a un click izquierdo en la escena.
  154. (define (mouse-handler n x y event) (cond [(string=? event "button-down") y]
  155.                                           [else n]))
  156.  
  157. (big-bang (/ ALTO 2)
  158.           [to-draw pantalla]
  159.           [on-key mover]
  160.           [on-mouse mouse-handler]
  161. )
  162.  
  163. Sub.EJERCICIO 4:
  164.  
  165. ;Estado es un Número
  166. ;Interpretación: Representa la distancia en píxeles a la que se encontrará la imagen del borde izquierdo de una escena.
  167.  
  168. ;La constante AUTO establece la imagen que se irá moviendo en la escena.
  169. (define AUTO .)
  170.  
  171. ;La constante LARGO_AUTO determina el largo de la imagen AUTO.
  172. (define LARGO_AUTO (image-width AUTO))
  173. ;La constante DIST_MIN determina la distancia mínima en píxeles a la que podrá estar el auto a los extremos de la escena.
  174. (define DIST_MIN (+ (/ LARGO_AUTO 2) 5) )
  175. ;La constante DELTA establece cuántos píxeles aumentará el estado en cada tick del reloj.
  176. (define DELTA 3)
  177. ;La constante LARGO establece el largo en píxeles de la escena.
  178. (define LARGO 450)
  179. ;La constante ALTO establece el alto en píxeles de la escena.
  180. (define ALTO 100)
  181. ;La constante ESCENA define el fondo sobre el que se moverá la imagen AUTO.
  182. (define ESCENA (empty-scene LARGO ALTO))
  183.  
  184.  
  185. ;pantalla: Estado -> Image
  186. ;Toma un estado n y dibuja la imagen AUTO a n píxeles a la derecha del borde izquierdo de una escena, centrado verticalmente.
  187. (check-expect (pantalla 0) (place-image AUTO 0 (/ ALTO 2) ESCENA) )
  188. (check-expect (pantalla 15) (place-image AUTO 15 (/ ALTO 2) ESCENA) )
  189. (check-expect (pantalla 43) (place-image AUTO 43 (/ ALTO 2) ESCENA) )
  190. (define (pantalla n) (place-image AUTO n (/ ALTO 2) ESCENA) )
  191.  
  192.  
  193. ;incrementar: Estado -> Estado
  194. ;Toma un estado y lo incrementa en DELTA, desplazando el auto DELTA píxeles a la derecha
  195. ;en caso que el mismo se mantenga en la escena luego del incremento.
  196. (check-expect (incrementar 0) (+ 0 DELTA) )
  197. (check-expect (incrementar 20) (+ 20 DELTA) )
  198. (check-expect (incrementar LARGO) LARGO )
  199. (define (incrementar n) (if(<= n (- LARGO DIST_MIN) ) (+ n DELTA) n ) )
  200.  
  201. ;teclado: Estado Key -> Estado
  202. ;Modifica el estado en función de la tecla que se apriete, siguiendo estas reglas:
  203. ; Flecha derecha: Incrementa el estado en 20, en caso que el auto se mantenga en la escena luego del aumento.
  204. ; Flecha izquierda: Decrementa el estado en 20, en caso que el auto se mantenga en la escena luego de la disminución.
  205. ; Barra espaciadora: Devuelve el estado al valor inicial.
  206. ; En caso que se presione cualquier otra tecla, ésta será ignorada y el estado se mantendrá igual.
  207. (check-expect (teclado 0 "right") 20 )
  208. (check-expect (teclado 0 "left") 0 )
  209. (check-expect (teclado 0 " ") DIST_MIN )
  210. (check-expect (teclado 0 "r") 0)
  211. (define (teclado n tecla) (cond [(key=? tecla " ") DIST_MIN]
  212.                                 [(and (key=? tecla "right") (< n (- LARGO DIST_MIN)) ) (+ n 20) ]
  213.                                 [(and (key=? tecla "left") (> n (+ 20 DIST_MIN)) ) (- n 20)]
  214.                                 [else n] ) )
  215.  
  216. ;clickear: Estado MouseEvent -> Estado
  217. ; Revisa si un evento de mouse es un click izquierdo. En caso que lo sea, modifica el estado para que corresponda a la posición
  218. ; en x del click. En caso contrario, el estado se mantiene.
  219. (check-expect (clickear 0 20 20 "button-down") 20 )
  220. (check-expect (clickear 0 40 35 "move") 0 )
  221. (define (clickear n x y evento) (cond [(string=? evento "button-down") x]
  222.                                           [else n]))
  223.  
  224.  
  225. ;programa-principal Estado -> Estado
  226. ;Lanza la función big bang desde la distancia inicial.
  227. (define (programa DIST_MIN)
  228. (big-bang DIST_MIN
  229.     [to-draw pantalla]
  230.         [on-tick incrementar]
  231.         [on-key teclado]
  232.         [on-mouse clickear]
  233. ))
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement