1. harjoitustehtävä

Itse tehtävän toteuttaminen ei näyttänyt tuottavan ihmisille juurikaan ongelmia, mutta tehtävänannon tarkka lukeminen osoittautui haasteelliseksi: sekä kohdissa 1. että 2. esiintyi ilmaus muotoa "vähintään x ja korkeintaan y". Tämä tarkoittaa, että y kuuluu vielä joukkoon. Kovin moni oli tulkinnut, että heti kun päästään y:hyn, lopetetaan eikä enää käsitellä sitä.

Toinen erhe oli, että annetun funktion termiä β ei käytetty funktion argumentin kertoimena vaan piirrettävän pisteen x-koordinaatin kertoimena.


;; Sormiharjoitukset

;; 1.

(define (id x) x)

;; 2.

(define (median x y z)
  (if (=< x y)
      (if (=< z x)
          x
          (min y z))
      (if (=< z y)
          y
          (min x z))))

;; 3.

(define (average x y)
  (/ (+ x y) 2))

;; 4.

(define (mean u t)
  (lambda (x y)
    (u (average (t x) (t y)))))

;; 5.

(define calls 0)

(define (count)
  (set! calls (+ calls 1)))

;; 6.

(define (sum b e)
  (if (>= b e)
      0
      (+ b (sum (+ b 1) e))))

; (define (sum b e)
;   (/ (+ (* x x) x y (- (* y y))) 2))

;; 7.

(define (sum/f f b e)
  (if (>= b e)
      0
      (+ (f b) (sum/f f (+ b 1) e))))

;; 8.

(define (sum/p p b e)
  (sum/f (lambda (x) (if (p x) x 0)) b e))

;; Itse tehtävä      

(load "sxh2003.scm")

;; 1.

(define (plot f b e d)
  (if (<= b e)
      (begin
        (plot-point b (f b))
        (plot f (+ b d) e d))))

;; 2.

(define (sum term b n x)
  (if (<= b n)
      (+ (term b x) (sum term (+ b 1) n x))
      0))

;; 3.

(define pi (acos -1))

;; 4.

(define (saw-term k x) 
  (* (/ 2 (* k pi)) (sin (* 2 k pi x))))

;; 5.

(define (saw n)
  (lambda (x)
    (sum saw-term 1 n x)))

(define (plot-saw n alpha beta)
  (plot (lambda (x) (* alpha ((saw n) (* beta x)))) -15 15 0.05))

(open-graphics)
(setup)
(plot-saw 3 2.0 0.1)

Lauri Alanko