FB18 - Das Forum für Informatik

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

P1 Aufblatt 13 Aufgabe 4

P1 Aufblatt 13 Aufgabe 4 2004-02-12 17:47
Spaceman
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!

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-12 18:19
TriPhoenix
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.

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-12 18:31
Spaceman
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!?

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-12 18:37
UncleOwen
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"

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-12 19:39
Spaceman
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!?

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-12 19:41
TriPhoenix
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]

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 14:02
Anonymer User
Da die Summe der Stabzahlen 6 ist…

Warum ist denn die Summe der Stabzahlen 6!?

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 14:12
TriPhoenix
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]

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 14:32
Spaceman
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))

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 14:42
TriPhoenix
> (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

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 15:11
Joker
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.



Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 15:24
TriPhoenix
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.

Re: P1 Aufblatt 13 Aufgabe 4 2004-02-13 22:57
korelstar
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.