All pastes #1765347 Raw Edit

Inf III 12.1.a Rev 1

public text v1 · immutable
#1765347 ·published 2010-01-25 17:12 UTC
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)