Expanded Form to Standard Form: Visual Place-Value Decomposition
Loading the math board and drawing, please wait…
This GeoGebra example teaches students to build numbers in expanded form and visually observe how they convert into standard form. It centers on number sense and place value: understanding natural numbers by decomposing digits into the sum of place-value parts (multiplication plus addition) and recognizing the equivalence between expanded notation and standard notation. The construction uses Sequence to generate digit/number data and Take/If to select the needed pieces; Append collects items for the current problem. GeoGebra graphics are assembled with Translate, Segment, Polygon, and Corner, while Sum aggregates computed parts. To reflect changing place values, expandSegment and Dilate scale or extend graphical segments (e.g., bar/segment representations). The example also uses interactive/animated elements such as anim and inputCurrent to drive question generation and display results. Suitable for grades 4–5 and for classroom exploration or guided practice on 3- and 4-digit numbers.
GeoGebra Commands & Parameters
Sequence(Random[0, 99] / 100, A, 1, 200) → allRandomSeeds, {0.93, 0.26, 0.28, 0.23, 0.08, 0.3, 0.76, 0.53, 0.41, 0.37, 0.31, 0.71, 0.85, 0.35, 0.66, 0.41, 0.65, 0.17, 0.37, 0.57, 0.74, 0.39, 0.91, 0.07, 0.41, 0.62, 0.82, 0.7, 0.82, 0.53, 0.27, 0.97, 0.59, 0.8, 0.9, 0.48, 0.27, 0.5, 0.51, 0.69, 0.6, 0.83, 0.21, 0.6, 0.1, 0.36, 0.36, 0.87, 0.18, 0.66, 0.54, 0.28, 0.03, 0.93, 0.78, 0.17, 0.33, 0.66, 0.95, 0.33, 0, 0.07, 0.68, 0.93, 0.59, 0.37, 0.4, 0.78, 0.35, 0.33, 0.6, 0.14, 0.34, 0.72, 0.13, 0.66, 0.82, 0.36, 0.98, 0.82, 0.11, 0.95, 0.39, 0.85, 0.43, 0.98, 0.99, 0.77, 0.18, 0.13, 0.31, 0.51, 0.06, 0.91, 0.71, 0.8, 0.46, 0.76, 0.96, 0.63, 0.44, 0.34, 0.01, 0.58, 0.71, 0.93, 0.67, 0.72, 0.87, 0.4, 0.68, 0.14, 0, 0.01, 0.22, 0.39, 0.94, 0.81, 0.97, 0.15, 0.21, 0.16, 0.51, 0.95, 0.92, 0.36, 0.25, 0.46, 0.99, 0.06, 0.36, 0.87, 0.9, 0.31, 0.98, 0.38, 0.6, 0.8, 0.1, 0.15, 0.66, 0.88, 0.34, 0.07, 0.74, 0.67, 0.16, 0.95, 0.36, 0.92, 0.33, 0.98, 0.41, 0.77, 0.86, 0.98, 0.33, 0.31, 0.29, 0.27, 0.19, 0.66, 0.76, 0.19, 0.73, 0.02, 0.09, 0.79, 0.73, 0.23, 0.15, 0.71, 0.71, 0.72, 0.76, 0.21, 0.68, 0.06, 0.68, 0.8, 0.61, 0.85, 0.53, 0.56, 0.38, 0.31, 0.89, 0.83, 0.47, 0.92, 0.98, 0.75, 0.17, 0.96, 0.02, 0.34, 0.08, 0.56, 0.83, 0.63}Take(allRandomSeeds, randIndex, randIndex + numRandoms - 1) → currentRandomSeedsIf(countQuestion ≟ 0, 4, If[currentRandomSeeds(7) ≥ 0.5, 4, 4]) → numOfDigitsSequence((x(Cor11) + wid / 2 + (ii * (wid + Hspace)), -0.8), ii, 0, numOfDigits - 1) → PosProductsTranslate(PosProducts, (0, -1)) → PosResultsTranslate(PosResults, Vector[(0, 1.6 - 2.5)]) → PosResults'Append(Max[floor((currentRandomSeeds(1) * 10)), 1], Take[Zip[floor((nn * 10)), nn, currentRandomSeeds], 2, numOfDigits]) → digitsCorner(5) → layoutAppSizePolygon(inputPoint, TriA, TriB) → tri, b, inputpoint, aPolygon({(-5, -6.5), (-5, 6.5), (6, 6.5), (6, -6.5)}) → viewboxonboardingTextOffset(Corner[onboardingText, 1], Corner[onboardingText, 3], onboardingCase, Corner[1], Corner[3], Corner[5]) → OnboardingTextOffsetPolygon({(A1, 0), (A1 + 1, 0), (A1 + 1, 1), (A1, 1)}) → B1Polygon({(A2, 0), (A2 + 1, 0), (A2 + 1, 1), (A2, 1)}) → B2Polygon({(A3, 0), (A3 + 1, 0), (A3 + 1, 1), (A3, 1)}) → B3Polygon({(A4, 0), (A4 + 1, 0), (A4 + 1, 1), (A4, 1)}) → B4Polygon({(A5, 0), (A5 + 1, 0), (A5 + 1, 1), (A5, 1)}) → B5Polygon({(A6, 0), (A6 + 1, 0), (A6 + 1, 1), (A6, 1)}) → B6Polygon({(A7, 0), (A7 + 1, 0), (A7 + 1, 1), (A7, 1)}) → B7Translate(B1, Vector[(0, 1)]) → C1Translate(C1, Vector[(0, 1)]) → D1Translate(D1, Vector[(0, 1)]) → E1Translate(E1, Vector[(0, 1)]) → F1Translate(F1, Vector[(0, 1)]) → G1Translate(G1, Vector[(0, 1)]) → H1Translate(H1, Vector[(0, 1)]) → I1Translate(I1, Vector[(0, 1)]) → J1Translate(B2, Vector[(0, 1)]) → C2Translate(C2, Vector[(0, 1)]) → D2Translate(D2, Vector[(0, 1)]) → E2Translate(E2, Vector[(0, 1)]) → F2Translate(F2, Vector[(0, 1)]) → G2Translate(G2, Vector[(0, 1)]) → H2Translate(H2, Vector[(0, 1)]) → I2Translate(I2, Vector[(0, 1)]) → J2Translate(B3, Vector[(0, 1)]) → C3Translate(C3, Vector[(0, 1)]) → D3Translate(D3, Vector[(0, 1)]) → E3Translate(E3, Vector[(0, 1)]) → F3Translate(F3, Vector[(0, 1)]) → G3Translate(G3, Vector[(0, 1)]) → H3Translate(H3, Vector[(0, 1)]) → I3Translate(I3, Vector[(0, 1)]) → J3Translate(B4, Vector[(0, 1)]) → C4Translate(C4, Vector[(0, 1)]) → D4Translate(D4, Vector[(0, 1)]) → E4Translate(E4, Vector[(0, 1)]) → F4Translate(F4, Vector[(0, 1)]) → G4Translate(G4, Vector[(0, 1)]) → H4Translate(H4, Vector[(0, 1)]) → I4Translate(I4, Vector[(0, 1)]) → J4Translate(B5, Vector[(0, 1)]) → C5Translate(C5, Vector[(0, 1)]) → D5Translate(D5, Vector[(0, 1)]) → E5Translate(E5, Vector[(0, 1)]) → F5Translate(F5, Vector[(0, 1)]) → G5Translate(G5, Vector[(0, 1)]) → H5Translate(H5, Vector[(0, 1)]) → I5Translate(I5, Vector[(0, 1)]) → J5Translate(B6, Vector[(0, 1)]) → C6Translate(C6, Vector[(0, 1)]) → D6Translate(D6, Vector[(0, 1)]) → E6Translate(E6, Vector[(0, 1)]) → F6Translate(F6, Vector[(0, 1)]) → G6Translate(G6, Vector[(0, 1)]) → H6Translate(H6, Vector[(0, 1)]) → I6Translate(I6, Vector[(0, 1)]) → J6Translate(B7, Vector[(0, 1)]) → C7Translate(C7, Vector[(0, 1)]) → D7Translate(D7, Vector[(0, 1)]) → E7Translate(E7, Vector[(0, 1)]) → F7Translate(F7, Vector[(0, 1)]) → G7Translate(G7, Vector[(0, 1)]) → H7Translate(H7, Vector[(0, 1)]) → I7Translate(I7, Vector[(0, 1)]) → J7Sequence(Sequence[(x(Cor11) + wid / 2 + (ii * (Hspace + wid)), jj), jj, 0.5, 8.5, 1], ii, 0, numOfDigits - 1) → PosPlacesValues, {{(1.25, 0.5), (1.25, 1.5), (1.25, 2.5), (1.25, 3.5), (1.25, 4.5), (1.25, 5.5), (1.25, 6.5), (1.25, 7.5), (1.25, 8.5)}, {(3.75, 0.5), (3.75, 1.5), (3.75, 2.5), (3.75, 3.5), (3.75, 4.5), (3.75, 5.5), (3.75, 6.5), (3.75, 7.5), (3.75, 8.5)}, {(6.25, 0.5), (6.25, 1.5), (6.25, 2.5), (6.25, 3.5), (6.25, 4.5), (6.25, 5.5), (6.25, 6.5), (6.25, 7.5), (6.25, 8.5)}, {(8.75, 0.5), (8.75, 1.5), (8.75, 2.5), (8.75, 3.5), (8.75, 4.5), (8.75, 5.5), (8.75, 6.5), (8.75, 7.5), (8.75, 8.5)}}Sum(Sequence[(digits(nn) * 10^(numOfDigits - nn)), nn, 1, numOfDigits]) → targetNumberSegment(EPL1, EPR1) → Segment1Segment(EPL2, EPR2) → Segment2Segment(EPL3, EPR3) → Segment3Segment(EPL4, EPR4) → Segment4Segment(EPL5, EPR5) → Segment5Segment(EPL6, EPR6) → Segment6Segment(EPL7, EPR7) → Segment7Polygon(Cor11, Cor12, EPR1, EPL1) → q1, f, g, h, iPolygon(Cor21, Cor22, EPR2, EPL2) → q2, j, k, l, mPolygon(Cor31, Cor32, EPR3, EPL3) → q3, n, p, q, rPolygon(Cor41, Cor42, EPR4, EPL4) → q4, s, t, c, dPolygon(Cor51, Cor52, EPR5, EPL5) → q5, e, f_1, g_1, h_1Polygon(Cor61, Cor62, EPR6, EPL6) → q6, i_1, j_1, k_1, l_1Polygon(Cor71, Cor72, EPR7, EPL7) → q7, m_1, n_1, p_1, q_1Zip(Text[((nn * "\times") * 10^(numOfDigits - ii))], nn, inputCurrent, ii, Sequence[1, numOfDigits]) → ProductsZip(Text[(nn * 10^(numOfDigits - ii))], nn, inputCurrent, ii, Sequence[1, numOfDigits]) → ProductsResultsSequence((5 + ((2.5 * Min[Max[3 - anim, 0.15], 1]) * ii), -2.5), ii, -1, 1) → posInputDigitsTranslate(hGL, Vector[(Vector[Corner[1], Corner[4]] / 500 * 16)]) → hGL'expandSegment(EPL1, EPR1, (7 * pulsing), Corner[1], Corner[3], Corner[5]) → pulsingObject1expandSegment(EPL2, EPR2, (7 * pulsing), Corner[1], Corner[3], Corner[5]) → pulsingObject2expandSegment(EPL3, EPR3, (7 * pulsing), Corner[1], Corner[3], Corner[5]) → pulsingObject3expandSegment(EPL4, EPR4, (7 * pulsing), Corner[1], Corner[3], Corner[5]) → pulsingObject4Take(Zip[Midpoint[PP, QQ], PP, PosResults, QQ, Take[PosResults, 2]], 1, numOfDigits - 1) → posPlusSignsZip(Text["+", PP, true, true, 0, 0], PP, posPlusSigns) → plusSignsZip(Polygon[{PP, PP + (wid, 0), PP + (wid, dd), PP + (0, dd)}], PP, Corners, dd, digits) → polySolZip(((dd * "\times") * 10^(nn)), dd, digits, nn, Reverse[Sequence[0, numOfDigits - 1]]) → tableSolSequence(Zip[Text[10^(abs(numOfDigits - ii)), PP, true, true, 0, 0], PP, Element[PosPlacesValues, ii]], ii, 1, numOfDigits) → PlacesValuesSequence(Polygon[{Cor11 + (0, ii), Cor12 + (0, ii), Cor12 + (0, ii + 1), Cor11 + (0, ii + 1)}], ii, 0, 8) → l1Sequence(Polygon[{Cor21 + (0, ii), Cor22 + (0, ii), Cor22 + (0, ii + 1), Cor21 + (0, ii + 1)}], ii, 0, 8) → l2Sequence(Polygon[{Cor31 + (0, ii), Cor32 + (0, ii), Cor32 + (0, ii + 1), Cor31 + (0, ii + 1)}], ii, 0, 8) → l3Sequence(Polygon[{Cor41 + (0, ii), Cor42 + (0, ii), Cor42 + (0, ii + 1), Cor41 + (0, ii + 1)}], ii, 0, 8) → l4Translate(PosProducts, (0, -3.5)) → PosProducts'Zip(Text[tt, PP, true, true, 0, 0], tt, tableSol, PP, PosProducts') → l5Zip(Text["+", PP, true, true, 0, 0], PP, Zip[Midpoint[QQ, RR], QQ, PosProducts', RR, Take[PosProducts', 2]]) → l6Take(Zip[Text[(((("\textcolor{" * col) * "}{") * tt) * "}"), PP, true, true, 0, 0], tt, ProductsResults, PP, PosResults, col, colors], 1, Min[((anim - 1) * 22), numOfDigits]) → ResultsPositionedZip(Text[(((("\textcolor{" * col) * "}{") * tt) * "}"), pp, true, true, 0, 0], tt, Products, pp, PosProducts, col, colors) → ProductsPosDilate(PosResults', Min[Max[3 - anim, 0.1], 1], (5, -3)) → PosResults''Sum(Zip[(nn * 10^(ii)), nn, inputCurrent, ii, Reverse[Sequence[0, 3]]]) → numberCreatedIf(numberCreated ≤ 9, 4, If[numberCreated ≤ 99, 3, If[numberCreated ≤ 999, 2, 1]]) → startTake(Zip[Text[(((("\textcolor{" * col) * "}{") * tt) * "}"), PP, true, true, 0, 0], tt, inputCurrent, PP, PosResults'', col, colors], start) → inputDigits
AI Drawing Prompt Reference
Create a classroom-style visual with a central triangular figure and a structured stack of identical small rectangular blocks beneath it. Draw one triangle from three vertices, then use a second positioning step to shift the same triangle/related layout upward so it visually corresponds to the decomposed parts. Build the lower base by placing several unit-height rectangles in a row at fixed x-positions, then produce additional layers by repeatedly translating the row upward to form multiple stacked levels. Include an overall framing view boundary and a small layout anchor at a corner, and place an instruction text near the corner region to guide the place-value decomposition-to-standard-form idea.
The prompt above was compiled from the original drawing commands and is for reference only.