P1: erlaubte Funktionen

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

P1: erlaubte Funktionen

Beitrag von Sem »

Ich möchte fragen, ob man solche Funktionen wie "split", "replaceAll" usw verwenden darf oder wir sollen nur primitive und selbstgeschriebene Funktionen bei der Lösung des Praktikums benutzen?

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

Re: P1: erlaubte Funktionen

Beitrag von JannikV »

Du darfst benutzen was die Java API so hergibt ;)

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

Danke für die Antwort. Noch kleine Frage: warum gibt es setter für "first" und kein für "last"?

khaled
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 102
Registriert: 28. Mai 2012 01:16

Re: P1: erlaubte Funktionen

Beitrag von khaled »

last brauchst du nicht unbedingt sondern nur first, weil mit first du durch die ganze liste iterieren kannst (durch next) mehr sollte man nicht brauchen.

Khaled

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: P1: erlaubte Funktionen

Beitrag von Bug »

Es gibt Stellen, wo es sinnvoll ist, auf last zuzugreifen (in der MathList, was ja möglich ist, denn last ist protected) anstatt zunächst über die ganze Liste zu iterieren.

Es wäre aber fatal, last zu überschreiben, denn damit würde last möglicherweise nicht mehr auf das letzte Element in der Liste zeigen, dass ja auch vom vorletzen erreichbar sein muss. Also wäre ein setter überflüssig und gäbe die Möglichkeit, durch unachtsame Verwendung eine ungültige Liste herzustellen. Genau sowas soll aber durch Kapselung in der objektorientierten Programmierung vermieden werden, darum sind die Attribute nicht public und es gibt keinen entsprechenden Setter...

Auf first hingegen zeigt kein Element, es kann überschrieben werden, ohne eine ungültige Liste zu erzeugen. Dafür verliert man dadurch aber, wenn man sie nicht irgendwie anders sichert, die Referenz auf das erste Element und dadurch auf alle Inhalte der Liste. Auch der Setter von first sollte also nur mit Bedacht eingesetzt werden.
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

habe jetzt verstanden. Danke für die Erklärung :)
Habe noch Frage: erwartet man, dass nach der Ausführung einer primitiven Operation wird das Ergebnis in Klammen stehen? Also: (2+5)=7 oder (2+5)=(7) ?

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

Verstehe nicht:

Code: Alles auswählen

ml.buildList("(7+(15*3)-9)");
ml.assembleNumbers();
ml.evaluateSimpleExpression(ml.get(3));
		
assertEquals("Not fully simplified", 7, ml.size());
assertEquals("Wrong resulting list", "(|7|+|45|-|9|)", ml.toString());
Wieso wird in evaluateSimpleExpression 3 Element übergeben: (15*3)-9) und man erwartet 45 schon ohne Klammen zurück? In step 4 geht es überhaupt nicht um Löschen der Klammen. Um die zu löschen,brauche ich noch voriges Element. Um voriges Element zu bekommen, brauche ich noch eine Schleife vom Anfang. Irgendwie nicht logisch. Wurde es sich so ausgedacht?

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

Im testEvaluate() wurde es auch Methode assembleNumbers() vergessen hier:

Code: Alles auswählen

ml = new MathList(calculators[i]);
ml.buildList(testCases[i]);
ml.evaluate();
müsste nach ml.buildList(testCases); kommen.

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

Bin hier ganz allein :cry:

noch was:
d) A complete evaluation of an expression (step by step):
(0) 54 + (545 * 234 + (4545 - 54)) * 6 + 34
(1) 54 + (545 * 234 + 4491) * 6 + 34
hier finde ich folgende Loglik:
0) finde innermost subexpression
1) Ausführung der Operationen in innermost subexpression

Ok, ich habe jetzt Referenz auf diese innermost subexpression. Aber meine Methoden findMulOrDivOperation() und findAddOrSubOperation() bekommen keine Parametern und ich kann nicht sagen: "find mal alle mul oder alle div ab diese Position". Stattdessen wird es immer wieder ab Anfang gesucht. Wäre es nicht sinnvoll in diese Methoden Parametern zu übergeben?

khaled
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 102
Registriert: 28. Mai 2012 01:16

Re: P1: erlaubte Funktionen

Beitrag von khaled »

Ja deine Methoden findMulOrDivOperation() und findAddOrSubOperation() bekommen keine Parameter weil du keine Parameter brauchst, nachdem du eine dieser Methoden ausführst kriegst du eine IListElement danach "machst" du ab diese zurückgegebene Stelle deine Berechnung nachdem du deine Berechnung gemacht hast wird deine MathList anderes aussehen (nämlich ein Expression weniger).

Was hättest du die Methoden findMulOrDivOperation() und findAddOrSubOperation() sonst als Parameter gegeben?

Khaled

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: P1: erlaubte Funktionen

Beitrag von Bug »

Sem hat geschrieben:Verstehe nicht:

Code: Alles auswählen

ml.buildList("(7+(15*3)-9)");
ml.assembleNumbers();
ml.evaluateSimpleExpression(ml.get(3));
		
assertEquals("Not fully simplified", 7, ml.size());
assertEquals("Wrong resulting list", "(|7|+|45|-|9|)", ml.toString());
Wieso wird in evaluateSimpleExpression 3 Element übergeben: (15*3)-9) und man erwartet 45 schon ohne Klammen zurück? In step 4 geht es überhaupt nicht um Löschen der Klammen. Um die zu löschen,brauche ich noch voriges Element. Um voriges Element zu bekommen, brauche ich noch eine Schleife vom Anfang. Irgendwie nicht logisch. Wurde es sich so ausgedacht?
Bitte dazu den JavaDoc-Kommentar zur evaluateSimpleExpression(...) beachten - die Methode ist die einzige, die prüfen kann, ob Klammern enthalten sind oder nicht und sich daher auch darum kümmern muss, diese zu beseitigen (dazu gab es auch nochmal einen expliziten Hinweis, der aber irgendwie leider verloren gegangen ist :( ) In einer aktualisierten Aufgabenstellung ist er wieder enthalten.
After executing all operations this method has to delete the parentheses around this expression if there are any.
Es ist aber durchaus möglich (und eben ja auch gewünscht), die Klammern in dieser Methode zu löschen - dazu braucht man nicht unbedingt das Vorgängerelement.
Sem hat geschrieben:Im testEvaluate() wurde es auch Methode assembleNumbers() vergessen
müsste nach ml.buildList(testCases); kommen.


Nein, dafür ist nicht der Test zuständig...

Sem hat geschrieben:Bin hier ganz allein :cry:


Sorry, auch ein Informatikstudent ist sonntags mal nicht am Rechner... :wink:

Sem hat geschrieben:
noch was:

d) A complete evaluation of an expression (step by step):
(0) 54 + (545 * 234 + (4545 - 54)) * 6 + 34
(1) 54 + (545 * 234 + 4491) * 6 + 34

hier finde ich folgende Loglik:
0) finde innermost subexpression
1) Ausführung der Operationen in innermost subexpression

Ok, ich habe jetzt Referenz auf diese innermost subexpression. Aber meine Methoden findMulOrDivOperation() und findAddOrSubOperation() bekommen keine Parametern und ich kann nicht sagen: "find mal alle mul oder alle div ab diese Position". Stattdessen wird es immer wieder ab Anfang gesucht. Wäre es nicht sinnvoll in diese Methoden Parametern zu übergeben?


Das wäre möglich, ist aber nicht die Lösungsstrategie, die in dieser Aufgabe gesucht wird - es gibt eine andere Möglichkeit, die deutlich besser zur gewählten Datenstruktur passt. Da das eine der wesentlichen Erkentnisse dieser Aufgabenstellung ist, will ich da jetzt erstmal nicht genauer drauf eingehen...
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

Wie du hast beschrieben, wird es auch funktionieren. Und funktioniert bei mir. Aber diese Zitate trifft dann nicht zu:

Code: Alles auswählen

d) A complete evaluation of an expression (step by step):
(0) 54 + (545 * 234 + (4545 - 54)) * 6 + 34
(1) 54 + (545 * 234 + 4491) * 6 + 34
Es wird zuerst 545 * 234 berechnet und danach 4545 - 54, weil wir immer ab Anfang suchen. Wenn es möglichst wäre einen Parameter zu übergeben, würde ich direkt 4545 übergeben und dann trifft es zu. Und in diesem Fall wird das Programm in wenigen Schritten ausgeführt.

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: P1: erlaubte Funktionen

Beitrag von Bug »

Es ist wie gesagt auch ohne Parameter möglich, das im Beispiellauf beschriebene Verhalten zu erreichen - und es wird auch erwartet, dass dieses Verhalten erreicht wird. Es ist also nötig, eine andere Strategie zu finden, als nur findMulOrDivOperation() auf die ganze Liste anzuwenden.
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Sem
Erstie
Erstie
Beiträge: 21
Registriert: 20. Apr 2013 11:13

Re: P1: erlaubte Funktionen

Beitrag von Sem »

Dann noch eine, was mir aufgefallen ist. In P1 trifft bei mir alles zu außer in diesem Teil von testEvaluate():
"(33+43)*434-45/10+((10-52)*(6-100)*(0-1)+(5*(5*(5*(((5)))))))"

und zwar:
Expected :29657
Actual :29357

Es liegt hier: 45/10. Calc ist "ic", deshalb 45/10 = 4 aber Ergebnis 29657 wäre möglich nur in dem Fall, wenn wir weiter mit 4,5 berechnen würden (29656,5) und am Ende das alles runden. Was mache ich falsch?

Benutzeravatar
Bug
Endlosschleifenbastler
Endlosschleifenbastler
Beiträge: 161
Registriert: 12. Okt 2011 10:28

Re: P1: erlaubte Funktionen

Beitrag von Bug »

Bist du sicher, dass du die Reihenfolge der Operationen (Punkt- vor Strichrechnung) korrekt beachtest?

Ich komme mit dem Zwischenergebnis 45/10=4 nämlich durchaus auf die vom Test geforderte Lösung, wie man auch hier sehen kann: http://wolfr.am/14Hi33e
Ophasen-Leitung Winter 2014/15, Sommer 2015, Sommer 2016 & Winter 2016/17
TGdI Tutor WiSe 14/15, 13/14 und 12/13
GdI II Betreuung Praktika SoSe 13
CMS Tutor SoSe 13

Antworten

Zurück zu „Archiv“