Uebungsblatt 8

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.

Uebungsblatt 8
NEXT … Übungsblatt bitte…


hä?


Vermute mal dass er es entweder bereits fertig hat oder nicht mag…:wink:


@bs88 das Zweite trifft zu ;)… ADT, ist irgendwie, ka ich mags nicht, werde damit irgendwie nicht grün :D…

ADD(Nat x Nat) → Nat, ist ja noch kein Thema nimm 2 Zahlen und addier sie

wenn ich dann aber sowas sehe:

type nat
sorts nat, bool
functions
0 → nat
succ: nat → nat
+: nat x nat → nat
<=: nat x nat → bool

axioms (beispielhaft)
xyz (xy)z = x(yz)

equations (beispielhaft ohne quatoren)
(pop(push(st,n)) = st

dann vergeht’s mir wieder, da steig ich irgendwie durch den Sinn nicht durch… =(

Habe mir nach dem Krempel auch schon nen Wolf gesucht, aber egal welche Webseite/PDF ich dazu öffne, fast überall ist das selbe pop/push haste nicht gesehen Beispiel, das ist ja noch recht simpel und auch verständlich, allerdings, wenn ich mir dann die Übungsaufgabe oder auch manche Altklausuren anschaue, werde da einfach komplexere Aufgaben gestellt, bei denen ich ewig brauche um es nachzuvollziehen, wenn überhaupt :(…

WP ist in der Regel nicht das Problem, aber bei der Aufgabe war ich noch nicht. :wink:


Lieferst du uns auch noch den passenden Font, der U+F09C (aus dem private use area) sinnvoll darstellt? Oder meintest du U+2200 ∀?

Und zum Thema: ADTs werden dir wieder begegnen, wenn du z. B. in PFP mit Haskell zu tun hast, es lohnt sich also, sie zumindest halbwegs zu verstehen.


keine Ahnung was dort in den Kästchen ist, das habe ich von einer Folie kopiert, dort waren es auch schon Kästchen. :wink:

ich habs vielleicht viertelwegs verstanden, für halbwegs reichts noch nicht. :wink:


Dann wärs eigentlich cool, wenn die entsprechende Folie hier verlinken könntest, um die Feststellung des Problems zu ermöglichen. Sollte tatsächlich die Folie fehlerhaft sein, dann schreib doch bitte eine Mail an die betreffende Person, um es nebst euch, auch den nachfolgenden Jahrgängen zu erleichtern.


bis ich jetzt den foliensatz finde, ist die woche rum, der sollte ja auch nur als Beispiel dienen. :wink:


Da ja der Weg das Ziel ist, kann wer bei der Gruppenaufgabe wpEasy verifizieren?

a) = a+2d > 1 (wäre es hier nochmal sinnvoll durch 2 zu teilen, so rein verständnishalber?)
b) = (u+1>u) ∨ (d>u) ∨ (d>d-1)

oder isses komplett falsch? ^^


Ohne Gewähr denke ich, dass die erste Aufgabe fast richtig ist. Aber teste in Java, was “a -= u + d” genau bedeutet. Die zweite Aufgabe ist imo. komplett falsch.


mal davon abgesehen, dass es wohl wirklich falsch ist, könnte man bei der b) durchaus noch weiter vereinfachen - schließlich sind die Ausdrücke (u+1>u) sowie (d>d-1) immer wahr, es bliebe also nur d>u übrig


„∨“ bedeutet „oder“. Insofern wäre die Vereinfachung sogar „wahr“.


@chayyam, ich glaube bei der ersten habe ich ein a unterschlagen a-=u-d ist ja a = a-u-d… damit wäre es dann a>3

ok und bei der 2. war ich mir auch üeberhaupt nicht sicher mit dem was da raus kam ^^ Naja schauen wir nochmal drüber wos gehakt hat.


„a -= u - d;“ ist nichts Anderes als „a -= (u - d);“ und das ist wiederum „a = a - (u - d);“ bzw. „a = a - u + d;“. Analog gilt, dass „a -= u + d;“ zu „a = a - u - d;“ äquivalent ist. Meine (inoffizielle) Lösung wäre daher a > 1.

Bei der 2 würde ich empfehlen, die Regel wp(„if(a){b;} else {c;}“, d) = a & wp(„b;“, d) | !a & wp(„c;“, d) zu beachten. Dabei steht „&“ für „und“, „|“ für „oder“ und „!“ für „nicht“.


ah ok habe meinen Fehler bei der ersten gefunden, komme jetzt auch auf a>1.

Kannst Du mal dein Eregbnis von 8.3b posten?

was &, | und ! bedeuten weis ich, bei der zweiten aktuell d<u ^^ aber ich bezeifel stark das es richtig ist.


Mein Ergebnis ist “wahr”.

Aufgabe 8.2
Wie soll man denn bei Nat den Wert speichern / verändern, wenn man nicht wie in der Vorlesung int / long oder irgendwelche anderen primitiven Datentypen benutzen darf, sondern laut Aufgabenstellung nur Attribute vom Typ Nat und eigene Konstruktoren?
Weder die Vorlesungsfolien, noch die Übungsfolien sind hier hilfreich imo., hat das schon wer gelöst und kann mich aufklären?
Ich habe mir die Testfälle angeschaut und ich verstehe auch nicht wie man in der Nat-Zahl z.B. im Fall one in one succ(zero) speichern soll, damit one.toString() zu succ(zero) wird.
Wenn succ eine Methode sein soll, wie speichert man dann eine Methode in dem Objekt sodass diese mit toString ausgegeben wird?
:scared:


Die natürlichen Zahlen sind eindeutig durch ihren Vorgänger und Nachfolger bestimmt, bzw. genügt auch eins von beiden. Einzige Ausnahme hiervon ist die Zahl 0, die keinen Vorgänger besitzt.


Danke Volschaf, das hat schon sehr geholfen :slight_smile:
Eine Frage hab ich noch, was ist dann NaN? Bzw. wie implementiere ich Nat NaN()?
(Nat zero() ist mir nun klar, denke ich)