HAb mir mal die Musterlösung dazu angeschaut. Verstehe allerdings nicht so richtig was da abgeht. Warum definiert man z.b. andere als (modulo (- 6 von nach) 3)
Wie kommt darauf was macht das für einen Sinn.
Ansonsten wären vielleicht noch ein paar erklärende Worte zur Lösung dieser Aufgabe ganz hilfreich! DankE!
Du hast die Stabnummer des von-Stabes und des Nach-Stabes. Nun gilt es die Nummer der übrigen Stabes zu bestimmen. Da die Summe der Stabzahlen 6 ist, ist (6 - von - nach) der verbleibende Stab. Was das Modulo da soll weiß ich nicht. Wenn die Stabzahlen ovn 0 bis 2 gehen, machts sinn, ist aber überflüssig, (- 3 von nach) reicht dann. Wenn die Stabzahlen 1 bis 3 sind, ists schlichtweg falsch.
Ehrlich gesagt verstehe ich garnicht was das mit der Stabnummer überhaupt soll. Es gibt doch genau drei Stäbe. Ein Anfangsstabt einen "Hilfsstab" und einen "Endstab". Wie ich die nun benenne bzw. nummeriere ist doch eigentlich ganz egal oder!?
Wie ich die nun benenne bzw. nummeriere ist doch eigentlich ganz egal oder!?
Eigentlich schon. Aber wenn Du Deine Staebe Anton Berta und Claus nennst kannst Du nicht mehr so einfach eine Funktion schreiben fuer "Der Stab der nicht Berta und nicht Claus ist"
Eigentlich schon. Aber wenn Du Deine Staebe Anton Berta und Claus nennst kannst Du nicht mehr so einfach eine Funktion schreiben fuer "Der Stab der nicht Berta und nicht Claus ist"
Ok aber worin besteht jetzt der Vorteil die Nummierung so wie in Musterlösung mit
(modulo (- 6 von nach) 3)
zu berechnen!?
Eigentlich schon. Aber wenn Du Deine Staebe Anton Berta und Claus nennst kannst Du nicht mehr so einfach eine Funktion schreiben fuer "Der Stab der nicht Berta und nicht Claus ist"
Ok aber worin besteht jetzt der Vorteil die Nummierung so wie in Musterlösung mit
(modulo (- 6 von nach) 3)
zu berechnen!?
Wie egsagt, das Modulo ist quark. Aber belieben wir bei (- 6 von nach). Nenne eine kürzere Methode, bei zwei gegebenen Zahlen in den Variablen "von" und "nach" die dritte Fehlende zu berchnen. Es ist einfach effizient [img]
http://www.fb18.de/gfx/28.gif[/img]
Da die Summe der Stabzahlen 6 ist…
Warum ist denn die Summe der Stabzahlen 6!?
Da die Summe der Stabzahlen 6 ist…
Warum ist denn die Summe der Stabzahlen 6!?
Stabzahlen 1, 2, 3. 1 + 2 + 3 = 6 [img]
http://www.fb18.de/gfx/6.gif[/img]
Wie egsagt, das Modulo ist quark.
Mir scheint das Modulo hat doch seinen Sinn. Muss zwar gestehen, dass ich die Aufgabe noch immer nicht so ganz gecheckt habe, aber wenn ich das Modulo rausnehmne und beim
(- 6 von nach) dann stimmt folgender Testaufruf nicht:
(scheiben1 1 3 3)
((scheibe 1 von 1 nach 3)
(scheibe 2 von 1 nach 3)
(scheibe 1 von 3 nach 3)
(scheibe 3 von 1 nach 3)
(scheibe 1 von 3 nach 3)
(scheibe 2 von 3 nach 3)
(scheibe 1 von 3 nach 3))
> (scheiben 1 3 3)
((scheibe 1 von 1 nach 0)
(scheibe 2 von 1 nach 2)
(scheibe 1 von 0 nach 2)
(scheibe 3 von 1 nach 3)
(scheibe 1 von 2 nach 1)
(scheibe 2 von 2 nach 3)
(scheibe 1 von 1 nach 3))
Also mit Modulo machts auch nicht so richtig viel Sinn, wenn man Stabzahlen von 1-3 annimmt [img]
http://www.fb18.de/gfx/28.gif[/img] (was ist Turm 0?)
Und die modifizierte Variante (Sprich das modulo killen):
> (scheiben 1 3 3)
((scheibe 1 von 1 nach 3)
(scheibe 2 von 1 nach 2)
(scheibe 1 von 3 nach 2)
(scheibe 3 von 1 nach 3)
(scheibe 1 von 2 nach 1)
(scheibe 2 von 2 nach 3)
(scheibe 1 von 1 nach 3))
Finde ich macht ausgezeichnet sinn
Wieso macht das modulo keinen Sinn? Man definiert halt Stab 0 = neutraler (Hilfsstab), die anderen haben halt dann die Nummer 1 und 2. Deswegen ist es doch noch lange nicht falsch.
Wieso macht das modulo keinen Sinn? Man definiert halt Stab 0 = neutraler (Hilfsstab), die anderen haben halt dann die Nummer 1 und 2. Deswegen ist es doch noch lange nicht falsch.
Wenn die Stabnummern von 1 bis 3 gehen, ist das Falsch, bei Hanoi hat man doch nu drei Stäbe und wenn mans mit Modulo macht wie gezeigt, kommen 4 Stäbe vor. Wenn man 0 bis 2 als Stabnummern nimmt, gehts, dann aber ist das Modulo wie bereits gesagt ebenso überflüssig und (- 3 von nach) reicht aus.
Bekomme ich einen Award für das komplizierteste und ineffizienteste Lösen der Aufgabe? [img]
http://www.fb18.de/gfx/22.gif[/img]
Hätte man mir doch gleich sagen können, dass es viel praktischer ist, die Türme zu nummerieren. [img]
http://www.fb18.de/gfx/3.gif[/img] Diesen Thread habe ich extra nicht gelesen, weil ich die Aufgabe erstmal selber lösen wollte. Naja, und sowas kommt dann dabei heraus (ich mache mir ernsthaft sorgen um mich - hoffentlich wird das in der Klausur anders):
(define (zahlen n)
(if (= n 0) '()
(cons n (zahlen (- n 1)))))
(define (türme-von-hanoi n) (hanoi n 'C 'A 'B (türme '() '() (reverse (zahlen n)))))
(define (hanoi n von nach hilfe status)
(if (= n 0) status
(hanoi (- n 1) hilfe nach von
(bewege von nach
(hanoi (- n 1) von hilfe nach status)))))
(define (push turm x) (cons x turm))
(define (pop turm) (cdr turm))
(define (top turm) (car turm))
(define (turm wo status)
(case wo
((A) (car status))
((B) (cadr status))
((C) (caddr status))))
(define (editturm f wo status)
(case wo
((A) (türme (f (turm 'A status)) (turm 'B status) (turm 'C status)))
((B) (türme (turm 'A status) (f (turm 'B status)) (turm 'C status)))
((C) (türme (turm 'A status) (turm 'B status) (f (turm 'C status))))))
(define (türme A B C) (list A B C))
(define (bewege von nach status)
(let ((x (top (turm von status))))
(display "verschiebe die ") (display x) (display " von Stapel ") (display von) (display " nach Stapel ") (display nach) (newline)
(if (and (> (length (turm nach status)) 0)
(> x (top (turm nach status))))
(error "Verschieben nicht möglich")
(editturm pop von (editturm (rcurry push x) nach status)))))
P.S.: Das mit dem modulo in der Musterlösung hätte man sich ja wirklich sparen können.