scheme תרגיל 5

bennylisp, Racket, schemeLeave a Comment

מימוש הנוסחאות של פאיי בשפת LISP

  1. פונקציה pi1
  2. פונקציה pi2
  3. פונקציה pi3
  4. פונקציה שמחזירה רשימה עם זוגות סדורים לפי סדר עלוה של ההפרש בין פאיי לתוצאת הנוסחא

#lang racket


;1 tail recursion
(define (pi1help K [result 1])
  (if(= K 0) result
    (if(=(modulo K 2)0)          (pi1help (- K 1) (+ result  (/ 1.0 (+(* 2 K)1)))) 
      (if(not(=(modulo K 2)0)) (pi1help (- K 1) (- result  (/ 1.0 (+(* 2 K)1)))) ""))))  


(define (pi1 K)
  (* 4 (pi1help (- K 1))))


;2 recursion
(define(pi2help K)
  (if(= 0 K) 1
     (+ (/ 1 (* (+ 1 K) (+ 1 K))) (pi2help (- K 1)))))

(define (pi2 K)
  (sqrt (* 6.0 (pi2help (- K 1))   )    ))

;3 recursion
(define(pi3help K)
  (if(= 0 K) (- (- (- 4 (/ 1 2)) (/ 1 5))(/ 1 6))
     (+(* (pow(/ 1 16) K)    (- (- (- (/ 4.0 (+ (* 8 K) 1)) (/ 2 (+ (* 8 K) 4))) (/ 1 (+ (* 8 K) 5)))(/ 1 (+ (* 8 K) 6)))   )      (pi3help (- K 1)      )
     )))

(define(pi3 K)
  (pi3help (- K 1)))


(define pow 
  (lambda (x n) 
    (cond 
     ((< n 1) 1) ((= n 1) x) (#t (* x (pow x (- n 1))) ) ) ) ) ;4 ;==========INPUT CIN============ (define (inputcorrect? N) (if(and(> N 0)(= (modulo N 1) 0)) #t #f))


;==========return the result in list============
(define(listpi1 N)
  (cons '<procedure:pi1>  (pi1 N) ))


(define(listpi2 N)
  (cons '<procedure:pi2>  (pi2 N) ))


(define(listpi3 N)
  (cons '<procedure:pi3>  (pi3 N) ))
;==========return the result in lis============  
  
(define(calcpi1 L1 L2 L3)
  (if(and( < (difference(cdr L1)) (difference(cdr L2))) (< (difference(cdr L2)) (difference(cdr L3))))  (cons L1 (cons L2 (cons L3 null)))
     (if(and( < (difference(cdr L1)) (difference(cdr L3))) (< (difference(cdr L3)) (difference(cdr L2))))  (cons L1 (cons L3 (cons L2 null)))
        (if(and( < (difference(cdr L2)) (difference(cdr L1))) (< (difference(cdr L1)) (difference(cdr L3))))  (cons L2 (cons L1 (cons L3 null)))
           (if(and( < (difference(cdr L2)) (difference(cdr L3))) (< (difference(cdr L3)) (difference(cdr L1))))  (cons L2 (cons L3 (cons L1 null)))
              (if(and( < (difference(cdr L3)) (difference(cdr L1))) (< (difference(cdr L1)) (difference(cdr L2)))) (cons L3 (cons L1 (cons L2 null))) (cons L3 (cons L2 (cons L1 null))))))))) (define(calcpi N) (if(inputcorrect? N) (calcpi1 (listpi1 N) (listpi2 N) (listpi3 N)) "ERROR INPUT")) (define(difference N) (abs(- N pi))) ;> (pi1 1000)
;3.1405926538397972
;> (pi2 1000)
;3.1406380562059932
;> (pi3 1000)
;3.141592653589793
;> (calcpi 40)
;'((<procedure:pi3> . 3.141592653589793) (<procedure:pi2> . 3.117926198299378) (<procedure:pi1> . 3.1165965567938345))







david funberstian
benny royttenberg

כתיבת תגובה

האימייל לא יוצג באתר. שדות החובה מסומנים *