CountNodes: Unterschied zwischen den Versionen

Aus JACK Wiki
Zur Navigation springen Zur Suche springen
Keine Bearbeitungszusammenfassung
 
(19 dazwischenliegende Versionen von 5 Benutzern werden nicht angezeigt)
Zeile 1: Zeile 1:
===Zugehörige Evaluatoren===
*'''MathEvaluator'''
=== Beschreibung ===
=== Beschreibung ===
 
Die Funktion ''countNodes'' zählt die Knoten des OpenMathObjektes.
Die Funktion ''countNodes'' ruft die Methode ''getNumberOfNodes'' des entsprechenden OpenMathObjektes auf. In den implementierten OpenMathObjekten ist jedoch diese Funktion nicht implementiert


=== Syntax ===
=== Syntax ===
  countNodes(Expression argument)
  countNodes([[Ausdruck]] argument)


=== Parameter ===
=== Parameter ===
* '''argument''' - die Expression, dessen Knoten gezhält werden sollen
* '''argument''' - die Expression, dessen Knoten gezählt werden sollen


=== Return Value ===
=== Return Value ===
*Gibt die Anzahl der Knoten zurück
* Gibt die Anzahl der Knoten zurück


=== Beispiele ===
=== Beispiele ===
==== Darstellung in OpenMath ====
\(3 \cdot 5 \)
<syntaxhighlight lang="xml">
<OMOBJ>
<OMA>
<OMS cd="arith1" name="times" />
<OMI>3</OMI>
<OMI>5</OMI>
</OMA>
</OMOBJ>
</syntaxhighlight>
\(3 \cdot 5 + 4 \)
<syntaxhighlight lang="xml">
<OMOBJ>
<OMA>
<OMS cd="arith1" name="plus" />
<OMA>
<OMS cd="arith1" name="times" />
<OMI>3</OMI>
<OMI>5</OMI>
</OMA>
<OMI>4</OMI>
</OMA>
</OMOBJ>
</syntaxhighlight>
==== Standardfälle ====
==== Standardfälle ====
'''Jack2:'''
countNodes(3*5)    --> returns 4
countNodes(3*5+4)    --> returns 7


'''Jack3:'''
countNodes(3*5)    --> returns 3
countNodes(3*5+4)    --> returns 5


==== Benutzung mit Variablen ====
==== Benutzung mit Variablen ====
countNodes([var=a])
==== Benutzung mit studentischen Eingaben ====
'''Jack2:'''
  countNodes([pos=1])
  countNodes([pos=1])
countNodes([var=a])


====JUnit Tests====
'''Jack3:'''
<syntaxhighlight lang="java" class="mw-collapsible mw-collapsed">
countNodes([input=field1])
@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 testCountNodes() {
  assertTrue(3 == getEvaluator().getNumberResult("countNodes(2+2)"));
  assertTrue(5 == getEvaluator().getNumberResult("countNodes(3*(2+2))"));
  assertTrue(5 == getEvaluator().getNumberResult("countNodes(3*(a+2))"));
  assertFalse(1 ==getEvaluator().getNumberResult("countNodes(2+2)"));
}
@Test
public void testCountNodesWithInput() {
  assertTrue(1 == getEvaluator().getNumberResult("countNodes([pos=2])"));
  assertTrue(5 == getEvaluator().getNumberResult("countNodes(3*([pos=1]+2))"));
}
@Test
public void testCountNodesWithVariables() {
  assertTrue(1 == getEvaluator().getNumberResult("countNodes([var=a])"));
  assertTrue(5 == getEvaluator().getNumberResult("countNodes(3*([var=a]+2))"));
}
@Test
public void testCountNodesWithExpressions() {
  assertTrue(1 == getEvaluator().getNumberResult("countNodes('countNodes(2+2)')"));
}
@Test (expected=InvalidEvaluatorFunctionArgumentException.class)
public void testCountNodesWithWrongInputCharacter() {
  getEvaluator().getNumberResult("countNodes(a)");
}
@Test (expected=UnsupportedEvaluatorFunctionException.class)
public void testCountNodesWithTwoArguments() {
  getEvaluator().getNumberResult("countNodes(3, 2)");
}
@Test (expected=UnsupportedEvaluatorFunctionException.class)
public void testCountNodesWithThreeArguments() {
  getEvaluator().getNumberResult("countNodes(1, 2, 3)");
}
@Test (expected=UndefinedExerciseVariableException.class)
public void testCountNodesWithMissingExcerciseVariable() {
  getEvaluator().getNumberResult("countNodes('[var=j]')");
}
@Test (expected=UndefinedFillInVariableException.class)
public void testCountNodesWithMissingInput() {
  getEvaluator().getNumberResult("countNodes('[pos=42]')");
}
</syntaxhighlight>


=== Hinweise ===
=== Hinweise ===
* Diese Methode liefert immer den Wert 1 zurück, da dies in den einzelnen OpenMathObjekten nicht implementiert ist
* Die Funktion ''countNodes'' wurde in Jack3 verbessert, sodass sie jetzt nur noch die tatsächliche Anzahl der Knoten zurück gibt. In Jack2 wird diese Funktion immer eine höhere Zahl zurückgeben, da diese dort fälschlicherweise noch interne Knoten zählt.
* Wenn Variablen genutzt werden muss darauf geachtet werden, dass diese die Voraussetzung erfüllen.
* 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.


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

Aktuelle Version vom 10. September 2024, 13:02 Uhr

Zugehörige Evaluatoren

  • MathEvaluator

Beschreibung

Die Funktion countNodes zählt die Knoten des OpenMathObjektes.

Syntax

countNodes(Ausdruck argument)

Parameter

  • argument - die Expression, dessen Knoten gezählt werden sollen

Return Value

  • Gibt die Anzahl der Knoten zurück

Beispiele

Darstellung in OpenMath

\(3 \cdot 5 \)

<OMOBJ>
	<OMA>
		<OMS cd="arith1" name="times" />
			<OMI>3</OMI>
			<OMI>5</OMI>
	</OMA>
</OMOBJ>

\(3 \cdot 5 + 4 \)

<OMOBJ>
	<OMA>
		<OMS cd="arith1" name="plus" />
		<OMA>
			<OMS cd="arith1" name="times" />
			<OMI>3</OMI>
			<OMI>5</OMI>
		</OMA>
		<OMI>4</OMI>
	</OMA>
</OMOBJ>

Standardfälle

Jack2:
countNodes(3*5)    --> returns 4
countNodes(3*5+4)    --> returns 7
Jack3:
countNodes(3*5)    --> returns 3
countNodes(3*5+4)    --> returns 5

Benutzung mit Variablen

countNodes([var=a])

Benutzung mit studentischen Eingaben

Jack2:
countNodes([pos=1])
Jack3:
countNodes([input=field1])

Hinweise

  • Die Funktion countNodes wurde in Jack3 verbessert, sodass sie jetzt nur noch die tatsächliche Anzahl der Knoten zurück gibt. In Jack2 wird diese Funktion immer eine höhere Zahl zurückgeben, da diese dort fälschlicherweise noch interne Knoten zählt.
  • Wenn Variablen genutzt werden muss darauf geachtet werden, dass diese die Voraussetzung erfüllen.
  • 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.