miércoles, 17 de mayo de 2017

Cómo programar: datos simples (14) - Ejemplo función con condicional IF

Para este ejemplo, se quiere crear una función que produzca "verdadero" (true) si la imagen es alta. Entiéndase por alto cuando el alto es mayor que el ancho.

al utilizar la receta de diseño de funciones se tiene lo siguiente:

(require 2htdp/image)

;Firma (signature)
;Image --> Boolean (a partir de una imagen se produce un dato booleano)

;Próposito (purpose):
;Producir "verdadero" si el alto de la imagen es mayor que su ancho.

;colilla (stub). Se hace un borrador de la función, no tiene que ser la soluciòn completa
; en este ejemplo, se crea una función llamada "tall?" con argumento "img"(imagen) que por ahora produce false
(define (tall? img) false)

;Ejemplos:
(check-expect (tall? (rectangle 2 3 "solid" "red")) true)

;Al utilizar la función tall? cuyo argumento es un rectangulo de ancho 2 pixeles y alto 3 pixeles
; se deberia producir "true", pues es verdadero que 3 es mayor que 2.

(check-expect (tall? (rectangle 3 2 "solid" "red")) false)

;Al utilizar la función tall? cuyo argumento es un rectangulo de ancho 3 pixeles y alto 2 pixeles
; se deberia producir "false", pues es falso que 2 es mayor que 3.

(check-expect (tall? (rectangle 3 3 "solid" "red")) false)

;Al utilizar la función tall? cuyo argumento es un rectangulo de ancho 3 pixeles y alto 3 pixeles
; se deberia producir "false", pues es falso que 3 es mayor que 3.

Por ahora, se ejecuta este código para verificar que este bien planteado, asi sea que los resultados esperados sean diferentes a lo que produce la función.




 
Posteriormente se inserta la plantilla de la función dentro del código, asi como la función completa:

(require 2htdp/image)

;Firma (signature)
;Image --> Boolean (a partir de una imagen se produce un dato booleano)

;Próposito (purpose):
;Producir "verdadero" si el alto de la imagen es mayor que su ancho.

;colilla (stub). Se hace un borrador de la función, no tiene que ser la soluciòn completa
; en este ejemplo, se crea una función llamada "tall?" con argumento "img"(imagen) que por ahora produce false
;(define (tall? img) false)

;plantilla (template)
;(define (tall? img )
; (... img)

;Función
(define (tall? img)
(if (> (image-height img) (image-width img))
      true
      false))

;Ejemplos:
(check-expect (tall? (rectangle 2 3 "solid" "red")) true)

;Al utilizar la función tall? cuyo argumento es un rectangulo de ancho 2 pixeles y alto 3 pixeles
; se deberia producir "true", pues es verdadero que 3 es mayor que 2.

(check-expect (tall? (rectangle 3 2 "solid" "red")) false)

;Al utilizar la función tall? cuyo argumento es un rectangulo de ancho 3 pixeles y alto 2 pixeles
; se deberia producir "false", pues es falso que 2 es mayor que 3.

(check-expect (tall? (rectangle 3 3 "solid" "red")) false)

;Al utilizar la función tall? cuyo argumento es un rectangulo de ancho 3 pixeles y alto 3 pixeles
; se deberia producir "false", pues es falso que 3 es mayor que 3.

Al ejecutar este código, las tres pruebas pasan satisfactoriamente:



Es de señalar que la función creada anteriormente puede simplificarse, teniendo en cuenta que en este caso, el condicional IF cuando es verdadero produce "true" y cuando es falso produce "false", lo cual es redundante:

(define (tall? img)
(if (> (image-height img) (image-width img))
      true
      false))

Por lo tanto, la función anterior puede reducirse a lo siguiente:

(define (tall? img)
(> (image-height img) (image-width img))



Anterior
Siguiente

No hay comentarios:

Publicar un comentario

Cómo programar: datos simples (21) - Enumeración

Diseñar una definición de datos para representar las letras de calificaciones en un curso.  Estas letras son A, B y C, que significan bueno,...