FB18 - Das Forum für Informatik

fb18.de / Diplom Informatik / Unterbereich Grundstudium / Praktische Informatik

Wo ist der Fehler in meinem Code???

Wo ist der Fehler in meinem Code??? 2003-12-20 20:52
Anonymer User
(define (ostern j)
(let* ((m (cond((<= 1800 j 1899) 23)
((<= 1900 j 2099) 24)
((<= 2100 j 2199) 24)
(else 'falsches Jahr)))
(n (cond((<= 1800 j 1899) 4)
((<= 1900 j 2099) 5)
((<= 2100 j 2199) 6)
(else 'falsches Jahr)))
(a (remainder j 19))
(b (remainder j 4))
(c (remainder j 7))
(d (remainder (+ (* 19 a) m) 30))
(e (remainder (+ (* 2 b) (* 4 c) (* 6 d) n) 7))
(tag (if (> (+ 22 d e) 31)
(+ d e -9)
(+ 22 d e)))
(monat (if (> (+ 22 d e) 31)
'april
'märz)))
(if (= monat 'april)
(cond((= tag 26) (list 19 monat j))
((and (= tag 25)(= d 28)(= e 6)(>= a 10))(list 18 monat j))))
))

Weiss nicht was Scheme hat, klingt doch alles logisch, oder etwa nicht???

Re: Wo ist der Fehler in meinem Code??? 2003-12-20 21:35
Zaphod
Nur um es mal lesbar zu machen, solltest du das CODE-Tag verwenden. [img]http://www.fb18.de/gfx/25.gif[/img]


(define (ostern j) (let* ((m (cond((<= 1800 j 1899) 23) ((<= 1900 j 2099) 24) ((<= 2100 j 2199) 24) (else 'falsches Jahr))) (n (cond((<= 1800 j 1899) 4) ((<= 1900 j 2099) 5) ((<= 2100 j 2199) 6) (else 'falsches Jahr))) (a (remainder j 19)) (b (remainder j 4)) (c (remainder j 7)) (d (remainder (+ (* 19 a) m) 30)) (e (remainder (+ (* 2 b) (* 4 c) (* 6 d) n) 7)) (tag (if (> (+ 22 d e) 31) (+ d e -9) (+ 22 d e))) (monat (if (> (+ 22 d e) 31) 'april 'märz))) (if (= monat 'april) (cond((= tag 26) (list 19 monat j)) ((and (= tag 25)(= d 28)(= e 6)(>= a 10))(list 18 monat j)))) )) Weiss nicht was Scheme hat, klingt doch alles logisch, oder etwa nicht???


Re: Wo ist der Fehler in meinem Code??? 2003-12-20 21:54
sChQrf
meckert's denn über syntaxfehler oder liefert einfach keine ergebnisse`?



hmmm hab mich doch bequemt es in scheme auszuführen… bin in der aufgabe bisher nicht so weit gekommen, weil ich im script noch nicht sonderlich weit war ;)



erstmal musst du bei den echos per ' underscores einfügen, also (else 'falsches_Jahr)))) statt (else 'falsches Jahr))))




das is unsinn gloob isch: (= monat 'april) (ich versteh aber die fehlermeldung von scheme nicht:
if: expected one question expression and two answer expressions, but found 2 expressions in: (if (= monat (quote april)) (cond ((= tag 26) (list 19 monat j)) ((and (= tag 25) (= d 28) (= e 6) (>= a 10)) (list 18 monat j))))
)


[edit] irgendwie zerhauts mir immer die zeilenümbrüche (kann net vernünftige absätze machen), sry

Re: Wo ist der Fehler in meinem Code??? 2003-12-20 22:00
Zaphod
(= monat 'april)
Jupp, das geht nicht. Ich hab gerade kein Scheme installiert, aber Strings solltest du nicht mit = sondern mit (equals? s1 s2) oder (equal? s1 s2) oder so vergleichen. Probier das mal aus. Außeredem werden Strings doch nicht mit 'Hochkomma, sondern mit "Anführungszeichen" geschrieben, oder?

Re: Wo ist der Fehler in meinem Code??? 2003-12-20 22:01
sChQrf
nein das is an sich ein Kommentar oder so… ob man den an sich vergleichen kann - keine Ahnung [img]http://www.fb18.de/gfx/3.gif[/img]

Re: Wo ist der Fehler in meinem Code??? 2003-12-20 22:09
Zaphod
Kommentare werden mit ; Semikoloon gemacht..

Re: Wo ist der Fehler in meinem Code??? 2003-12-20 23:04
sChQrf
Oops… ich meinte ein "echo" oder wie immer man das in der Fachidioten-Sprache nennt [img]http://www.fb18.de/gfx/15.gif[/img]

Re: Wo ist der Fehler in meinem Code??? 2003-12-20 23:27
tekai
echo passt dann aber immernoch nicht, denn bei einem ungünstig gewählten jahr bricht das programm ab wenn es mit m oder n rechnen soll.

Wie wärs wenn du bei dem cond und dem else einfach mal bei den beiden "else" fällen auch etwas ausgibst und dir das anschaust?

Re: Wo ist der Fehler in meinem Code??? 2003-12-21 00:44
Dennis-
1) (equal? monat 'april) statt (= monat 'april), weil '=' nur auf zahlen anwendbar ist (Script 2b, Seite 84). Das hatten wir zwar noch nicht, aber man kann es umgehen, indem man einfach 3 für März bzw 4 für April verwendet.

2) dein (list ()) wird nur ausgeführt, wenn genau der sonderfall (26. April) eintrifft - sonst nie. darum hattest du sicher keine ausgabe. (Der Sonderfall muss im Jahre 1954 berücksichtigt werden. Siehe Aufgabenzettel. Dann kommts auch zu ner Ausgabe, wenn du das = ersetzt hast.)

Hilfreich wäre es außerdem einen Kommentar an die Stelle zu schreiben, wo der Körper beginnt:
'märz)))

ab hier kann man gut mit cond zu arbeiten
(and (equal? Monat 'April) (= Tag 26)) (list …) ;Sonderfall_1
(and (equal? Monat 'April) (= Tag 25) (= d 28) …usw… (list …) ;Sonderfall_2
(else list …….)

ps admins: Falls es zuviel code-hilfe war, sollte das keine Rolle spielen, weil der Abgabetermin schon war. oder?

Re: Wo ist der Fehler in meinem Code??? 2003-12-21 11:07
sChQrf
hängt von den gruppen ab… ich kann heute noch abgegeben aber sonderlich schwer fand ich den zettel nicht (; und mein code sieht auch etwas anders aus… von daher kann ich net abschreiben (;

Re: Wo ist der Fehler in meinem Code??? 2003-12-21 13:20
TriPhoenix
ps admins: Falls es zuviel code-hilfe war, sollte das keine Rolle spielen, weil der Abgabetermin schon war. oder?

Da bisher keiner außer mir ein Problem damit gesehen hat, lasse ichs mal stehen [img]http://www.fb18.de/gfx/22.gif[/img]