Fragen zum ersten Praktikum

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

Re: Fragen zum ersten Praktikum

Beitrag von JannikV »

fabian.wagner hat geschrieben:Ich habe dazu ein RegEx-String in Calculator verwendet um zu überprüfen ob das einzige Element eine Zahl ist.
Dieser ist im Quellcode aber nicht auffindbar wenn ich nicht blind bin. ^^ Aber egal unter http://docs.oracle.com/javase/7/docs/ap ... ttern.html (das ist die aktuelle Version zu Java 7) kann sich ja jeder ansehen wie das funktioniert. Die entsprechende Methode um das auf einen String anzuwenden ist dann stringname.matches("regexpression")... Was auch beantwortet ob ich 26 mal auf korrekten Buchstaben überprüft habe.. nein ;)

fabian.wagner hat geschrieben:Ja, der Funktionsname, die Parameter und die eigentliche Formel sind am Stück. Das erleichtert vieles! (in iii))
Parameter werden später erstmal nur einzelne Buchstaben sein. Es wird aber auch einen Test geben der längere Funktionsparamter vorsieht.
Moment, moment, also die einzelnen Parameter wie x und y sind schon noch in getrennten MathElements, oder? Aber wenn es jetzt längere Funktionsparameter gäbe wären auch z.B. "x1" und "x2" jeweils am Stück bei iii ?
Wenn ich das so richtig verstanden habe macht das die Sache tatsächlich leichter.


Ansonsten, vielen Dank für die Antwort. ^^

VG

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:
fabian.wagner hat geschrieben:Ich habe dazu ein RegEx-String in Calculator verwendet um zu überprüfen ob das einzige Element eine Zahl ist.
Dieser ist im Quellcode aber nicht auffindbar wenn ich nicht blind bin. ^^ Aber egal unter http://docs.oracle.com/javase/7/docs/ap ... ttern.html (das ist die aktuelle Version zu Java 7) kann sich ja jeder ansehen wie das funktioniert. Die entsprechende Methode um das auf einen String anzuwenden ist dann stringname.matches("regexpression")... Was auch beantwortet ob ich 26 mal auf korrekten Buchstaben überprüft habe.. nein ;)

fabian.wagner hat geschrieben:Ja, der Funktionsname, die Parameter und die eigentliche Formel sind am Stück. Das erleichtert vieles! (in iii))
Parameter werden später erstmal nur einzelne Buchstaben sein. Es wird aber auch einen Test geben der längere Funktionsparamter vorsieht.
Moment, moment, also die einzelnen Parameter wie x und y sind schon noch in getrennten MathElements, oder? Aber wenn es jetzt längere Funktionsparameter gäbe wären auch z.B. "x1" und "x2" jeweils am Stück bei iii ?
Wenn ich das so richtig verstanden habe macht das die Sache tatsächlich leichter.


Ansonsten, vielen Dank für die Antwort. ^^

VG
Dieser ist im Quellcode aber nicht auffindbar wenn ich nicht blind bin. ^^
Ja, natürlich nicht! Ganz so einfach wollen wir es ja nicht machen. Nenne es einen eleganten Hinweis, wie man es sehr einfach lösen kann 8)
Moment, moment, also die einzelnen Parameter wie x und y sind schon noch in getrennten MathElements, oder? Aber wenn es jetzt längere Funktionsparameter gäbe wären auch z.B. "x1" und "x2" jeweils am Stück bei iii ?
Wenn ich das so richtig verstanden habe macht das die Sache tatsächlich leichter.
Ja die einzelnen Parameternamen sind schon eigene Elemente in der Liste und "x1" wäre in diesem Fall ein Element in der Liste. Sollte auch alles klar werden, sobald du die Tests für Task 3 siehst.

bafnai
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 126
Registriert: 13. Apr 2011 06:36

Re: Fragen zum ersten Praktikum

Beitrag von bafnai »

Ja, natürlich nicht! Ganz so einfach wollen wir es ja nicht machen. Nenne es einen eleganten Hinweis, wie man es sehr einfach lösen kann 8)
Aber man darf isAtom() auch lang und hässlich schreiben, oder?

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

Re: Fragen zum ersten Praktikum

Beitrag von JannikV »

Wahrscheinlich "darf" man das schon. Aber wozu sollte man das tun wenn es elegant in einer Zeile geht.
Wenn du FGdI gehört hast oder generell weißt was ein regulärer Ausdruck ist kann ich nur empfehlen mal einen Blick auf diese Methode der Klasse String zu werfen: http://docs.oracle.com/javase/7/docs/ap ... .String%29

VG

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

Re: Fragen zum ersten Praktikum

Beitrag von fabian.wagner »

bafnai hat geschrieben:
Ja, natürlich nicht! Ganz so einfach wollen wir es ja nicht machen. Nenne es einen eleganten Hinweis, wie man es sehr einfach lösen kann 8)
Aber man darf isAtom() auch lang und hässlich schreiben, oder?
Natürlich darfst du das, solange es nicht die Komplexität ins Unendliche steigert :!:
Ich empfehle dir trotzdem dich mit RegEx auseinander zu setzen....

-py-
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 18. Mär 2011 00:27

Re: Fragen zum ersten Praktikum

Beitrag von -py- »

Ich verstehe immer noch nicht so ganz, wie bzw. wonach findMulOrDivOperation() und findAddOrSubOperation() suchen sollen.
Angenommen meine MathList repräsentiert den Ausdruck (2+3)*(4*5+6). Liefert mir findMulOrDivOperation() den Pointer zu "(2+3)*(4*5+6)" (weil der ganze Ausdruck eine Multiplikation ist) oder den Pointer zu "4*5" (weil das die erste simple Multiplikation ist)?
Den Sinn der Methoden verstehe ich auch nicht so ganz. Was genau bringen mir die Methoden, wenn ich sie nur auf den ganzen Ausdruck anwenden kann und nicht auf einen bestimmten Teil, um beispielsweise eine gefundene innermost-Expression nach einer Multiplikation zu durchsuchen?
Zuletzt geändert von -py- am 19. Apr 2012 20:37, insgesamt 2-mal geändert.

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

Re: Fragen zum ersten Praktikum

Beitrag von fabian.wagner »

-py- hat geschrieben:Ich verstehe immer noch nicht so ganz, wie bzw. wonach findMulOrDivOperation() und findAddOrSubOperation() suchen sollen.
Angenommen meine MathList repräsentiert den Ausdruck (2+3)*(4*5+6). Liefert mir findMulOrDivOperation() den Pointer zu "(2+3)*(4*5+6)" (weil der ganze Ausdruck eine Multiplikation ist) oder den Pointer zu "4*5" (weil das die erste simple Multiplikation ist)?
Den Sinn der Methoden verstehe ich auch nicht so ganz. Was genau bringen mir die Methoden, wenn ich sie nur auf den ganzen Ausdruck anwenden kann und nicht auf einen bestimmten Teil, um beispielsweise eine gefundene innermost-Expression nach einer Multiplikation zu durchsuchen?
Angenommen deine gesamte Expression ist eine SimpleExpression.
Dann soll die Methode findMulOrDivOperation() nach einer Punktrechnung suchen. Spezieller nach dem Zeichen der Operation. Wenn dieses Zeichen gefunden ist, soll die Methode das Element vor dem Operationszeichen zurückgeben. Natürlich macht das nur in einer Simple Expression Sinn...

Also einfach nach dem entsprechenden Zeichen suchen und das Element vor dem Zeichen zurück geben.
In deinem Beispiel oben würde die Funktion findMulOrDivOperation() das Element mit ")" zurück geben. Das macht natürlich wenig Sinn! Es macht nur Sinn wenn die Expression keine Klammern enthält. Also wenn MathList eine Simple Expression repräsentiert. Deswegen gibt es dann auch noch eine Methode findAnInnermostExpression() Wie genau du dann welche Methoden anwenden musst, ist Teil der Aufgabe! 8)

bafnai
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 126
Registriert: 13. Apr 2011 06:36

Re: Fragen zum ersten Praktikum

Beitrag von bafnai »

fabian.wagner hat geschrieben:
bafnai hat geschrieben:
Ja, natürlich nicht! Ganz so einfach wollen wir es ja nicht machen. Nenne es einen eleganten Hinweis, wie man es sehr einfach lösen kann 8)
Aber man darf isAtom() auch lang und hässlich schreiben, oder?
Natürlich darfst du das, solange es nicht die Komplexität ins Unendliche steigert :!:
Ich empfehle dir trotzdem dich mit RegEx auseinander zu setzen....
Meine aktuelle Lösung ist zwar wie gesagt lang und hässlich aber nicht sehr kompliziert.
Da man mit einer nicht beantworteten Frage durch das Testat fällt und sich so etwas wie RegEx hervorragend zum Stellen komplizierter Fragen eignet, halte ich es für zielführend möglichst einfache Sprachkonstrukte zu verwenden.

-py-
Windoof-User
Windoof-User
Beiträge: 27
Registriert: 18. Mär 2011 00:27

Re: Fragen zum ersten Praktikum

Beitrag von -py- »

fabian.wagner hat geschrieben:Angenommen deine gesamte Expression ist eine SimpleExpression.
Dann soll die Methode findMulOrDivOperation() nach einer Punktrechnung suchen. Spezieller nach dem Zeichen der Operation. Wenn dieses Zeichen gefunden ist, soll die Methode das Element vor dem Operationszeichen zurückgeben. Natürlich macht das nur in einer Simple Expression Sinn...

Also einfach nach dem entsprechenden Zeichen suchen und das Element vor dem Zeichen zurück geben.
In deinem Beispiel oben würde die Funktion findMulOrDivOperation() das Element mit ")" zurück geben. Das macht natürlich wenig Sinn! Es macht nur Sinn wenn die Expression keine Klammern enthält. Also wenn MathList eine Simple Expression repräsentiert. Deswegen gibt es dann auch noch eine Methode findAnInnermostExpression() Wie genau du dann welche Methoden anwenden musst, ist Teil der Aufgabe! 8)
Na gut, man könnte einen mit findInnermostExpression() gefundenen Ausdruck auch in eine neue MathList stecken, aber ich halt das nicht für ne saubere Lösung. Das hätte man doch viel sinnvoller lösen können, wenn man den beiden find-Methoden einfach Parameter gegeben hätte...

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

Re: Fragen zum ersten Praktikum

Beitrag von fabian.wagner »

-py- hat geschrieben:
fabian.wagner hat geschrieben:Angenommen deine gesamte Expression ist eine SimpleExpression.
Dann soll die Methode findMulOrDivOperation() nach einer Punktrechnung suchen. Spezieller nach dem Zeichen der Operation. Wenn dieses Zeichen gefunden ist, soll die Methode das Element vor dem Operationszeichen zurückgeben. Natürlich macht das nur in einer Simple Expression Sinn...

Also einfach nach dem entsprechenden Zeichen suchen und das Element vor dem Zeichen zurück geben.
In deinem Beispiel oben würde die Funktion findMulOrDivOperation() das Element mit ")" zurück geben. Das macht natürlich wenig Sinn! Es macht nur Sinn wenn die Expression keine Klammern enthält. Also wenn MathList eine Simple Expression repräsentiert. Deswegen gibt es dann auch noch eine Methode findAnInnermostExpression() Wie genau du dann welche Methoden anwenden musst, ist Teil der Aufgabe! 8)
Na gut, man könnte einen mit findInnermostExpression() gefundenen Ausdruck auch in eine neue MathList stecken, aber ich halt das nicht für ne saubere Lösung. Das hätte man doch viel sinnvoller lösen können, wenn man den beiden find-Methoden einfach Parameter gegeben hätte...
Wenn du willst, kannst du die Methoden ja schreiben. Siehe andere Posts.
Die Begründung warum es nicht gemacht wurde, habe ich bereits auch schon geliefert: Man spezifiziert die Aufgabe der Methode meiner Meinung nach zu genau. Das kann dazu führen, dass im Laufe des Projekts Methoden aussterben...
Aber wir sind ja, Gott sei' Dank, in GdI2 und nicht in einer Vorlesung wie SE. Momentan zählen einfach nur die Algorithmik und die Datenstrukturen :)

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

Re: Fragen zum ersten Praktikum

Beitrag von fabian.wagner »

bafnai hat geschrieben:
Meine aktuelle Lösung ist zwar wie gesagt lang und hässlich aber nicht sehr kompliziert.
Da man mit einer nicht beantworteten Frage durch das Testat fällt und sich so etwas wie RegEx hervorragend zum Stellen komplizierter Fragen eignet, halte ich es für zielführend möglichst einfache Sprachkonstrukte zu verwenden.
Aber es ist doch gut zu wissen, was gefragt wird oder? :mrgreen:

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

Re: Fragen zum ersten Praktikum

Beitrag von bagwell »

Kann es sein das was mit den Tests nicht stimmt?
Ich komm nach Durchführung der Tests folgende Fehlermeldung:

Code: Alles auswählen

Expression 4 does not maintain the correct elements after calling assemblePointNumbers().
Expression 4 does not have the correct length after calling assemblePointNumbers().
Irgendwie kann das aber nicht sein, denn wenn ich folgende Main-Methode in der Klasse MathList ausführe:

Code: Alles auswählen

	public static void main(String[] args) {

	String exp4 = "42.0*24+(12686/6343*123.232-23+(43*4.0-(0-3)-(3/12.0*(6.9))))";
	
	MathList l4 = new MathList();
	l4.buildList(exp4);
	l4.assemblePointNumbers();
	System.out.println(l4);
	
	}
Bekomm ich folgende Ausgabe:

Code: Alles auswählen

42.0|*|24|+|(|12686|/|6343|*|123.232|-|23|+|(|43|*|4.0|-|(|0|-|3|)|-|(|3|/|12.0|*|(|6.9|)|)|)|)
Was nach meinem Verständnis vollkommen richtig ist, wie kann es also sein, dass der JUnit Test für die exp4 fehlschlägt?

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:Kann es sein das was mit den Tests nicht stimmt?
Ich komm nach Durchführung der Tests folgende Fehlermeldung:

Code: Alles auswählen

Expression 4 does not maintain the correct elements after calling assemblePointNumbers().
Expression 4 does not have the correct length after calling assemblePointNumbers().
Irgendwie kann das aber nicht sein, denn wenn ich folgende Main-Methode in der Klasse MathList ausführe:

Code: Alles auswählen

	public static void main(String[] args) {

	String exp4 = "42.0*24+(12686/6343*123.232-23+(43*4.0-(0-3)-(3/12.0*(6.9))))";
	
	MathList l4 = new MathList();
	l4.buildList(exp4);
	l4.assemblePointNumbers();
	System.out.println(l4);
	
	}
Bekomm ich folgende Ausgabe:

Code: Alles auswählen

42.0|*|24|+|(|12686|/|6343|*|123.232|-|23|+|(|43|*|4.0|-|(|0|-|3|)|-|(|3|/|12.0|*|(|6.9|)|)|)|)
Was nach meinem Verständnis vollkommen richtig ist, wie kann es also sein, dass der JUnit Test für die exp4 fehlschlägt?
Also ich bekomme genau die gleichen Ausgaben und bei mir schlägt er nicht fehl. Lade vielleicht einfach nochmal die Testdateien nach. Die Tests arbeiten mit Statusbits in einem Integer. Vielleicht ist da irgendein shift verloren gegangen...

hstr
BASIC-Programmierer
BASIC-Programmierer
Beiträge: 128
Registriert: 14. Apr 2011 22:52

Re: Fragen zum ersten Praktikum

Beitrag von hstr »

@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

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

Re: Fragen zum ersten Praktikum

Beitrag von JannikV »

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

Antworten

Zurück zu „Archiv“