Magic Pot Calculation

Magic Pot Calculation
Loading the math board and drawing, please wait…
2025-06-02 16:40
This example demonstrates how to create an interactive magic pot calculation tool in GeoGebra for practicing addition, subtraction, inequalities, and 2D vector operations. The core math concepts involved include integer arithmetic, inequality solving, 2D vector representation, and geometric transformations. Construction highlights the use of commands and objects like Textfield, Flatten, Sequence,

GeoGebra Commands & Parameters

  1. Textfield(input) → inputBox
  2. Flatten(Sequence[Shuffle[1…4], k, 1, 25]) → Cases1
  3. Sequence(If[Cases1(k) ∈ {1, 2}, Random[1, maxNumber], Random[minNumber, -1]], k, 1, 100) → NumberList11
  4. Flatten(Sequence[Shuffle[1…10], k, 1, 4]) → Cases2
  5. Sequence(If[Cases2(k) ∈ {1, 2, 3, 7, 8, 9, 10}, Random[1, maxNumber], Random[minNumber, -1]], k, 1, 100) → NumberList12
  6. If(level ≟ 1, NumberList11(counter), NumberList12(counter)) → numberStone1
  7. Sequence(If[Cases1(k) ∈ {1, 3}, RandomElement[Remove[minNumber…maxNumber, {0}]], Cases1(k) ≟ 2, Random[minNumber, -1], Random[1, maxNumber]], k, 1, 100) → NumberList21
  8. Sequence(If[Cases2(k) ∈ {1, 2, 3}, Random[1, maxNumber], Random[minNumber, -1]], k, 1, 100) → NumberList42
  9. Sequence(If[Cases2(k) ∈ {1, 4, 7}, RandomElement[Remove[minNumber…maxNumber, {0}]], Cases2(k) ∈ {3, 6, 10}, If[NumberList12(k) + NumberList42(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {2, 5, 8}, If[NumberList12(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {9}, If[NumberList42(k) > 0, Random[minNumber, -1], Random[1, maxNumber]]], k, 1, 100) → NumberList22
  10. If(level ≟ 1, NumberList21(counter), NumberList22(counter)) → numberStone2
  11. Sequence(If[Cases1(k) ∈ {1, 3}, If[NumberList21(k) < 0, RandomElement[1…maxNumber], RandomElement[minNumber…-1]], RandomElement[Remove[Max[-5 - NumberList21(k) - NumberList11(k), minNumber]…Min[5 - NumberList21(k) - NumberList11(k), maxNumber], {0}]]], k, 1, 100) → NumberList31
  12. Sequence(If[Cases2(k) ∈ {1, 4, 7}, If[NumberList22(k) < 0, RandomElement[1…maxNumber], RandomElement[minNumber…-1]], Cases2(k) ∈ {3, 6, 10}, If[NumberList12(k) + NumberList42(k) + NumberList22(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {2, 5, 8}, If[NumberList12(k) + NumberList22(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {9}, If[NumberList42(k) + NumberList22(k) ≥ 0, Random[minNumber, -1], Random[1, maxNumber]]], k, 1, 100) → NumberList32
  13. If(level ≟ 1, NumberList31(counter), NumberList32(counter)) → numberStone3
  14. Sequence(If[Cases1(k) ∈ {2, 4}, RandomElement[{4}], RandomElement[{3, 4}]], k, 1, 100) → NumberOfStonesLevel1
  15. Sequence(If[Cases1(k) ∈ {1, 3} ∧ NumberOfStonesLevel1(k) ≟ 3, RandomElement[Remove[Max[-20 - NumberList21(k) - NumberList31(k), minNumber]…Min[20 - NumberList21(k) - NumberList31(k), maxNumber], {0}]], Cases1(k) ∈ {1, 3} ∧ NumberOfStonesLevel1(k) ≟ 4, RandomElement[Remove[Max[-5 - NumberList21(k) - NumberList31(k), minNumber]…Min[5 - NumberList21(k) - NumberList31(k), maxNumber], {0}]], RandomElement[Remove[Max[-20 - NumberList21(k) - NumberList31(k), minNumber]…Min[20 - NumberList21(k) - NumberList31(k), maxNumber], {0}]]], k, 1, 100) → NumberList41
  16. If(level ≟ 1, NumberList41(counter), NumberList42(counter)) → numberStone4
  17. Sequence(If[Cases2(k) ∈ {1, 4, 7}, If[NumberList32(k) + NumberList22(k) < 0, RandomElement[1…maxNumber], RandomElement[minNumber…-1]], Cases2(k) ∈ {3, 6, 10}, If[NumberList12(k) + NumberList42(k) + NumberList22(k) + NumberList32(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {2, 5, 8}, If[NumberList12(k) + NumberList22(k) + NumberList32(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {9}, If[NumberList42(k) + NumberList22(k) + NumberList32(k) > 0, Random[minNumber, -1], Random[1, maxNumber]]], k, 1, 100) → NumberList52
  18. Sequence(If[Cases1(k) ∈ {1, 3} ∧ NumberOfStonesLevel1(k) ≟ 4, RandomElement[Remove[Max[-20 - NumberList21(k) - NumberList31(k) - NumberList41(k), minNumber]…Min[20 - NumberList21(k) - NumberList31(k) - NumberList41(k), maxNumber], {0}]], Random[minNumber, maxNumber]], k, 1, 100) → NumberList51
  19. If(level ≟ 1, NumberList51(counter), NumberList52(counter)) → numberStone5
  20. Sequence(If[Cases2(k) ∈ {1, 4, 7}, If[NumberList52(k) + NumberList32(k) + NumberList22(k) < 0, RandomElement[1…maxNumber], RandomElement[minNumber…-1]], Cases2(k) ∈ {3, 6, 10}, If[NumberList12(k) + NumberList42(k) + NumberList22(k) + NumberList32(k) + NumberList52(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {2, 5, 8}, If[NumberList12(k) + NumberList22(k) + NumberList32(k) + NumberList52(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {9}, If[NumberList42(k) + NumberList22(k) + NumberList32(k) + NumberList52(k) > 0, Random[minNumber, -1], Random[1, maxNumber]]], k, 1, 100) → NumberList62
  21. Sequence(If[Cases2(k) ∈ {1, 4, 7}, If[NumberList62(k) + NumberList52(k) + NumberList32(k) + NumberList22(k) < 0, RandomElement[1…maxNumber], RandomElement[minNumber…-1]], Cases2(k) ∈ {2, 5, 8}, If[NumberList12(k) + NumberList22(k) + NumberList32(k) + NumberList52(k) + NumberList62(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], Cases2(k) ∈ {9}, If[NumberList42(k) + NumberList22(k) + NumberList32(k) + NumberList52(k) + NumberList62(k) > 0, Random[minNumber, -1], Random[1, maxNumber]], RandomElement[Remove[minNumber…maxNumber, {0}]]], k, 1, 100) → NumberList72
  22. Sequence(IsInRegion[AllPStones(k), RegionZK(1)], k, 1, Length[AllPStones]) → StoneInRegion
  23. Sum(Sequence[If[StoneInRegion(k), AllNumbersStones(k), 0], k, 1, Length[AllNumbersStones]]) → actualTemperature
  24. If(level ≟ 1, actualTemperature + If[CaseLevel1 ∈ {1, 3}, numberStone1, (-numberStone1)], actualTemperature + If[CaseLevel2 ∈ {1, 4, 7, 9}, numberStone1, (-numberStone1)] + If[CaseLevel2 ∈ {1, 2, 4, 5, 7, 8}, numberStone4, (-numberStone4)]) → solution
  25. Sequence(Random[1, 10], i, 1, 10) → randomNumbers, {9, 4, 5, 3, 10, 7, 6, 7, 5, 4}
  26. Element(randomNumbers, Mod[questionCount, Length[randomNumbers]] + 1) → randomNumber
  27. Join({Sequence[Segment[Corner[4] + (RasterPixMat * ((k * RasterStepXY), 0)), Corner[4] + (RasterPixMat * ((k * RasterStepXY), RasterMaxY))], k, 0, RasterMaxX / RasterStepXY], Sequence[Segment[Corner[4] + (RasterPixMat * (0, (k * RasterStepXY))), Corner[4] + (RasterPixMat * (RasterMaxX, (k * RasterStepXY)))], k, 0, RasterMaxY / RasterStepXY]}) → RasterStrecken
  28. Join({Sequence[Text[UnicodeToLetter[65 + k], Midpoint[Corner[4] + (RasterPixMat * ((k * RasterStepXY), RasterMaxY)), Corner[4] + (RasterPixMat * (((k + 1) * RasterStepXY), RasterMaxY))], false, true, 0, -1], k, 0, RasterMaxX / RasterStepXY - 1], Sequence[Text[("" * k), Midpoint[Corner[4] + (RasterPixMat * (RasterMaxX, ((k - 1) * RasterStepXY))), Corner[4] + (RasterPixMat * (RasterMaxX, (k * RasterStepXY)))], false, true, 1, 0], k, 1, RasterMaxY / RasterStepXY]}) → RasterBeschriftung
  29. Sequence(Sequence[Corner[4] + (RasterPixMat * ((k * RasterStepXY), (m * RasterStepXY))), k, 0, RasterMaxX / RasterStepXY], m, 0, RasterMaxY / RasterStepXY) → RasterPunkte
  30. Translate(imgChilliGrau1, Vector[(1 * Vector[((0.8 * dimChilli), 0)])]) → imgChilliGrau2
  31. Translate(imgChilliRot1, Vector[(1 * Vector[((0.8 * dimChilli), 0)])]) → imgChilliRot2
  32. Translate(imgChilliRot1, Vector[(2 * Vector[((0.8 * dimChilli), 0)])]) → imgChilliRot3
  33. Ellipse(Midpoint[PointsAZK(1), PointsAZK(2)] + (sqrt(Distance[PointsAZK(2), Midpoint[PointsAZK(1), PointsAZK(2)]]^(2) - Distance[PointsBZK(2), Midpoint[PointsAZK(1), PointsAZK(2)]]^(2)), 0), Midpoint[PointsAZK(1), PointsAZK(2)] + ((-sqrt(Distance[PointsAZK(2), Midpoint[PointsAZK(1), PointsAZK(2)]]^(2) - Distance[PointsBZK(2), Midpoint[PointsAZK(1), PointsAZK(2)]]^(2))), 0), Distance[PointsAZK(1), PointsAZK(2)] / 2) → ellZK
  34. Sequence(((dimStoneA * cos(k°)), (dimStoneB * sin(k°))), k, 0, 360, 5) → PointStone
  35. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone1 > 0, "+", numberStone1 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone1)), (abs(numberStone1) * "")]) * "}}}"), PStone1 + (0, 0.05), false, true, 0, 0) → txtStone1
  36. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone2 > 0, "+", numberStone2 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone2)), (abs(numberStone2) * "")]) * "}}}"), PStone2 + (0, 0.05), false, true, 0, 0) → txtStone2
  37. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone3 > 0, "+", numberStone3 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone3)), (abs(numberStone3) * "")]) * "}}}"), PStone3 + (0, 0.05), false, true, 0, 0) → txtStone3
  38. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone4 > 0, "+", numberStone4 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone4)), (abs(numberStone4) * "")]) * "}}}"), PStone4 + (0, 0.05), false, true, 0, 0) → txtStone4
  39. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone5 > 0, "+", numberStone5 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone5)), (abs(numberStone5) * "")]) * "}}}"), PStone5 + (0, 0.05), false, true, 0, 0) → txtStone5
  40. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone6 > 0, "+", numberStone6 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone6)), (abs(numberStone6) * "")]) * "}}}"), PStone6 + (0, 0.05), false, true, 0, 0) → txtStone6
  41. Text((("\textsf{\bold{\textcolor{white}{" * If[showMinusStone, (If[numberStone7 > 0, "+", numberStone7 ≟ 0, "\phantom{+}", "\(-\)"] * abs(numberStone7)), (abs(numberStone7) * "")]) * "}}}"), PStone7 + (0, 0.05), false, true, 0, 0) → txtStone7
  42. Text((((("\textsf{\bold{" * If[actualTemperature > 0, "+", ""]) * "\(") * actualTemperature) * "\) °C}}"), PosDigitaleAnzeige + (0, 0.05), false, true, 0, 0) → txtDigitaleAnzeige
  43. UnitOrthogonalVector(Segment[PointParkedStones(1), PointZKStones(1)]) → vBogenZK1
  44. CircleArc(Midpoint[Vertex[randStoneParked1(1), 18], Vertex[randStoneZK1(1), 18]] + (0.5 * vBogenZK1), Vertex[randStoneParked1(1), 18], Vertex[randStoneZK1(1), 18]) → bogenZK1
  45. UnitOrthogonalVector(Segment[PointZKStones(4), PointParkedStones(2)]) → vBogenZK2
  46. CircleArc(Midpoint[Vertex[randStoneZK2(1), 54], Vertex[randStoneParked2(1), 54]] + (0.5 * vBogenZK2), Vertex[randStoneZK2(1), 54], Vertex[randStoneParked2(1), 54]) → bogenZK2
  47. Segment(Point[bogenZK1, 1], Point[bogenZK1, 1] - (0.01 * UnitVector[Tangent[Point[bogenZK1, 1], bogenZK1]])) → arrowBogenZK1
  48. Segment(Point[bogenZK2, 1], Point[bogenZK2, 1] - (0.01 * UnitVector[Tangent[Point[bogenZK2, 1], bogenZK2]])) → arrowBogenParked2
  49. Segment(Point[bogenZK2, 0], Point[bogenZK2, 0] + (0.01 * UnitVector[Tangent[Point[bogenZK2, 0], bogenZK2]])) → arrowBogenZK2
  50. Segment(Point[bogenZK1, 0], Point[bogenZK1, 0] + (0.01 * UnitVector[Tangent[Point[bogenZK1, 0], bogenZK1]])) → arrowBogenParked1
  51. Sequence(Random[-20, 20], k, 1, 100) → StartTempList1, {10, -1, 4, 10, 17, -6, -14, 17, 14, 13, -4, 6, -1, -18, -1, 3, 20, 7, -4, 3, -11, -9, 15, -6, 18, -8, 11, 11, 14, -5, 11, 5, -14, -13, 11, 2, 7, -5, -13, -13, 2, 17, 2, 17, -11, -14, -17, 1, 12, 5, 7, 8, -10, -12, 14, 7, -9, 8, -2, 2, 15, 16, -1, 6, -11, -7, 19, 18, 1, 3, 20, -13, 9, 11, -11, -16, -8, 20, 14, 14, 6, 18, 9, -7, -15, 3, -8, -5, -3, -2, 17, -6, 3, 16, -18, 12, 10, -19, -3, 16}
  52. Sequence(Random[-20, 20], k, 1, 100) → StartTempList2, {-7, 14, 20, 4, 5, -9, 5, 8, -2, -14, 5, 3, -5, -9, -1, -9, 13, 17, 5, -10, -20, 10, 1, 6, 11, -10, -15, 20, -14, -20, 5, -4, -19, 15, 12, -8, 16, 18, 17, 17, -13, -9, -4, -6, -15, -16, 12, -17, 16, -1, 19, 3, 4, 20, 14, -9, -18, 6, -9, -3, 10, 9, -3, -19, -9, 4, 11, 3, -5, 12, -10, 7, 14, -17, 0, -8, -3, -7, 0, 20, 12, -11, -7, -2, -18, -4, 0, -14, 1, -17, -16, 5, 20, 20, -11, -9, 8, -11, 10, 4}
  53. Sequence(If[Cases2(k) ∈ {3, 6, 10}, RandomElement[{5, 6}], Cases2(k) ∈ {2, 5, 8, 9}, RandomElement[{4, 5, 6}], RandomElement[{3, 4, 5}]], k, 1, 100) → NumberOfStonesLevel2
  54. If(level ≟ 1, numberOfStones1, numberOfStones2) → numberOfStones
  55. If(level ≟ 1, startTemp1, startTemp2) → startTemp