;; Die ersten drei Zeilen dieser Datei wurden von DrRacket eingefügt. Sie enthalten Metadaten ;; über die Sprachebene dieser Datei in einer Form, die DrRacket verarbeiten kann. #reader(lib "DMdA-vanilla-reader.ss" "deinprogramm")((modname interval-method) (read-case-sensitive #f) (teachpacks ()) (deinprogramm-settings #(#f write repeating-decimal #f #t none explicit #f ()))) ; Berechne Näherung für eine Nullstelle durch Intervallhalbierung (: search ((number -> number) number number -> number)) (check-within (search (lambda (x) (* x x x)) -1 1) 0 0.1) (define search (lambda (f a b) (letrec ((close-enough? (lambda (x y) (< (abs (- x y)) 0.00001))) (x (average a b))) (if (close-enough? a b) x (letrec ((fx (f x))) (cond ((positive? fx) (search f a x)) ((negative? fx) (search f x b)) (else x))))))) (define average (lambda (x y) (/ (+ x y) 2))) ; Benutzerschnittstelle: Überprüfung der Grenzen (: half-interval-method ((number -> number) number number -> number)) (check-within (half-interval-method sin 2 4) 3.14 0.1) (define half-interval-method (lambda (f a b) (letrec ((fa (f a)) (fb (f b))) (cond ((and (negative? fa) (positive? fb)) (search f a b)) ((and (positive? fa) (negative? fb)) (search f b a)) (else (violation "Werte haben gleiches Vorzeichen!"))))))