Seite 4 von 4

Re: Fragen zum ersten Praktikum

Verfasst: 21. Apr 2012 18:51
von bagwell
hstr hat geschrieben:@bagwell
Ich vermute mal du hast eine Methode isDigit(), diese Methode sollte aber eine isNumber() sein, da in den Tests z.B. folgendes gemacht wird: list.addElement(new MathElement("42.0"));

VG
Deine Vermutung ist richtig, ich habe wirklich eine Methode "isDigit()", warum muss das aber jetzt isNumber() sein? Ich versteh den Hinweis nicht so ganz.
Bei assembleNumbers() funktionieren die Tests ja auch.

EDIT: hat sich erledigt, Tests laufen jetzt durch.

Re: Fragen zum ersten Praktikum

Verfasst: 21. Apr 2012 21:30
von Julian1
Mal eine organisatorische Frage, besteht das 1. Praktikum jetzt aus den Aufgaben 1 und 2, oder aus den Aufgaben 1-3?
Im Moodle steht bei der Abgabe, dass "Praktische Uebung 01 = Tasks 01 + 02", allerdings ist auf dem Blatt ja noch eine dritte Aufgabe dabei.

Re: Fragen zum ersten Praktikum

Verfasst: 22. Apr 2012 01:42
von KlaMü
fabian.wagner hat geschrieben:Die Methode bekommt ein MathElement übergeben, was den Beginn einer SimpleExpression repräsentiert. Dies ist entweder eine Klammer oder der erste Operand, der Simple Expression. Danach wertet die Funktion beginnend mit diesem MathElement nach und nach erst die Punktrechnungen und dann die Strichrechnungen aus. Später kommt dann noch eine Swap-Operation dazu, die höhere Priorität als Punktrechnungen hat. Natürlich darf die Funktion dann nur soweit auswerten bis eine schließende Klammer kommt oder bis der Ausdruck nur noch ein Atom ist.
Wie man dies begrenzt sollte man sich vorher überlegen. Es ist sinnvoll mit einer weiteren MathList zu arbeiten. Dann fallen auch weitere Probleme weg. KISS! (Keep it stupid simple! 8) )
Danach werden entsprechende Pointerersetzungen durchgeführt. Das heißt, falls die Simple Expression mit einer Klammer begonnen hat, fällt diese und ihr Gegenpart natürlich in der gesamt Expression weg!
Das wars!
Ich habe noch eine Verständnisfrage hierzu, da ich jetzt langsam verwirrt bin:

Ich habe, so wie du beschrieben hast, evaluateSimpleExpression selbst die Klammern entfernen lassen: Wenn das übergebene IListItem auf eine Klammer zeigt, dann wird der Inhalt dieses IListItem durch den evaluierten Ausdruck (der über eine neue Liste berechnet wird, welche dann immer "atom" ist) ersetzt und der Pointer für next auf das Element, das hinter der schließenden Klammer liegt, gesetzt. So kann die Funktion sich selbst der Klammern entledigen.

Jetzt stoße ich aber beim weiteren Lesen auf eine Unklarheit, die ich gerne geklärt hätte:
Step 5: findAnInnermostExpression() ! searches for an innermost expression of the entire expression and returns
a pointer (MathElement) to the element before the first element of this innermost expression. Otherwise you can
not replace the innermost expression with an atom!

Hint: An innermost expression is a simple expression!
...und weiter unten bei den Hints...
If a closing parenthesis is found you know a begin of the
innermost expression (the element after the last opening parenthesis) and an end of an innermost expression
(the element before the closing parentheses). Trivial case is an expression without any parentheses!
Damit habe ich schon 3 Aussagen, die sich widersprechen, oder? Wieso soll ich laut erstem Quote ein Element zuvor anhalten, wenn ich der Funktion evaluateSimpleExpression eh die Klammer übergebe? Und laut zweitem Quote soll ich nicht die Klammer übergeben, sondern das Element danach? Wozu soll dann evaluateSimpleExpression auch eventuell ein auf eine öffnende Klammer zeigendes Element bekommen können?
Irgendwie widersprechen sich diese 2 Aussagen selbst und mit der von dir weiter oben.

Bitte um Klärung ;)

Re: Fragen zum ersten Praktikum

Verfasst: 22. Apr 2012 11:43
von bagwell
Man sollte vlt in der Aufgabenstellung dazu schreiben, dass bei evaluate() die Liste zuerst assembliert werden muss, da ansonsten die Tests nicht durchlaufen.
Oder die Tests entsprechend ändern...

Re: Fragen zum ersten Praktikum

Verfasst: 22. Apr 2012 12:11
von JannikV
Ja das stimmt.

Genauso wie man nicht voraussetzen kann, dass in den Tests assembleNumbers aufgerufen wurde bevor assemblePointNumbers getestet wird.

Re: Fragen zum ersten Praktikum

Verfasst: 23. Apr 2012 07:37
von fabian.wagner
JannikV hat geschrieben:Hallo,

ich hätte gern einmal wieder eine Unklarheit beseitigt.

In den Tests zu Task 3 wird der interpretFunctionDefinitions eine MathList übergeben die so aussieht:
square|x|:|x#*x|doubledif|@parameter1@|@parameter2@|:|@parameter1@*2-2*@parameter2@

Da kollabiert meine Methode ziemlich schnell, denn sowas hat sie nicht erwartet.

Im Beispiel auf dem Blatt ist das Format in etwa so rauslesbar:
funktionsname ( param1 , ... , paramN ) : funktionsbody
Doch der Test kommt mir jetzt mit
funktionsname param1 ... paramN : funktionsbody

Wo sind die Klammern und Kommas hin? Ich nehme an wir sollen uns jetzt nach dem richten was die Tests vorgeben?!

VG
In diesem Fall bitte an die Tests halten. Das Bild in der Aufgabenstellung ist fehlerhaft... Ursprünglich war das mal mit Klammern und Kommas gedacht, die sind dann aber eigentlich rausgeflogen. Da hab ich dann wohl die falschen Bilder eingebunden. :roll: Entschuldigung.

Re: Fragen zum ersten Praktikum

Verfasst: 23. Apr 2012 07:38
von fabian.wagner
Julian1 hat geschrieben:Mal eine organisatorische Frage, besteht das 1. Praktikum jetzt aus den Aufgaben 1 und 2, oder aus den Aufgaben 1-3?
Im Moodle steht bei der Abgabe, dass "Praktische Uebung 01 = Tasks 01 + 02", allerdings ist auf dem Blatt ja noch eine dritte Aufgabe dabei.
Das erste Praktikum besteht aus allen Aufgaben. Es werden allerdings Aufgaben 1+2 und 3 getrennt testiert. Es wird dann noch einmal eine Abgabe geben.

Re: Fragen zum ersten Praktikum

Verfasst: 23. Apr 2012 07:51
von fabian.wagner
KlaMü hat geschrieben:
fabian.wagner hat geschrieben:Die Methode bekommt ein MathElement übergeben, was den Beginn einer SimpleExpression repräsentiert. Dies ist entweder eine Klammer oder der erste Operand, der Simple Expression. Danach wertet die Funktion beginnend mit diesem MathElement nach und nach erst die Punktrechnungen und dann die Strichrechnungen aus. Später kommt dann noch eine Swap-Operation dazu, die höhere Priorität als Punktrechnungen hat. Natürlich darf die Funktion dann nur soweit auswerten bis eine schließende Klammer kommt oder bis der Ausdruck nur noch ein Atom ist.
Wie man dies begrenzt sollte man sich vorher überlegen. Es ist sinnvoll mit einer weiteren MathList zu arbeiten. Dann fallen auch weitere Probleme weg. KISS! (Keep it stupid simple! 8) )
Danach werden entsprechende Pointerersetzungen durchgeführt. Das heißt, falls die Simple Expression mit einer Klammer begonnen hat, fällt diese und ihr Gegenpart natürlich in der gesamt Expression weg!
Das wars!
Ich habe noch eine Verständnisfrage hierzu, da ich jetzt langsam verwirrt bin:

Ich habe, so wie du beschrieben hast, evaluateSimpleExpression selbst die Klammern entfernen lassen: Wenn das übergebene IListItem auf eine Klammer zeigt, dann wird der Inhalt dieses IListItem durch den evaluierten Ausdruck (der über eine neue Liste berechnet wird, welche dann immer "atom" ist) ersetzt und der Pointer für next auf das Element, das hinter der schließenden Klammer liegt, gesetzt. So kann die Funktion sich selbst der Klammern entledigen.

Jetzt stoße ich aber beim weiteren Lesen auf eine Unklarheit, die ich gerne geklärt hätte:
Step 5: findAnInnermostExpression() ! searches for an innermost expression of the entire expression and returns
a pointer (MathElement) to the element before the first element of this innermost expression. Otherwise you can
not replace the innermost expression with an atom!

Hint: An innermost expression is a simple expression!
...und weiter unten bei den Hints...
If a closing parenthesis is found you know a begin of the
innermost expression (the element after the last opening parenthesis) and an end of an innermost expression
(the element before the closing parentheses). Trivial case is an expression without any parentheses!
Damit habe ich schon 3 Aussagen, die sich widersprechen, oder? Wieso soll ich laut erstem Quote ein Element zuvor anhalten, wenn ich der Funktion evaluateSimpleExpression eh die Klammer übergebe? Und laut zweitem Quote soll ich nicht die Klammer übergeben, sondern das Element danach? Wozu soll dann evaluateSimpleExpression auch eventuell ein auf eine öffnende Klammer zeigendes Element bekommen können?
Irgendwie widersprechen sich diese 2 Aussagen selbst und mit der von dir weiter oben.

Bitte um Klärung ;)
Ich habe, so wie du beschrieben hast, evaluateSimpleExpression selbst die Klammern entfernen lassen: Wenn das übergebene IListItem auf eine Klammer zeigt, dann wird der Inhalt dieses IListItem durch den evaluierten Ausdruck (der über eine neue Liste berechnet wird, welche dann immer "atom" ist) ersetzt und der Pointer für next auf das Element, das hinter der schließenden Klammer liegt, gesetzt. So kann die Funktion sich selbst der Klammern entledigen.
Genau so meine ich das!

Ich sehe da momentan nur einen Widerspruch, nicht drei! Also hier die Klärung...
Eine innermost Expression fängt nach der Klammer an! Wenn es keine Klammer in dem gesamten Ausdruck gibt, dann fällt das unter den Fall trivial case und die einzige innermost Expression fängt mit dem ersten Operanden an.
Aber du hast das ja schon korrekt gelöst, also musst du dir keine Gedanken machen.

Re: Fragen zum ersten Praktikum

Verfasst: 23. Apr 2012 07:53
von fabian.wagner
bagwell hat geschrieben:Man sollte vlt in der Aufgabenstellung dazu schreiben, dass bei evaluate() die Liste zuerst assembliert werden muss, da ansonsten die Tests nicht durchlaufen.
Oder die Tests entsprechend ändern...
Finde ich eigentlich logisch, dass das gemacht werden muss... Anders ist es wohl kaum machbar :) Werde das aber noch dazu schreiben, wenn es gewünscht ist.

Re: Fragen zum ersten Praktikum

Verfasst: 23. Apr 2012 07:59
von fabian.wagner
JannikV hat geschrieben:Ja das stimmt.

Genauso wie man nicht voraussetzen kann, dass in den Tests assembleNumbers aufgerufen wurde bevor assemblePointNumbers getestet wird.
Ok, schreibe ich auch noch dazu...

Re: Fragen zum ersten Praktikum

Verfasst: 23. Apr 2012 08:24
von fabian.wagner
Fehler von mir, sorry:
siehe http://www.d120.de/forum/viewtopic.php? ... 5&start=45

Die Klammern und die Kommas sind da Quatsch.

Re: Fragen zum ersten Praktikum

Verfasst: 25. Apr 2012 14:22
von ez22
bei der Erstellung der neuen Listen (bei den evaluate methoden) kann ich auf den Calculator der Liste nicht zugreifen, weil keinen getter für ihn gibt... Erstellt ihr einfach neuen? oder darf man getter für den calc in der Klasse hinzufügen?

Vielen Dank

Re: Fragen zum ersten Praktikum

Verfasst: 25. Apr 2012 14:36
von Eric_B
ez22 hat geschrieben:bei der Erstellung der neuen Listen (bei den evaluate methoden) kann ich auf den Calculator der Liste nicht zugreifen, weil keinen getter für ihn gibt... Erstellt ihr einfach neuen? oder darf man getter für den calc in der Klasse hinzufügen?

Vielen Dank

du kannst doch einfach mit this.calc darauf zugreifen.

Eric

Re: Fragen zum ersten Praktikum

Verfasst: 25. Apr 2012 14:44
von ez22
ich habe neue MathList in der MathList erstellt...
... aber stimmt hast recht :) dadran gar nciht gedacht

Re: Fragen zum ersten Praktikum

Verfasst: 25. Apr 2012 16:46
von Eric_B
fabian.wagner hat geschrieben: Die Methode bekommt ein MathElement übergeben, was den Beginn einer SimpleExpression repräsentiert. Dies ist entweder eine Klammer oder der erste Operand, der Simple Expression.!
Demnach gibt findInnerMost dann das Element vor der Klammer zurück?
Auszug aus beschreibung zu findInnermostExpression
returns a pointer (MathElement) to the element before the first element of this innermost expression.