EqualsExpr: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
 
(21 dazwischenliegende Versionen von 6 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
===Zugehörige Evaluatoren===
*'''MathEvaluator'''
===Beschreibung===
===Beschreibung===
Die Funktion ''equalsExpr'' vergleicht zwei mathematische Ausdrücke miteinander. Sie erwartet zwei Strings und gibt einen Boolean zurück.
Die Funktion ''equalsExpr'' vergleicht zwei mathematische Ausdrücke miteinander. Sie erwartet zwei Ausdrücke (mit Strings kann sie nicht umgehen) und gibt einen boolischen Wert zurück (siehe [[Boolean]]).


===Syntax===
===Syntax===
Zeile 12: Zeile 15:
* Gibt einen Boolean zurück, ''true'' falls die beiden Ausdrücke übereinstimmen und ''false'' falls sie nicht übereinstimmen.
* Gibt einen Boolean zurück, ''true'' falls die beiden Ausdrücke übereinstimmen und ''false'' falls sie nicht übereinstimmen.


===Beispiel===
===Beispiele===
equalsExpr('x^2 - 5*x + 6','(x-2)*(x-3)')    --> returns true
====Beispiele Teil 1====
 
equalsExpr(x^2 - 5*x + 6,(x-2)*(x-3))   --> returns ''true''
====JUnit Tests====
<span class="mw-customtoggle-myDivision">[Anzeigen]</span>
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed" id="mw-customcollapsible-myDivision">
@BeforeClass
public static void beforeTest() throws FunctionNotImplementedException, UndefinedFillInVariableException,
UndefinedExerciseVariableException, ParserException, ErroneousFillInVariableException, ErroneousExerciseVariableException {
equalsExprFillInVariableMap.put(1, ExpressionParser.parse("0", null, null));
equalsExprFillInVariableMap.put(2, ExpressionParser.parse("x^2", null, null));
 
equalsExprExerciseVariableMap.put("a", ExpressionParser.parse("0", null, null));
equalsExprExerciseVariableMap.put("b", ExpressionParser.parse("1", null, null));
equalsExprExerciseVariableMap.put("c", ExpressionParser.parse("5", null, null));
equalsExprExerciseVariableMap.put("d", ExpressionParser.parse("x^2", null, null));
}
 
@Test
public void testEqualsExpr1() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('x^2-5*x+6','(x-2)*(x-3)')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExpr2() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('x*x-5*x+6','(x-2)*(x-3)')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExpr3() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('1/2*x^2+3*x-5','0.5*x^2+3*x-5')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExpr4() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('(a-b)/(b^2-a^2)','(a-b)/(b^2-a^2)')",
equalsExprExerciseVariableMap, equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExpr5() {
assertTrue(!Evaluator.getBooleanResult("equalsExpr('x^2+x+1','a^2+a+1')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExpr6() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('(x^2)/2','0.5*x^2')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExpr7() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('1','1')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExprWithInput1() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('0','[pos=1]')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExprWithInput2() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('x*x','[pos=2]')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}
 
@Test
public void testEqualsExprWithVariables1() {
assertTrue(Evaluator.getBooleanResult("equalsExpr('[var=b]*x^2+[var=c]*x+[var=a]','x^2+5*x')",
equalsExprExerciseVariableMap, equalsExprFillInVariableMap));
}


@Test
'''rationalen Zahlen:'''
public void testEqualsExprWithVariables2() {
equalsExpr(1/3 , 1/3)   --> returns ''true''
assertTrue(Evaluator.getBooleanResult("equalsExpr('[var=d]','x^2')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
equalsExpr(divide(1,3), 1/3)    --> returns ''true''
}
equalsExpr(rational(1,3), 1/3)    --> returns ''true''
equalsExpr(1/3, rational(1,3))    --> returns ''true''
equalsExpr(rational(1,3), rational(1,3))   --> returns ''true''


@Test
Hier wird unterschieden, ob es eine rationale Zahl ist (mit [[Rational]]), oder ein ausgerechneter Wert (mit [[Division]]). Die rationale Zahl ist genauer als der ausgerechnete Wert und die Funktion ''equalsExpr'' liefert den boolischen Wert '''false'''.
public void testEqualsExprWithEmptyStringArguments1() {
assertTrue(!Evaluator.getBooleanResult("equalsExpr('x^2+x+1','')", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}


@Test
====Beispiele für Jack2====
public void testEqualsExprWithEmptyStringArguments2() {
assertTrue(!Evaluator.getBooleanResult("equalsExpr('','x^2+x+1')", equalsExprExerciseVariableMap,
Ohne Editorpalette:
equalsExprFillInVariableMap));
equalsExpr([pos=1],"K/(2*L)")    --> returns ''error''
}
equalsExpr([pos=1],K/(2*L))    --> returns ''error''
equalsExpr([pos=1],x/(2*y))   --> returns ''true''/''false''


@Test
Mit Editorpalette:
public void testEqualsExprWithEmptyStringArguments3() {
equalsExpr([pos=1],K/(2*L))    --> returns ''error''
assertTrue(Evaluator.getBooleanResult("equalsExpr('','')", equalsExprExerciseVariableMap,
equalsExpr([pos=1],"K/(2*L)")    --> returns ''true''/''false''
equalsExprFillInVariableMap));
}


@Test (expected = FunctionInvalidNumberOfArgumentsException.class)
==== Vergleich mit ''equal'' und ''equals'' ====
public void testEqualsExprWithEmptyArgument() {
assertTrue(!Evaluator.getBooleanResult("equalsExpr()", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}


@Test
Es werden die drei Funktion '''equalsExpr''','''[[equal]]''' und '''[[equals]]''' in Zussammenhang gesetzt, welche Funktion in welcher Situation was zurückgibt. Dabei bekommen die Funktionen entweder einen String Ausdruck oder einen mathematischen Ausdruck als Eingabe. Die Ausgaben ''true'' und ''false'' bedeuten, dass die Eingaben ausgewertet werden können, ''error'' bedeutet, dass die Eingabe nicht ausgewertet kann und ein Fehler zurückgegeben wird.
public void testEqualsExprWithONECharacter() {
assertTrue(Evaluator.getBooleanResult("equalsExpr(a, a)", equalsExprExerciseVariableMap,
equalsExprFillInVariableMap));
}


@Test(expected = UndefinedExerciseVariableException.class)
{| class="wikitable"
public void testEqualsExprWithoutExerciseVariable() {
|+ Ausdrücke ohne Operator
Evaluator.getBooleanResult("equalsExpr([var=j], [var=j])", equalsExprExerciseVariableMap,
|-
equalsExprFillInVariableMap);
! Eingabe !! equal / <span style="color:#6B8E23"> equalsExpr </span> !! equals
fail();
|-
}
| String, String (Bsp.: 'hello','hello') || Error || True
|-
| String, String (Bsp.: '23','23') || Error || True
|-
| String, math (Bsp.: '23',23) || Error || True
|-
| math, String (Bsp.: 23,'23') || Error || True
|-
| math, math (Bsp.: 23,23) || True || True
|}


@Test(expected = UndefinedFillInVariableException.class)
{| class="wikitable"
public void testEqualsExprWithoutInput() {
|+ Ausdrücke mit Operator
Evaluator.getBooleanResult("equalsExpr([pos=42], [pos=42])", equalsExprExerciseVariableMap,
|-
equalsExprFillInVariableMap);
! Eingabe !! equal / <span style="color:#6B8E23"> equalsExpr </span> !! equals
fail();
|-
}
| String, String (Bsp.: '2+3','3+2') || Error || False
|-
| String, String (Bsp.: '2+3','2+3') || Error || True
|-
| String, String (Bsp.: '2+3','5') || Error || False
|-
| String, String (Bsp.: 'sin(2)+sqrt(2)','sin(2)*1+sqrt(2)*1') || Error || False
|-
| String, math (Bsp.: '2+3',3+2) || Error || False
|-
| String, math (Bsp.: '2+3',2+3) || Error || False
|-
| String, math (Bsp.: '2+3',5) || Error || False
|-
| String, math (Bsp.: '5',2+3) || Error || True
|-
| String, math (Bsp.: 'sin(2)+sqrt(2)',sin(2)*1+sqrt(2)*1) || Error || False
|-
| math, math (Bsp.: 2+3,3+2) || True || True
|-
| math, math (Bsp.: sin(2)+sqrt(2),sin(2)*1+sqrt(2)*1) || True || True
|-
| math, math (Bsp.: 3.7,37/10) || True || False
|}


@Test
{| class="wikitable"
public void testEqualsExprWithSemanticallyIncorrectInput() {
|+ Ausdrücke mit Operator und Variablen
Evaluator.getBooleanResult("equalsExpr('(4,2)', '4.2')", equalsExprExerciseVariableMap,
|-
equalsExprFillInVariableMap);
! Eingabe !! equal / <span style="color:#6B8E23"> equalsExpr </span> !! equals
}
|-
</syntaxhighlight>
| String, String (Bsp.: '2x','2x') || Error || True
|-
| String, String (Bsp.: 'x+y','y+x') || Error || False
|-
| String, math (Bsp.: '2x',2x) || Error || True
|-
| String, math (Bsp.: 'x+y',y+x) || Error || True
|-
| String, math (Bsp.: '5y',2y+3*y) || Error || True
|-
| math, math (Bsp.: 5x+3x,8*x) || True || True
|-
| math, math (Bsp.: 5x+3x,3x+5x) || True || True
|-
| math, math (Bsp.: sin(x),sin(x)*1) || True || True
|}


===Hinweise===
===Hinweise===
* Die Funktion ''equalsExpr'' ist ein Alias für die Funktion [[equal]].
* Die Funktion ''equalsExpr'' holt sich die Sage-Repräsentation beider Argumente und evaluiert diese in Sage.
* Mit Strings kann die Funktion ''equalsExpr'' nicht umgehen, da String keine Sage-Repräsentation hat, es dürfen also keine Strings in dieser Funktion benutzt werden.
* Für gewöhnlich sind bei [[Ausdruck|Ausdrücken]] nur kleingeschriebene Variablenbuchstaben möglich.
* Wenn die Eingabe der Studierenden genutzt wird muss auch hier darauf geachtet werden, dass die Voraussetzungen erfüllt sind und ob diese an der Stelle genutzt werden können.
* Wenn in einem Ausdruck ein großgeschriebener Variablenbuchstabe nötig ist muss eine Editor-Palette (z.B. ''invisible'') eingebunden werden. Außerdem sind in diesem Fall auch die einfachen Anführungszeichen für den Ausdruck nötig (vlg. Beispiele Teil 2).
* Eine Überprüfung durch [[EvaluateInSage]] währe ebenfalls eine Alternative.


[[Kategorie:Evaluatorfunktion]]
[[Kategorie:Math-Evaluatorfunktion]][[Kategorie:Testfunktionen]][[Kategorie:Ausdruckfunktionen]][[Kategorie:JACK2]][[Kategorie:JACK3]]

Aktuelle Version vom 8. Juli 2024, 13:28 Uhr

Zugehörige Evaluatoren

  • MathEvaluator

Beschreibung

Die Funktion equalsExpr vergleicht zwei mathematische Ausdrücke miteinander. Sie erwartet zwei Ausdrücke (mit Strings kann sie nicht umgehen) und gibt einen boolischen Wert zurück (siehe Boolean).

Syntax

equalsExpr(Ausdruck term1, Ausdruck term2)

Parameter

  • term1 - der Ausdruck, der als Grundlage für den Vergleich dient
  • term2 - der Ausdruck, der mit term1 verglichen werden soll

Return Value

  • Gibt einen Boolean zurück, true falls die beiden Ausdrücke übereinstimmen und false falls sie nicht übereinstimmen.

Beispiele

Beispiele Teil 1

equalsExpr(x^2 - 5*x + 6,(x-2)*(x-3))    --> returns true
rationalen Zahlen:
equalsExpr(1/3 , 1/3)    --> returns true

equalsExpr(divide(1,3), 1/3)    --> returns true

equalsExpr(rational(1,3), 1/3)    --> returns true

equalsExpr(1/3, rational(1,3))    --> returns true

equalsExpr(rational(1,3), rational(1,3))    --> returns true

Hier wird unterschieden, ob es eine rationale Zahl ist (mit Rational), oder ein ausgerechneter Wert (mit Division). Die rationale Zahl ist genauer als der ausgerechnete Wert und die Funktion equalsExpr liefert den boolischen Wert false.

Beispiele für Jack2

Ohne Editorpalette:
equalsExpr([pos=1],"K/(2*L)")    --> returns error
equalsExpr([pos=1],K/(2*L))    --> returns error
equalsExpr([pos=1],x/(2*y))    --> returns true/false
Mit Editorpalette:
equalsExpr([pos=1],K/(2*L))    --> returns error
equalsExpr([pos=1],"K/(2*L)")    --> returns true/false

Vergleich mit equal und equals

Es werden die drei Funktion equalsExpr,equal und equals in Zussammenhang gesetzt, welche Funktion in welcher Situation was zurückgibt. Dabei bekommen die Funktionen entweder einen String Ausdruck oder einen mathematischen Ausdruck als Eingabe. Die Ausgaben true und false bedeuten, dass die Eingaben ausgewertet werden können, error bedeutet, dass die Eingabe nicht ausgewertet kann und ein Fehler zurückgegeben wird.

Ausdrücke ohne Operator
Eingabe equal / equalsExpr equals
String, String (Bsp.: 'hello','hello') Error True
String, String (Bsp.: '23','23') Error True
String, math (Bsp.: '23',23) Error True
math, String (Bsp.: 23,'23') Error True
math, math (Bsp.: 23,23) True True
Ausdrücke mit Operator
Eingabe equal / equalsExpr equals
String, String (Bsp.: '2+3','3+2') Error False
String, String (Bsp.: '2+3','2+3') Error True
String, String (Bsp.: '2+3','5') Error False
String, String (Bsp.: 'sin(2)+sqrt(2)','sin(2)*1+sqrt(2)*1') Error False
String, math (Bsp.: '2+3',3+2) Error False
String, math (Bsp.: '2+3',2+3) Error False
String, math (Bsp.: '2+3',5) Error False
String, math (Bsp.: '5',2+3) Error True
String, math (Bsp.: 'sin(2)+sqrt(2)',sin(2)*1+sqrt(2)*1) Error False
math, math (Bsp.: 2+3,3+2) True True
math, math (Bsp.: sin(2)+sqrt(2),sin(2)*1+sqrt(2)*1) True True
math, math (Bsp.: 3.7,37/10) True False
Ausdrücke mit Operator und Variablen
Eingabe equal / equalsExpr equals
String, String (Bsp.: '2x','2x') Error True
String, String (Bsp.: 'x+y','y+x') Error False
String, math (Bsp.: '2x',2x) Error True
String, math (Bsp.: 'x+y',y+x) Error True
String, math (Bsp.: '5y',2y+3*y) Error True
math, math (Bsp.: 5x+3x,8*x) True True
math, math (Bsp.: 5x+3x,3x+5x) True True
math, math (Bsp.: sin(x),sin(x)*1) True True

Hinweise

  • Die Funktion equalsExpr ist ein Alias für die Funktion equal.
  • Die Funktion equalsExpr holt sich die Sage-Repräsentation beider Argumente und evaluiert diese in Sage.
  • Mit Strings kann die Funktion equalsExpr nicht umgehen, da String keine Sage-Repräsentation hat, es dürfen also keine Strings in dieser Funktion benutzt werden.
  • Für gewöhnlich sind bei Ausdrücken nur kleingeschriebene Variablenbuchstaben möglich.
  • Wenn die Eingabe der Studierenden genutzt wird muss auch hier darauf geachtet werden, dass die Voraussetzungen erfüllt sind und ob diese an der Stelle genutzt werden können.
  • Wenn in einem Ausdruck ein großgeschriebener Variablenbuchstabe nötig ist muss eine Editor-Palette (z.B. invisible) eingebunden werden. Außerdem sind in diesem Fall auch die einfachen Anführungszeichen für den Ausdruck nötig (vlg. Beispiele Teil 2).
  • Eine Überprüfung durch EvaluateInSage währe ebenfalls eine Alternative.