Ракетка основной вопрос - PullRequest
       1

Ракетка основной вопрос

1 голос
/ 09 сентября 2011

Я начинаю Ракет, и (будучи новичком) у меня возникают проблемы с выяснением, что именно не так с моим кодом.Сначала я попытался реализовать это как одну функцию, и она работала нормально:

; Finds surface area of pipe
; outside surface area (2pir+thickness)*length
; inside SA 2pirad*length
; 2 (area of outer circle - area of inner circle)
; add all together
(define (area-pipe inner_radius height thickness)
  (+ (* 2 pi inner_radius height)
     (* 2 pi height (+ inner_radius thickness))
     (- (* 2 pi (sqr (+ inner_radius thickness)))
             (* 2 pi (sqr inner_radius)))))

И (так как я следую учебным пособиям здесь ), я решил:реализовать это как комбинацию функций, в результате чего я получил следующее:

; functional implementation
(define (area-circle radius)
  (* 2 pi (sqr radius)))
(define (area-cylinder radius height)
  (* 2 pi (sqr radius) height))
;actual function--why doesn't this quite work as planned?
(define (area-pipe1 inner_radius height thickness)
  (+ (area-cylinder inner_radius height)
     (area-cylinder (+ inner_radius thickness) height)
     (- (area-circle (+ inner_radius thickness))
        (area-circle inner_radius))))

Итак, я предполагаю , что есть проблема с моими определениями.Тем не менее, я был бы признателен за некоторые советы и подсказки, почему я не получаю правильные ответы.В качестве тестов сайт предоставляет следующий код:

(test (area-pipe1 0.5 0 0.5) 4.71)
(test (area-pipe1 0 2 1) 18.85)
(test (area-pipe1 1 2 1) 56.54)

1 Ответ

2 голосов
/ 09 сентября 2011

Ваш area-cylinder не так. Следует взять окружность и умножить на высоту. Таким образом:

(define (area-cylinder radius height)
  (* 2 pi radius height))

Ваш area-circle тоже не прав. Должно быть так:

(define (area-circle radius)
  (* pi radius radius))

Таким образом, функция area-pipe должна быть:

(define (area-pipe2 inner-radius height thickness)
  (+ (area-cylinder inner-radius height)
     (area-cylinder (+ inner-radius thickness) height)
     (* 2 (- (area-circle (+ inner-radius thickness))
             (area-circle inner-radius)))))
...