Copyright ©
2005 Suradet Jitprapaikulsarn
สงวนลิขสิทธิ์ 2548 สุรเดช จิตประไพกุลศาล
Homework 4 (Due Monday 4 July 2548)
1. Write a data definition of a rectangle. Solution.
;-----------------
; Data Definition
;-----------------
; A rectangle is a structure consisting of
; - width as number
; - height as number
;------------------------------------------------------------------------------
(define-struct rectangle (width height))
;--------------
; Data Example
;--------------
(define rect-1 (make-rectangle 4 5))
(define rect-2 (make-rectangle 2 7))
(define rect-3 (make-rectangle 9 6))
;-------------
; Code Pattern
; ------------
;(define (F r)
; ... (rectangle-width r) ...
; ... (rectangle-height r) ...
;******************************************************************************
2. Write a function, area, to calculate the area of the rectangle.
;------------------------------------------------------------------------------
; @description calculate the area of a rectangle
; @param r a rectangle
; @return the area of the rectangle r
; @contract area: rectangle -> number
; @example (area (make-rectangle 3 7)) = 21
; @example (area rect-1) = 20
; @example (area rect-2) = 14
; @example (area rect-3) = 54
;------------------------------------------------------------------------------
(define (area r)
(* (rectangle-width r)
(rectangle-height r)))
;------
; Test
;------
"(area (make-rectangle 3 7)) = " (area (make-rectangle 3 7))
"(area rect-1) = " (area rect-1)
"(area rect-2) = " (area rect-2)
"(area rect-3) = " (area rect-3)
3. Write a function, perimeter, to calculate the perimeter of the rectangle.
;------------------------------------------------------------------------------
; @description calculate the perimeter of a rectangle
; @param r a rectangle
; @return the perimeter of the rectangle r
; @contract perimeter: rectangle -> number
; @example (perimeter (make-rectangle 3 7)) = 20
; @example (perimeter rect-1) = 18
; @example (perimeter rect-2) = 18
; @example (perimeter rect-3) = 30
;------------------------------------------------------------------------------
(define (perimeter r)
( + (* (rectangle-width r) 2)
(* (rectangle-height r) 2) ) )
;------
; Test
;------
"(perimeter (make-rectangle 3 7)) = " (perimeter (make-rectangle 3 7))
"(perimeter rect-1) = " (perimeter rect-1)
"(perimeter rect-2) = " (perimeter rect-2)
"(perimeter rect-3) = " (perimeter rect-3)
4. Write a function, transpose, to transpose the rectangle.
;------------------------------------------------------------------------------
; @description perform a transpose of a rectangle
; @param r a rectangle
; @return the transpose of the rectangle r
; @contract transpose: rectangle -> rectangle
; @example (transpose (make-rectangle 3 7)) = (make-rectangle 7 3)
; @example (transpose rect-1) = (make-rectangle 5 4)
; @example (transpose rect-2) = (make-rectangle 7 2)
; @example (transpose rect-3) = (make-rectangle 6 9)
;------------------------------------------------------------------------------
(define (transpose r)
(make-rectangle (rectangle-height r)
(rectangle-width r) ) )
;------
; Test
;------
"(transpose (make-rectangle 3 7)) = " (transpose (make-rectangle 3 7))
"(transpose rect-1) = " (transpose rect-1)
"(transpose rect-2) = " (transpose rect-2)
"(transpose rect-3) = " (transpose rect-3)