Subtracting Numbers with Regrouping Using Models
Loading the math board and drawing, please wait…
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
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}Take(allRandomSeeds, randIndex, randIndex + numRandoms - 1) → currentRandomSeedsFlatten(Sequence[Sequence[AnchorUnits + (3.5, 0) + (((i * 0.2) * blockWidth), ((j * 0.2) * blockWidth)), i, 0, 2], j, 0, 2]) → unitAnchorsSequence(AnchorHundreds + (1, 0) + (((i * 1.2) * blockWidth), 0), i, 2, 0, -1) → hundredAnchorsTableText({"\textcolor{#0F8538}{Hundreds}", "\textcolor{#5145A8}{Tens}", "\textcolor{#C75000}{Ones}"}, {"\hspace{250px}", "\hspace{55px}", "\hspace{105px}"}, "c") → backTableElement(Sequence[0, numHundredsA - 1], indexHundredsB) → numHundredsBMax(numTensTemp1, numTensTemp2) → numTensBIf(numTensTemp1 ≟ numTensTemp2, numTensTemp1 - 1, Min[numTensTemp1, numTensTemp2]) → numTensASequence(AnchorTens + (1, 0) + ((((A - 1) * 2) * blockWidth / 10), 0), A, 1, 9) → tensAnchorsSequence(cornerBox[blockWidth, blockWidth, hundredAnchors(A) + num2Offset], A, 1, numHundredsB) → hundredsBSequence(cornerBox[blockWidth / 10, blockWidth / 10, unitAnchors(A)], A, 1, numUnitsA) → unitsASequence(cornerBox[blockWidth / 10, blockWidth / 10, unitAnchors(A) + num2Offset], A, 1, numUnitsB) → unitsBPolygon({AnchorHundreds + (0, -13), AnchorTens + (0, -13), AnchorTens + (0, 23), AnchorHundreds + (0, 23)}) → hundredsBackgroundPolygon({AnchorTens + (0, -13), AnchorUnits + (0, -13), AnchorUnits + (0, 23), AnchorTens + (0, 23)}) → tensBackgroundPolygon({AnchorUnits + (0, -13), AnchorUnits + (9.4, -13), AnchorUnits + (9.4, 23), AnchorUnits + (0, 23)}) → unitsBackgroundIf(numUnitsA ≥ numUnitsB, numTensA, numTensA - 1) → numTensAfterCarrySequence(tensAnchors(1) + ((2 * (i - 1)), If[numTensA ≟ 0, 0, 11.2]), i, 1, 10) → borrowAnchorTensSequence(Vector[AnchorTens + (A - 1, 11), borrowAnchorTens(A)], A, 1, 10) → vMoveBorrowHundredsIf(animateBorrowHundredControl < 1, animateBorrowHundredControl, 1) → animateBorrowHundredASequence(cornerBox[blockWidth / 10, blockWidth, tensAnchors(A) + num2Offset], A, 1, numTensB) → tensBIf(numTensA ≥ numTensB, numHundredsA, numHundredsA - 1) → numHundredsAfterCarrySequence(cornerBox[blockWidth, blockWidth, hundredAnchors(A)], A, 1, If[animateBorrowHundredA > 0, numHundredsAfterCarry, numHundredsA]) → hundredsASegment((-0.3, -0.3), (1.3, 1.3)) → slashUnitIf(animateSubtractUnitsControl < 1, animateSubtractUnitsControl, 1) → animateCancelUnitsIf(borrowTens, Join[{Take[tensAnchors, 1, numTensA + If[borrowUnits, -1, 0]], borrowAnchorTens}], tensAnchors) → tensAnchorCurrentSequence(AnchorUnits + (1, ((1.5 * A) * blockWidth / 10)), A, 0, 9) → borrowAnchorUnitsSequence(Vector[AnchorUnits + (0, A - 1), borrowAnchorUnits(A)], A, 1, 10) → vMoveBorrowTensIf(borrowUnits, Join[{Take[unitAnchors, 1, numUnitsA], borrowAnchorUnits}], Reverse[Take[unitAnchors, 1, numUnitsA]]) → unitsAnchorCurrentSequence(Translate[slashUnit, unitAnchors(A) + num2Offset], A, 1, Min[(animateCancelUnits * 10), numUnitsB]) → slashUnitsBIf(animateSubtractUnitsControl < 1, 0, animateSubtractUnitsControl - 1) → animateShowUnitAnswerTranslate(unitAnchors, Vector[(2 * num2Offset)]) → unitAnchorsSolnTranslate(tensAnchors, Vector[(2 * num2Offset)]) → tenAnchorsSolnTranslate(hundredAnchors, Vector[(2 * num2Offset)]) → hundredsAnchorsSolnIf(borrowUnits, Take[unitsAnchorCurrent, numUnitsB + 1, numUnitsSoln + numUnitsB], Reverse[Take[unitsAnchorCurrent, numUnitsB + 1, numUnitsSoln + numUnitsB]]) → moveUnitsStartZip(cornerBox[blockWidth / 10, blockWidth / 10, A + (animateShowUnitAnswer * (B - A))], A, moveUnitsStart, B, unitAnchorsSoln) → movingSolnUnitsTake(tensAnchorCurrent, numTensB + 1, numTensSoln + numTensB) → movingTensStartMax(0, animateSubtractTensControl - 1) → animateShowTensAnswerZip(cornerBox[blockWidth / 10, blockWidth, A + (animateShowTensAnswer * (B - A))], A, movingTensStart, B, tenAnchorsSoln) → movingSolnTensIf(animateSubtractHundredsControl < 1, 0, animateSubtractHundredsControl - 1) → animateShowHundredsAnswerTake(hundredAnchors, 1, numHundredsSoln) → movingHundredsStartZip(cornerBox[blockWidth, blockWidth, A + (animateShowHundredsAnswer * (B - A))], B, hundredsAnchorsSoln, A, movingHundredsStart) → movingSolnHundredsMin(animateSubtractTensControl, 1) → animateCancelTenMax(0, animateSubtractHundredsControl - 1) → animateCancelHundredSegment((-0.4, -0.4), (1.4, 10.4)) → slashTenSegment((-0.5, -0.5), (10.5, 10.5)) → slashHundredTemplateSequence(Translate[slashTen, tensAnchors(A) + num2Offset], A, 1, Min[(animateCancelTen * 10), numTensB]) → slashTensBSequence(Translate[slashTen, tensAnchorCurrent(A)], A, 1, Min[(animateCancelTen * 10), numTensB]) → slashTensIf(animateBorrowTenControl < 1, animateBorrowTenControl, 1) → animateBorrowTenATranslate(cornerBox[blockWidth / 10, blockWidth, tensAnchors(numTensA)], (animateBorrowTenA * (AnchorUnits - tensAnchors(numTensA)))) → borrowTenAIf(animateBorrowTenControl < 1, 0, animateBorrowTenControl - 1) → animateBorrowTenBZip(cornerBox[blockWidth / 10, blockWidth / 10, AnchorUnits + (0, B) + (animateBorrowTenB * A)], Vector[A], vMoveBorrowTens, B, Sequence[K, K, 0, 9]) → borrowTenBIf(animateBorrowTenControl ≟ 0, numTensA, numTensAfterCarry) → numTensCurrentSequence(cornerBox[blockWidth / 10, blockWidth, tensAnchors(A)], A, 1, numTensCurrent) → tensAcornerBox(blockWidth, blockWidth, hundredAnchors(numHundredsA) + (animateBorrowHundredA * (AnchorTens + (0, 11) - hundredAnchors(numHundredsA)))) → borrowHundredAMax(0, animateBorrowHundredControl - 1) → animateBorrowHundredBSequence(cornerBox[blockWidth / 10, blockWidth, AnchorTens + (A - 1, 11) + (animateBorrowHundredB * vMoveBorrowHundreds(A))], A, 1, 10) → borrowHundredBTranslate(slashHundredTemplate, hundredAnchors(If[borrowTens, numHundredsA - 1, numHundredsA])) → slashHundredsASegment((68, -13), (100, -13)) → lineDisplayTranslate(slashHundredTemplate, hundredAnchors(numHundredsB) + num2Offset) → slashHundredsBFlatten(Sequence[Sequence[Anchor + (i, (-j)), i, 0, 27, 8], j, 0, 12, 12]) → digitAnchorsZip(Text[A, B, false, true, 1, 0], A, {"", If[numHundredsA ≟ 0, "", ("" * numHundredsA)], ("" * numTensA), ("" * numUnitsA), "\minus", If[numHundredsB > 0, ("" * numHundredsB), ""], ("" * numTensB), ("" * numUnitsB)}, B, Flatten[digitAnchors]) → digitsLatexMin(floor((animateCancelUnits * 10)), numUnitsB) → numSlashesSequence(Translate[slashUnit, unitsAnchorCurrent(A)], A, 1, numSlashes) → slashUnitsFlatten({hundredsA, hundredsB}) → frameHundredsFlatten({unitsA, unitsB}) → frameUnitsFlatten({tensA, tensB}) → frameTensSegment((0, -1), (x(Vertex[unitsBackground, 2]), -1)) → divisionLineText((("\textcolor{#5145A8}{" * numTensSoln) * "}"), digitAnchors(7) + (0, -15), false, true, 1, 0) → digitTensAnswerText(("" * numUnitsSoln), digitAnchors(8) + (0, -15), false, true, 1, 0) → digitUnitsAnswerText(("" * 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.