Subtracting Numbers with Regrouping Using Models

Subtracting Numbers with Regrouping Using Models
Loading the math board and drawing, please wait…
2023-06-26 05:40
This example demonstrates subtraction using virtual base ten blocks to visualize the borrowing process in subtraction. The key mathematical concepts involve subtracting two- and three-digit numbers with regrouping. Construction uses GeoGebra commands like RandomUniform, Take, Flatten, Sequence, and TableText to dynamically show the subtraction steps. Suitable for students in grades 4-5 for learning and practicing subtraction with regrouping.

GeoGebra Commands & Parameters

  1. RandomUniform(0, 0.99, 200) → allRandomSeeds, {0.5906110323826387, 0.7268080374522716, 0.9118709155069585, 0.41451620065255607, 0.2029124621893124, 0.20099460133452454, 0.039512456433051645, 0.9366424573364799, 0.005443811026513574, 0.8841095329425244, 0.0622292325219573, 0.9505876951206025, 0.9103636841153411, 0.30686535727297215, 0.17934520755763977, 0.008786771617779156, 0.6665336091838664, 0.2477791316087306, 0.5672546434554852, 0.05827575401366608, 0.6432132755151814, 0.6417480155756566, 0.9586718306589629, 0.6319580632234549, 0.34995359595505127, 0.2554711160205048, 0.01758582844139282, 0.9436547896099483, 0.3012014135137204, 0.6197919355569738, 0.027550544607891924, 0.07171534231399412, 0.4844719825128846, 0.2199242593818139, 0.6992509442554742, 0.08357236010481385, 0.5947243387299566, 0.04635042997587192, 0.9100342356061775, 0.45716942703668395, 0.15479142533658363, 0.5019447425846038, 0.10328075876122708, 0.7346726042459282, 0.26237152389056534, 0.8545756148415754, 0.8991116285837103, 0.02929691816031092, 0.22817883927855834, 0.08907946598518555, 0.8099916406942561, 0.7474361451356991, 0.4073807008184468, 0.5580744212143193, 0.045283146764376996, 0.5855791816811685, 0.7474156180473288, 0.5875967671267206, 0.6777428906534005, 0.4147287962056228, 0.19969048706092166, 0.4409933352740622, 0.21232611676233018, 0.7442085931121704, 0.7204975110182437, 0.17289197237936524, 0.7434734781885358, 0.10185093398638433, 0.1277700768194435, 0.2743989350450953, 0.051303921249931286, 0.33860428610275245, 0.7750141760834934, 0.8909346240716955, 0.17982235368191637, 0.2225800403280334, 0.5219059956081146, 0.1053213401089486, 0.9013739557132049, 0.9104794894516411, 0.48263795987216496, 0.4808748774696457, 0.3711376285713273, 0.5331984926002564, 0.14812536117464575, 0.21232776808678505, 0.2634489101992408, 0.3872027320405448, 0.22665162263276126, 0.5264262115956458, 0.8181786672186397, 0.9139986250822033, 0.9094355099656283, 0.46899349862555567, 0.23026613668240953, 0.07669496287047152, 0.9029446845022044, 0.6211413950385858, 0.5188163913481142, 0.11525759001245102, 0.1885594980544305, 0.6041373870365785, 0.09391976309924858, 0.7806049763698527, 0.9324080883255239, 0.9501991974228037, 0.8995360395120632, 0.08217381285024515, 0.1338473284375126, 0.12518898491035027, 0.019410381063559436, 0.7140051680279507, 0.21015690738276852, 0.29881888357569814, 0.6800471588069104, 0.9507576070989755, 0.07754246524999679, 0.8785547122753187, 0.3502667691575514, 0.2473499146337571, 0.07451065304192554, 0.5049197081473977, 0.030805860537259103, 0.7641677948755503, 0.8930834941823592, 0.6183498952139547, 0.16979439767375076, 0.9139386263020863, 0.5061610213355061, 0.9011425436110574, 0.9407534163239005, 0.346486817439801, 0.8456203790079607, 0.8523644159229216, 0.9690056266440742, 0.23362578669529319, 0.9654567588728524, 0.1988509700383363, 0.8600764402595459, 0.15842633676515536, 0.357425225135805, 0.011628383446564378, 0.7297859373466693, 0.9810201982720398, 0.6332350961538609, 0.7442288046810577, 0.690293065531578, 0.9569554951934933, 0.6873769927221677, 0.657445992506782, 0.6093511902637462, 0.3139154318003273, 0.008129908141038646, 0.4240915103947274, 0.9214698079099953, 0.5283442251873862, 0.5812002399052042, 0.2872636024786896, 0.12955031606567452, 0.6551939403766803, 0.1207856739757746, 0.3165283797980887, 0.5538739154518104, 0.7916135918207666, 0.1466370805335619, 0.8882404916020484, 0.5820684694749446, 0.31894662328253603, 0.8229075358411615, 0.98899301534121, 0.8188658156832515, 0.2168853313629093, 0.665232518089929, 0.3648882373410539, 0.9680849566962954, 0.32905060233879, 0.8465766837548219, 0.19395896529591353, 0.12133631946560752, 0.21062312180237944, 0.189912362308768, 0.49464696407628445, 0.7384409146340812, 0.7659467379269319, 0.5967610048664085, 0.009757984208515657, 0.5334933624557894, 0.9072572397166687, 0.8650340303345876, 0.972764814725517, 0.08787123698505554, 0.8148597137223978, 0.9674506002230482, 0.041717770452611554, 0.877302965495666, 0.6641852499752987, 0.5930892692702819, 0.8353485112973998, 0.6843556737951144, 0.10620232794969511}
  2. Take(allRandomSeeds, randIndex, randIndex + numRandoms - 1) → currentRandomSeeds
  3. Flatten(Sequence[Sequence[AnchorUnits + (3.5, 0) + (((i * 0.2) * blockWidth), ((j * 0.2) * blockWidth)), i, 0, 2], j, 0, 2]) → unitAnchors
  4. Sequence(AnchorHundreds + (1, 0) + (((i * 1.2) * blockWidth), 0), i, 2, 0, -1) → hundredAnchors
  5. TableText({"\textcolor{#0F8538}{Hundreds}", "\textcolor{#5145A8}{Tens}", "\textcolor{#C75000}{Ones}"}, {"\hspace{250px}", "\hspace{55px}", "\hspace{105px}"}, "c") → backTable
  6. Element(Sequence[0, numHundredsA - 1], indexHundredsB) → numHundredsB
  7. Max(numTensTemp1, numTensTemp2) → numTensB
  8. If(numTensTemp1 ≟ numTensTemp2, numTensTemp1 - 1, Min[numTensTemp1, numTensTemp2]) → numTensA
  9. Sequence(AnchorTens + (1, 0) + ((((A - 1) * 2) * blockWidth / 10), 0), A, 1, 9) → tensAnchors
  10. Sequence(cornerBox[blockWidth, blockWidth, hundredAnchors(A) + num2Offset], A, 1, numHundredsB) → hundredsB
  11. Sequence(cornerBox[blockWidth / 10, blockWidth / 10, unitAnchors(A)], A, 1, numUnitsA) → unitsA
  12. Sequence(cornerBox[blockWidth / 10, blockWidth / 10, unitAnchors(A) + num2Offset], A, 1, numUnitsB) → unitsB
  13. Polygon({AnchorHundreds + (0, -13), AnchorTens + (0, -13), AnchorTens + (0, 23), AnchorHundreds + (0, 23)}) → hundredsBackground
  14. Polygon({AnchorTens + (0, -13), AnchorUnits + (0, -13), AnchorUnits + (0, 23), AnchorTens + (0, 23)}) → tensBackground
  15. Polygon({AnchorUnits + (0, -13), AnchorUnits + (9.4, -13), AnchorUnits + (9.4, 23), AnchorUnits + (0, 23)}) → unitsBackground
  16. If(numUnitsA ≥ numUnitsB, numTensA, numTensA - 1) → numTensAfterCarry
  17. Sequence(tensAnchors(1) + ((2 * (i - 1)), If[numTensA ≟ 0, 0, 11.2]), i, 1, 10) → borrowAnchorTens
  18. Sequence(Vector[AnchorTens + (A - 1, 11), borrowAnchorTens(A)], A, 1, 10) → vMoveBorrowHundreds
  19. If(animateBorrowHundredControl < 1, animateBorrowHundredControl, 1) → animateBorrowHundredA
  20. Sequence(cornerBox[blockWidth / 10, blockWidth, tensAnchors(A) + num2Offset], A, 1, numTensB) → tensB
  21. If(numTensA ≥ numTensB, numHundredsA, numHundredsA - 1) → numHundredsAfterCarry
  22. Sequence(cornerBox[blockWidth, blockWidth, hundredAnchors(A)], A, 1, If[animateBorrowHundredA > 0, numHundredsAfterCarry, numHundredsA]) → hundredsA
  23. Segment((-0.3, -0.3), (1.3, 1.3)) → slashUnit
  24. If(animateSubtractUnitsControl < 1, animateSubtractUnitsControl, 1) → animateCancelUnits
  25. If(borrowTens, Join[{Take[tensAnchors, 1, numTensA + If[borrowUnits, -1, 0]], borrowAnchorTens}], tensAnchors) → tensAnchorCurrent
  26. Sequence(AnchorUnits + (1, ((1.5 * A) * blockWidth / 10)), A, 0, 9) → borrowAnchorUnits
  27. Sequence(Vector[AnchorUnits + (0, A - 1), borrowAnchorUnits(A)], A, 1, 10) → vMoveBorrowTens
  28. If(borrowUnits, Join[{Take[unitAnchors, 1, numUnitsA], borrowAnchorUnits}], Reverse[Take[unitAnchors, 1, numUnitsA]]) → unitsAnchorCurrent
  29. Sequence(Translate[slashUnit, unitAnchors(A) + num2Offset], A, 1, Min[(animateCancelUnits * 10), numUnitsB]) → slashUnitsB
  30. If(animateSubtractUnitsControl < 1, 0, animateSubtractUnitsControl - 1) → animateShowUnitAnswer
  31. Translate(unitAnchors, Vector[(2 * num2Offset)]) → unitAnchorsSoln
  32. Translate(tensAnchors, Vector[(2 * num2Offset)]) → tenAnchorsSoln
  33. Translate(hundredAnchors, Vector[(2 * num2Offset)]) → hundredsAnchorsSoln
  34. If(borrowUnits, Take[unitsAnchorCurrent, numUnitsB + 1, numUnitsSoln + numUnitsB], Reverse[Take[unitsAnchorCurrent, numUnitsB + 1, numUnitsSoln + numUnitsB]]) → moveUnitsStart
  35. Zip(cornerBox[blockWidth / 10, blockWidth / 10, A + (animateShowUnitAnswer * (B - A))], A, moveUnitsStart, B, unitAnchorsSoln) → movingSolnUnits
  36. Take(tensAnchorCurrent, numTensB + 1, numTensSoln + numTensB) → movingTensStart
  37. Max(0, animateSubtractTensControl - 1) → animateShowTensAnswer
  38. Zip(cornerBox[blockWidth / 10, blockWidth, A + (animateShowTensAnswer * (B - A))], A, movingTensStart, B, tenAnchorsSoln) → movingSolnTens
  39. If(animateSubtractHundredsControl < 1, 0, animateSubtractHundredsControl - 1) → animateShowHundredsAnswer
  40. Take(hundredAnchors, 1, numHundredsSoln) → movingHundredsStart
  41. Zip(cornerBox[blockWidth, blockWidth, A + (animateShowHundredsAnswer * (B - A))], B, hundredsAnchorsSoln, A, movingHundredsStart) → movingSolnHundreds
  42. Min(animateSubtractTensControl, 1) → animateCancelTen
  43. Max(0, animateSubtractHundredsControl - 1) → animateCancelHundred
  44. Segment((-0.4, -0.4), (1.4, 10.4)) → slashTen
  45. Segment((-0.5, -0.5), (10.5, 10.5)) → slashHundredTemplate
  46. Sequence(Translate[slashTen, tensAnchors(A) + num2Offset], A, 1, Min[(animateCancelTen * 10), numTensB]) → slashTensB
  47. Sequence(Translate[slashTen, tensAnchorCurrent(A)], A, 1, Min[(animateCancelTen * 10), numTensB]) → slashTens
  48. If(animateBorrowTenControl < 1, animateBorrowTenControl, 1) → animateBorrowTenA
  49. Translate(cornerBox[blockWidth / 10, blockWidth, tensAnchors(numTensA)], (animateBorrowTenA * (AnchorUnits - tensAnchors(numTensA)))) → borrowTenA
  50. If(animateBorrowTenControl < 1, 0, animateBorrowTenControl - 1) → animateBorrowTenB
  51. Zip(cornerBox[blockWidth / 10, blockWidth / 10, AnchorUnits + (0, B) + (animateBorrowTenB * A)], Vector[A], vMoveBorrowTens, B, Sequence[K, K, 0, 9]) → borrowTenB
  52. If(animateBorrowTenControl ≟ 0, numTensA, numTensAfterCarry) → numTensCurrent
  53. Sequence(cornerBox[blockWidth / 10, blockWidth, tensAnchors(A)], A, 1, numTensCurrent) → tensA
  54. cornerBox(blockWidth, blockWidth, hundredAnchors(numHundredsA) + (animateBorrowHundredA * (AnchorTens + (0, 11) - hundredAnchors(numHundredsA)))) → borrowHundredA
  55. Max(0, animateBorrowHundredControl - 1) → animateBorrowHundredB
  56. Sequence(cornerBox[blockWidth / 10, blockWidth, AnchorTens + (A - 1, 11) + (animateBorrowHundredB * vMoveBorrowHundreds(A))], A, 1, 10) → borrowHundredB
  57. Translate(slashHundredTemplate, hundredAnchors(If[borrowTens, numHundredsA - 1, numHundredsA])) → slashHundredsA
  58. Segment((68, -13), (100, -13)) → lineDisplay
  59. Translate(slashHundredTemplate, hundredAnchors(numHundredsB) + num2Offset) → slashHundredsB
  60. Flatten(Sequence[Sequence[Anchor + (i, (-j)), i, 0, 27, 8], j, 0, 12, 12]) → digitAnchors
  61. Zip(Text[A, B, false, true, 1, 0], A, {"", If[numHundredsA ≟ 0, "", ("" * numHundredsA)], ("" * numTensA), ("" * numUnitsA), "\minus", If[numHundredsB > 0, ("" * numHundredsB), ""], ("" * numTensB), ("" * numUnitsB)}, B, Flatten[digitAnchors]) → digitsLatex
  62. Min(floor((animateCancelUnits * 10)), numUnitsB) → numSlashes
  63. Sequence(Translate[slashUnit, unitsAnchorCurrent(A)], A, 1, numSlashes) → slashUnits
  64. Flatten({hundredsA, hundredsB}) → frameHundreds
  65. Flatten({unitsA, unitsB}) → frameUnits
  66. Flatten({tensA, tensB}) → frameTens
  67. Segment((0, -1), (x(Vertex[unitsBackground, 2]), -1)) → divisionLine
  68. Text((("\textcolor{#5145A8}{" * numTensSoln) * "}"), digitAnchors(7) + (0, -15), false, true, 1, 0) → digitTensAnswer
  69. Text(("" * numUnitsSoln), digitAnchors(8) + (0, -15), false, true, 1, 0) → digitUnitsAnswer
  70. Text(("" * numHundredsSoln), digitAnchors(6) + (0, -15), false, true, 1, 0) → digitHundredsAnswer

AI Drawing Prompt Reference

Visualize subtracting two- and three-digit numbers with regrouping using virtual base ten blocks. The background is divided into hundreds, tens, and ones sections with corresponding blocks. When the ones place cannot subtract, it borrows from the tens place, and the tens place borrows from the hundreds place, shown by arrows and moving blocks. Finally, display the subtraction result, including the hundreds, tens, and ones blocks, as well as the minus and equals signs in the middle.
The prompt above was compiled from the original drawing commands and is for reference only.