rendered paste body(define (displaynl x) (display x)(newline))
(define (zahl->wochentag zahl)
(cond
((= zahl 0) "Sonntag")
((= zahl 1) "Montag")
((= zahl 2) "Dienstag")
((= zahl 3) "Mittwoch")
((= zahl 4) "Donnerstag")
((= zahl 5) "Freitag")
((= zahl 6) "Samstag")
)
)
(define (schaltjahr? jahr) (if (or (and (= (modulo jahr 4) 0) (not (=(modulo jahr 100) 0))) (= (modulo jahr 400) 0)) #t #f))
(define (tagesziffer tag) (modulo tag 7))
(define (monatsziffer monat)
(cond ((or (= monat 1) (= monat 10)) 0)
((= monat 5) 1)
((= monat 8) 2)
((or (= monat 2) (= monat 3) (= monat 11)) 3)
((= monat 6) 4)
((or (= monat 9) (= monat 12)) 5)
((or (= monat 4) (= monat 7)) 6)
)
)
(define (jahreszahl jahr)
(cond
((> jahr 99)
(string->number (substring (number->string jahr) (- (string-length (number->string jahr)) 2) (- (string-length (number->string jahr)) 0))))
((< jahr 100)
jahr
)
)
)
(define (jahrhundert jahr) (/ (- jahr (jahreszahl jahr)) 100))
(define (jahresziffer jahr) (modulo (+ (jahreszahl jahr) (floor (/ (jahreszahl jahr) 4))) 7))
(define (jahrhundertziffer jahr) (* (- 3 (modulo (jahrhundert jahr) 4)) 2))
(define (schaltjahreskorrektur jahr) (if (schaltjahr? jahr) 6 0))
(define (wochentag tag monat jahr)
(modulo (+ (tagesziffer tag) (monatsziffer monat) (jahresziffer jahr) (jahrhundertziffer jahr) (schaltjahreskorrektur jahr)) 7)
)
(define (am-gleichen-tag tag monat jahr)
(begin
(define tach (wochentag tag monat jahr))
(display "In den folgenden Jahren faelt das Datum ")
(display tag)
(display ".")
(display monat)
(display " auf den gleichen Wochtag (auf den ")
(display (zahl->wochentag (wochentag tag monat jahr)))
(display ") wie im Jahr ")
(display jahr)
(display ".")
(newline)
(do ((x 1 (+ x 1))) ((> x 2099))
(if (= (wochentag tag monat x) tach)
(displaynl x)
)
)
)
)
(am-gleichen-tag 21 1 1987)