Nochmal 7.1/7.2

Disclaimer: Dieser Thread wurde aus dem alten Forum importiert. Daher werden eventuell nicht alle Formatierungen richtig angezeigt. Der ursprüngliche Thread beginnt im zweiten Post dieses Threads.

Nochmal 7.1/7.2
Meine Lösung entspricht dem Lösungsansatz von Gandalf!
Nur halt etwas anders codiert, besser oder schlechter ???
Kann ja jeder für sich entscheiden!

; Aufgabe 7.1 Schaltjahr:
;===================================

(define (schaltjahr? n)
       
   (cond  ;1.Fall
          ((and (zero? (modulo n 4)) (not (zero? (modulo n 100))))
             #t)
          ;2.Fall
          ((and (zero? (modulo n 4)) (zero? (modulo n 100)) (zero? (modulo n 400)))
             #t)
         
         ( else #f ))) 

; Aufgabe 7.2 Tagesalter
;===================================

;Prinzip: Rufe die Fkt. solange auf bis vom einen Datum zum anderen 

(define lebenstage 
   (lambda (t1 m1 j1 t2 m2 j2)
   
   ;Zwischenspeichervariablen:
   (define ltage 0)
   
   (define (datum+1 nt nm nj)
      ;Hochzählen der Lebenstage
      (set! ltage (+ ltage 1))
      
      ; Anpassen des Datums
      (cond 
              ( (or (= nm 1) (= nm 3) (= nm 5) (= nm 7) (= nm :cool: (= nm 10) (= nm 12)) 
                (if (= nt 32)
                    (begin (set! nt 1)
                           (set! nm (+ nm 1))
                           (if (= nm 13)
                               (begin (set! nm 1)
                                      (set! nj (+ nj 1)))))))
                                  
              ( (or (= nm 4) (= nm 6) (= nm 9) (= nm 11)) 
                (if (= nt 31)
                    (begin (set! nt 1)
                           (set! nm (+ nm 1))
                           (if (= nm 13)
                               (begin (set! nm 1)
                                      (set! nj (+ nj 1)))))))
                                      
              ( (= nm 2)
                (if (schaltjahr? nj)
                    ; Schaltjahr
                    (begin (if (= nt 30)
                           (begin (set! nt 1)
                           (set! nm (+ nm 1)))))
                           
                    ; Kein Schaltjahr
                    (begin (if (= nt 29)
                           (begin (set! nt 1)
                           (set! nm (+ nm 1)))))))) 
                           
      (cond   ;Abbruch falls gleiche Daten erreicht:
              ( (and (= nt t2) (= nm m2) (= nj j2))
                (display "Sie sind ") (display ltage) (display " Tage jungn"))
                
              ;Andernfalls neu Aufruf mit nt = nt + 1
              (else (datum+1 (+ nt 1) nm nj))))
              
              
   ;Funktionsaufruf
   (datum+1 t1 m1 j1)))   
              

Ich würd sagen Deine Version is übersichtlicher, und basiert mehr auf anderen Programmiersprachen, dafür is meine kürzer und baut auf dem auf, was wir in Algo bis jetzt gemacht haben :wink: