Fragen zum ersten Praktikum

bagwell
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 109
Registriert: 15. Nov 2010 09:18

Re: Fragen zum ersten Praktikum

Beitrag 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.

Julian1
Neuling
Neuling
Beiträge: 5
Registriert: 20. Apr 2012 21:39

Re: Fragen zum ersten Praktikum

Beitrag 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.

KlaMü
Erstie
Erstie
Beiträge: 18
Registriert: 22. Apr 2012 01:21

Re: Fragen zum ersten Praktikum

Beitrag 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 ;)

bagwell
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 109
Registriert: 15. Nov 2010 09:18

Re: Fragen zum ersten Praktikum

Beitrag 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...

Benutzeravatar
JannikV
Nerd
Nerd
Beiträge: 609
Registriert: 24. Apr 2011 12:42

Re: Fragen zum ersten Praktikum

Beitrag von JannikV »

Ja das stimmt.

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

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Fragen zum ersten Praktikum

Beitrag 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.

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Fragen zum ersten Praktikum

Beitrag 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.

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Fragen zum ersten Praktikum

Beitrag 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.

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Fragen zum ersten Praktikum

Beitrag 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.

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Fragen zum ersten Praktikum

Beitrag 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...

fabian.wagner
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 152
Registriert: 19. Okt 2010 12:51

Re: Fragen zum ersten Praktikum

Beitrag 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.

ez22
Mausschubser
Mausschubser
Beiträge: 71
Registriert: 28. Mär 2011 14:52

Re: Fragen zum ersten Praktikum

Beitrag 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

Eric_B
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 112
Registriert: 14. Okt 2010 22:44

Re: Fragen zum ersten Praktikum

Beitrag 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

ez22
Mausschubser
Mausschubser
Beiträge: 71
Registriert: 28. Mär 2011 14:52

Re: Fragen zum ersten Praktikum

Beitrag von ez22 »

ich habe neue MathList in der MathList erstellt...
... aber stimmt hast recht :) dadran gar nciht gedacht

Eric_B
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 112
Registriert: 14. Okt 2010 22:44

Re: Fragen zum ersten Praktikum

Beitrag 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.

Antworten

Zurück zu „Archiv“