Eval: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(13 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
'''Die Funktion ''eval'' ist veraltet und wird in Jack3 nicht mehr unterstützt. Bitte nicht mehr verwenden!'''
In Jack3 einfach den Term in einer Variable angeben, z.B. a=(3+2*4)%5 und dann mit [var=a] referenzieren. Es wird dann 1 ausgegeben. Wenn der Term nicht ausgerechnet werden soll, dann kann man die Plain-Umgebung nutzen, also a=[(3+2*4)%5].
==Zugehörige Evaluatoren==
*'''MathEvaluator'''
=== Beschreibung ===
=== Beschreibung ===
Die Funktion ''eval'' wertet einen Term aus. Der auszuwertende Ausdruck darf nur Zahlen und die Basisoperationen Addition, Subtraktion, Multiplikation, Division, sowie Modulo und Beträge beinhalten. Die Funktion erwartet einen String, den auszuwertenden Term, und gibt das entsprechende Ergebnis zurück.
Die Funktion ''eval'' wertet einen Term aus. Der auszuwertende Ausdruck darf nur Zahlen und die Basisoperationen Addition, Subtraktion, Multiplikation, Division, sowie Modulo und Beträge beinhalten. Die Funktion erwartet einen String, den auszuwertenden Term, und gibt das entsprechende Ergebnis zurück.


=== Syntax ===
=== Syntax ===
  eval(Expression term)
  eval([[Ausdruck]] term)


=== Parameter ===
=== Parameter ===
Zeile 9: Zeile 14:


=== Return Value ===
=== Return Value ===
* Gibt eine Zahl zurück
* Gibt eine [[Ganzzahl]] zurück


=== Beispiele ===
=== Beispiele ===
==== Standardfälle ====
==== Standardfälle ====
  eval('(3+2*4)%5')  --> returns 1
  eval((3+2*4)%5)  --> returns 1


==== Benutzung von Variablen ====
==== Benutzung von Variablen ====
  eval('3+[pos=1]-2')
  eval(3+[pos=1]-2)
  eval('[var=a]/2+1')
  eval([var=a]/2+1)


====JUnit Tests====
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed">
@Before
public void beforeTest() {
  placeFillInVariable(1, OMParser.parse("0"));
  placeFillInVariable(2, OMParser.parse("1"));
  placeExerciseVariable("a", OMParser.parse("0"));
  placeExerciseVariable("b", OMParser.parse("1"));
}
@Test
public void testEval() {
  assertTrue(2  == getEvaluator().getNumberResult("eval('1+1')"));
  assertTrue(2.2 == getEvaluator().getNumberResult("eval('1.2+1')"));
  assertTrue(5  == getEvaluator().getNumberResult("eval(|-5|)"));
  assertTrue(12  == getEvaluator().getNumberResult("eval('2+5*2')"));
  assertTrue(16  == getEvaluator().getNumberResult("eval('2*(5+3)')"));
  assertTrue(1  == getEvaluator().getNumberResult("eval(5%2)"));
  assertFalse(1  == getEvaluator().getNumberResult("eval('2+2')"));
}
@Test
public void testEvalWithInput() {
  assertTrue(0 == getEvaluator().getNumberResult("eval('[pos=1]')"));
  assertTrue(0 == getEvaluator().getNumberResult("eval('[pos=2]-1')"));
}
@Test
public void testEvalWithVariables() {
  assertTrue(0 == getEvaluator().getNumberResult("eval('[var=a]')"));
  assertTrue(0 == getEvaluator().getNumberResult("eval('[var=b]-1')"));
}
@Test
public void testEvalWithExpressions() {
  assertTrue(6 == getEvaluator().getNumberResult("eval(eval('2+2') + eval('1+1'))"));
  assertTrue(1 == getEvaluator().getNumberResult("eval(eval(1))"));
}
@Test
public void testEvalWithFunction() {
  assertFalse("5x".equals(getEvaluator().getResultAsEvaluatorString("eval('2x+3x')")));
  assertFalse(1 == getEvaluator().getNumberResult("eval('2x=2')"));
}
@Test (expected=InvalidEvaluatorFunctionArgumentException.class)
public void testEvalWithWrongInputEmptyStringArgument() {
  getEvaluator().getNumberResult("eval('')");
}
@Test (expected=InvalidEvaluatorFunctionArgumentException.class)
public void testEvalWithWrongInputCharacter() {
  getEvaluator().getNumberResult("eval('a')");
}
@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testEvalWithTwoArguments(){
  getEvaluator().getNumberResult("eval(0, 1)");
}
@Test(expected=UnsupportedEvaluatorFunctionException.class)
public void testEvalWithThreeArguments(){
  getEvaluator().getNumberResult("eval(1, 0, 0)");
}
@Test (expected=UndefinedExerciseVariableException.class)
public void testEvalWithMissingExerciseVariable() {
  getEvaluator().getNumberResult("eval('[var=j]')");
}
@Test (expected=UndefinedFillInVariableException.class)
public void testEvalWithMissingInput() {
  getEvaluator().getNumberResult("eval('[pos=42]')");
}
</syntaxhighlight>


=== Hinweise ===
=== Hinweise ===
Zeile 101: Zeile 29:
* Bei der Multiplikation mit einer Klammer muss explizit ein Malzeichen verwendet werden.
* Bei der Multiplikation mit einer Klammer muss explizit ein Malzeichen verwendet werden.


[[Kategorie:Evaluatorfunktion]]
[[Kategorie:Ausdruckfunktionen]][[Kategorie:JACK2]]

Aktuelle Version vom 27. März 2024, 13:29 Uhr

Die Funktion eval ist veraltet und wird in Jack3 nicht mehr unterstützt. Bitte nicht mehr verwenden!
In Jack3 einfach den Term in einer Variable angeben, z.B. a=(3+2*4)%5 und dann mit [var=a] referenzieren. Es wird dann 1 ausgegeben. Wenn der Term nicht ausgerechnet werden soll, dann kann man die Plain-Umgebung nutzen, also a=[(3+2*4)%5].

Zugehörige Evaluatoren

  • MathEvaluator

Beschreibung

Die Funktion eval wertet einen Term aus. Der auszuwertende Ausdruck darf nur Zahlen und die Basisoperationen Addition, Subtraktion, Multiplikation, Division, sowie Modulo und Beträge beinhalten. Die Funktion erwartet einen String, den auszuwertenden Term, und gibt das entsprechende Ergebnis zurück.

Syntax

eval(Ausdruck term)

Parameter

  • term - der auszuwertende Term

Return Value

Beispiele

Standardfälle

eval((3+2*4)%5)   --> returns 1

Benutzung von Variablen

eval(3+[pos=1]-2)
eval([var=a]/2+1)


Hinweise

  • Die Funktion berücksichtigt Punktrechnung vor Strichrechnung.
  • Bei der Multiplikation mit einer Klammer muss explizit ein Malzeichen verwendet werden.