Visual Fraction Addition Practice

Visual Fraction Addition Practice
Loading the math board and drawing, please wait…
2022-07-11 17:22
This interactive GeoGebra material helps students master fraction addition through diagrams. The core mathematical concept is adding fractions with different denominators, requiring finding common denominators first. Construction uses Circle for unit circles and sectors to represent fractions, Polygon for bar charts, Segment and Translate for animated bar and line movements, Sequence and Shuffle to generate random fraction problems, InputBox for student answers, and If/Element for answer checking. Designed for grades 5-6, suitable for classroom practice or homework reinforcement, helping students intuitively understand the reasoning behind fraction addition.

GeoGebra Commands & Parameters

  1. Shuffle(Sequence[Random[2, 12], i, 1, 100]) → randomNosForNenner, {10, 9, 9, 3, 10, 4, 12, 5, 7, 7, 9, 3, 8, 9, 3, 5, 7, 7, 9, 9, 4, 9, 3, 6, 12, 4, 6, 9, 12, 12, 4, 7, 7, 10, 10, 7, 3, 6, 11, 9, 5, 9, 6, 2, 6, 6, 12, 4, 5, 11, 8, 11, 11, 4, 6, 9, 11, 11, 8, 6, 3, 11, 12, 10, 7, 12, 7, 2, 3, 6, 7, 4, 11, 12, 4, 2, 5, 5, 11, 9, 8, 8, 7, 4, 8, 12, 6, 3, 11, 4, 3, 3, 2, 7, 10, 4, 4, 9, 4, 9}
  2. If(questionCount ≟ 0, 6, Element[randomNosForNenner, Mod[questionCount, 100] + 1]) → nenner2
  3. Shuffle(Sequence[Random[1, nenner2 - 1], i, 1, 100]) → randomNosForZaehler2, {2, 3, 8, 1, 4, 8, 1, 6, 7, 8, 6, 7, 6, 6, 5, 7, 7, 3, 8, 4, 4, 8, 8, 3, 2, 7, 1, 4, 2, 3, 6, 4, 6, 8, 4, 6, 4, 8, 4, 6, 7, 4, 2, 5, 4, 8, 6, 6, 5, 6, 8, 8, 1, 8, 1, 1, 6, 1, 5, 1, 2, 3, 2, 2, 1, 2, 5, 2, 7, 8, 8, 2, 6, 7, 3, 1, 3, 2, 8, 5, 3, 6, 1, 2, 5, 3, 7, 3, 2, 2, 2, 3, 2, 3, 6, 7, 7, 3, 8, 8}
  4. If(questionCount ≟ 0, 3, Element[randomNosForZaehler2, Mod[questionCount, 100] + 1]) → zaehler2
  5. Shuffle(Sequence[Random[1, nenner2 - zaehler2], i, 1, 100]) → randomNosForZaehler3, {3, 3, 1, 3, 1, 3, 3, 4, 2, 3, 3, 4, 5, 3, 6, 6, 3, 6, 1, 4, 1, 1, 1, 1, 4, 6, 1, 4, 5, 3, 2, 6, 5, 3, 2, 2, 6, 5, 2, 6, 3, 3, 4, 5, 6, 5, 5, 3, 2, 4, 1, 2, 5, 2, 6, 1, 1, 6, 5, 2, 1, 3, 2, 3, 2, 6, 2, 6, 2, 4, 4, 3, 2, 5, 2, 3, 1, 6, 6, 6, 4, 1, 5, 4, 4, 4, 1, 5, 4, 2, 2, 1, 4, 6, 5, 1, 5, 3, 5, 1}
  6. If(questionCount ≟ 0, 2, If[nenner2 ≟ zaehler2, 0, Element[randomNosForZaehler3, Mod[questionCount, 100] + 1]]) → zaehler3
  7. Element(randomNosForZaehler3, Mod[questionCount, 100] + 1) → numY
  8. Element(randomNosForZaehler2, Mod[questionCount, 100] + 1) → numX
  9. If(isOne ≠ 1, aInput / bInput ≟ (zaehler2 + zaehler3) / nenner2, aInput ≟ za ∧ bInput ≟ nenner2) → corrErwGek
  10. If(SelectedElement[types] ≟ types(1), schiebeSectors1 ≠ 0 ∧ schiebeSectors2 ≠ 0, If[SelectedElement[types] ≟ types(2), schiebeStrecke1 ≠ 0 ∧ schiebeStrecke2 ≠ 0, If[SelectedElement[types] ≟ types(3), schiebeBalken1 ≠ 0 ∧ schiebeBalken2 ≠ 0]]) → fixedAlt
  11. Circle(A_1, C) → d
  12. Sequence(CircleSector[A_1, Rotate[K, (((-(i + 1)) * 2) * pi / nenner2), A_1], Rotate[K, (((-i) * 2) * pi / nenner2) - 0.0001, A_1]], i, 0, zaehler3 - 1) → sectors2
  13. Textfield(aInput) → InputBox1
  14. Textfield(bInput) → InputBox2
  15. Sequence(I + ((i * widthNennerBar / 12) * (1, 0)), i, 1, 12) → allowedPositionsNennerBar
  16. Point(allowedPositionsNennerBar) → PNenner
  17. Sequence(H_1 + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → allowedPositionsZaehlerBar1
  18. Point(allowedPositionsZaehlerBar1) → PZaehler1
  19. Sequence(H + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → allowedPositionsZaehlerBar
  20. Point(allowedPositionsZaehlerBar) → PZaehler
  21. Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, -4, zaehler2, 0.5) → listeEx1
  22. If(isOne ≟ 1, (correct1 ∧ correct2 ∨ corrErwGek) ∧ ganzesInput ≟ 1, correct1 ∧ correct2 ∨ corrErwGek) → correct
  23. Polygon(PtopLeftCornerFeedback, PtopRightCornerFeedback, PbottomRightCornerFeedback, PbottomLeftCornerFeedback) → rectangleCorrect, ptopleftcornerfeedback, ptoprightcornerfeedback, pbottomrightcornerfeedback, pbottomleftcornerfeedback
  24. Append(true, Sequence[If[randomNosForZaehler2(i) ≟ randomNosForZaehler2(i - 1), false, true], i, 2, 100]) → stayX
  25. Append(true, Sequence[If[randomNosForZaehler3(i) ≟ randomNosForZaehler3(i - 1), false, true], i, 2, 100]) → stayY
  26. Remove(Sequence[If[stayX(i), randomNosForZaehler2(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForXwithoutRepeat
  27. Remove(Sequence[If[stayY(i), randomNosForZaehler3(i), 0], i, 1, 100], Sequence[0, i, 1, 100]) → randomNosForYwithoutRepeat
  28. Element(randomNosForXwithoutRepeat, Mod[questionCount, Length[randomNosForXwithoutRepeat]] + 1) → numXwithoutRepeat
  29. Element(randomNosForYwithoutRepeat, Mod[questionCount, Length[randomNosForYwithoutRepeat]] + 1) → numYwithoutRepeat
  30. Circle(A, B) → c
  31. Segment(A, A + (Radius[c] * (0, 1))) → g
  32. Segment(I, I + (widthNennerBar * (1, 0))) → h
  33. Segment(H, H + (widthZaehlerBar * (1, 0))) → i
  34. Segment(H_1, H_1 + (widthZaehlerBar * (1, 0))) → j
  35. Sequence(Rotate[g, ((i * 2) * pi / nenner2), A], i, 0, nenner2 - 1) → StrechenLeftKreis
  36. Circle(A_2, D) → e
  37. Segment(A_1, A_1 + (Radius[d] * (0, 1))) → k
  38. Segment(A_2, A_2 + (Radius[e] * (0, 1))) → l
  39. Sequence(Rotate[k, ((i * 2) * pi / nenner2), A_1], i, 0, nenner2 - 1) → StreckenKreisMitte
  40. Sequence(Rotate[l, ((i * 2) * pi / nenner2), A_2], i, 0, nenner2 - 1) → StreckenKreisRechts
  41. Sequence(CircleSector[A, Rotate[KreisOben, (((-(i + 1)) * 2) * pi / nenner2), A], Rotate[KreisOben, (((-i) * 2) * pi / nenner2) - 0.0001, A]], i, 0, zaehler2 - 1) → sectors1
  42. Sequence(CircleSector[A_2, Rotate[J, (((-(i + 1)) * 2) * pi / nenner2), A_2], Rotate[J, (((-i) * 2) * pi / nenner2) - 0.0001, A_2]], i, 0, zaehler3 - 1) → sectors3_2
  43. Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken1
  44. Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken2
  45. Element(types, 4) → Text3
  46. Element(types, 4) → Text4
  47. Sequence(E + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, zaehler2) → streckenPunktLeft
  48. If(zaehler2 ≟ 1, E + ((1 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 2, E + ((2 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 3, E + ((3 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 4, E + ((4 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 5, E + ((5 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 6, E + ((6 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 7, E + ((7 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 8, E + ((8 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 9, E + ((9 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 10, E + ((10 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 11, E + ((11 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler2 ≟ 12, E + ((12 / 12 * widthZaehlerBar) * (1, 0))]]]]]]]]]]]) → PExample
  49. Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenPunktRight
  50. Sequence(F + ((i * widthZaehlerBar / 12) * (1, 0)), i, 1, zaehler3, 0.5) → listeEx2
  51. If(zaehler3 ≟ 1, F + ((1 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 2, F + ((2 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 3, F + ((3 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 4, F + ((4 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 5, F + ((5 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 6, F + ((6 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 7, F + ((7 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 8, F + ((8 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 9, F + ((9 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 10, F + ((10 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 11, F + ((11 / 12 * widthZaehlerBar) * (1, 0)), If[zaehler3 ≟ 12, F + ((12 / 12 * widthZaehlerBar) * (1, 0))]]]]]]]]]]]) → PExample1
  52. Last(streckenStrecken1) → referencePoint1
  53. Last(streckenStrecken2) → referencePoint2
  54. Segment(E, P1) → p
  55. Segment(F, P2) → q
  56. Segment(G, L) → r
  57. Segment(M, N) → s
  58. Sequence(Segment[(x(M) + t, y(M)), (x(M) + t, y(M) + 2)], t, 0, nenner2 / 2, 0.5) → balken2
  59. Sequence(Segment[(x(G) + t, y(G)), (x(G) + t, y(G) + 2)], t, 0, nenner2 / 2, 0.5) → balken1
  60. Sequence(L + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte1
  61. Sequence(G + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte2
  62. Sequence(N + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte3
  63. Sequence(M + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte4
  64. Last(balkenPunkte1) → LastBalkenPunkte1
  65. Last(balkenPunkte2) → LastBalkenPunkte2
  66. Last(balkenPunkte3) → LastBalkenPunkte3
  67. Last(balkenPunkte4) → LastBalkenPunkte4
  68. Point(LastBalkenPunkte1) → O
  69. Segment(L, O) → t
  70. Point(LastBalkenPunkte2) → P
  71. Segment(G, P) → a
  72. Point(LastBalkenPunkte4) → Q
  73. Segment(M, Q) → b
  74. Point(LastBalkenPunkte3) → R
  75. Segment(N, R) → f_1
  76. Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, -5, zaehler2 / 2 - 5.5, 0.5) → l1
  77. Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, 2, zaehler3 / 2 + 1.5, 0.5) → l2
  78. Translate(sectors1, (schiebeSectors1, 0)) → sectors1'
  79. Sequence(S + ((i * widthZaehlerBar / 12) * (1, 0)), i, 0, nenner2) → streckenStrecken3
  80. Last(streckenStrecken3) → referencePoint3
  81. Segment(S, P3) → g_1
  82. Segment(T, U) → i_1
  83. Sequence(Segment[(x(U) + t, y(U)), (x(U) + t, y(U) + 2)], t, 0, nenner2 / 2, 0.5) → balken3
  84. Sequence(T + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte5
  85. Sequence(U + ((i * widthZaehlerBar / 8) * (1, 0)), i, 0, nenner2) → balkenPunkte6
  86. Last(balkenPunkte5) → LastBalkenPunkte5
  87. Last(balkenPunkte6) → LastBalkenPunkte6
  88. Point(LastBalkenPunkte5) → V
  89. Point(LastBalkenPunkte6) → W
  90. Segment(T, V) → j_1
  91. Segment(U, W) → k_1
  92. Sequence(Polygon[(i, 5), (i + 0.5, 5), (i + 0.5, 7), (i, 7)], i, 8, zaehler2 / 2 + 5.5, 0.5) → l3
  93. Translate(l1, (schiebeBalken1, 0)) → l1'
  94. Translate(l2, (schiebeBalken2, 0)) → l2'
  95. Translate(E, (schiebeStrecke1, 0)) → E'
  96. Translate(PExample, (schiebeStrecke1, 0)) → PExample'
  97. Translate(F, (schiebeStrecke2, 0)) → F'
  98. Translate(PExample1, (schiebeStrecke2, 0)) → PExample1'
  99. Last(balken1) → l4
  100. First(balken2) → l5
  101. Midpoint(strecke1) → Z
  102. Midpoint(strecke2) → B_1
  103. Last(balken2) → l6
  104. First(balken3) → l7
  105. Midpoint(strecke3) → C_1
  106. Midpoint(strecke4) → D_1
  107. Segment(Z, B_1) → h_1
  108. Segment(C_1, D_1) → l_1
  109. Midpoint(h_1) → E_1
  110. Midpoint(l_1) → F_1
  111. Last(streckenStrecken1) → l8
  112. First(streckenStrecken2) → l9
  113. Last(streckenStrecken2) → l10
  114. First(streckenStrecken3) → l11
  115. Point(l8) → G_1
  116. Point(l9) → I_1
  117. Segment(G_1, I_1) → m_1
  118. Point(l10) → J_1
  119. Point(l11) → K_1
  120. Segment(J_1, K_1) → n_1
  121. Midpoint(m_1) → L_1
  122. Midpoint(n_1) → M_1
  123. Translate(sectors2, ((-schiebeSectors2), 0)) → sectors2'
  124. Textfield(ganzesInput) → InputBox3
  125. Polygon(PtopLeftCornerFeedback_{1}, PtopRightCornerFeedback_{1}, PbottomRightCornerFeedback_{1}, PbottomLeftCornerFeedback_{1}) → rectangleCorrect_{1}, ptopleftcornerfeedback_{1}, ptoprightcornerfeedback_{1}, pbottomrightcornerfeedback_{1}, pbottomleftcornerfeedback_{1}
  126. Mirror(sectors2', x = 1.99) → sectors2''
  127. Last(streckenStrecken1) → l12
  128. Last(streckenStrecken2) → l13
  129. First(streckenStrecken2) → l14
  130. First(streckenStrecken3) → l15
  131. Last(streckenStrecken3) → l16
  132. First(streckenStrecken1) → l17
  133. Point(l29) → N_1
  134. Point(l22) → O_1
  135. Segment(N_1, O_1) → p_1
  136. Point(l24) → P_1
  137. Point(l18) → Q_1
  138. Segment(P_1, Q_1) → q_1
  139. Point(l26) → R_1
  140. Point(l20) → S_1
  141. Segment(R_1, S_1) → r_1
  142. Point(l25) → T_1
  143. Point(l19) → U_1
  144. Segment(T_1, U_1) → s_1
  145. Point(l27) → V_1
  146. Point(l23) → W_1
  147. Segment(V_1, W_1) → t_1
  148. Point(l28) → Z_1
  149. Point(l21) → B_2
  150. Segment(Z_1, B_2) → a_1
  151. Remove(streckenStrecken1, Last[streckenStrecken1]) → l30
  152. Remove(l30, First[l30]) → l31
  153. Remove(streckenStrecken2, Last[streckenStrecken2]) → l32
  154. Remove(l32, First[l32]) → l33
  155. Remove(streckenStrecken3, Last[streckenStrecken3]) → l34
  156. Remove(l34, First[l34]) → l35
  157. Segment((x(E) + 0.05, y(E)), (x(PExample) - 0.05, y(PExample))) → m
  158. Segment((x(E') + 0.05, y(E')), (x(PExample') - 0.05, y(PExample'))) → m'
  159. Segment((x(F) + 0.05, y(F)), (x(PExample1) - 0.05, y(PExample1))) → n
  160. Segment((x(F') + 0.05, y(F')), (x(PExample1') - 0.05, y(PExample1'))) → n'
  161. Length(g_1) → o
  162. Length(n) → u
  163. Length(j_1) → v
  164. Mirror(sectors2, x = 1.99) → sectors2'_{1}

AI Drawing Prompt Reference

Create a visual geometry practice for adding fractions. Draw a unit circle on the left and divide it into equal parts according to a chosen denominator, using wedge-shaped sectors. Highlight a number of sectors matching the numerator so that two fractional parts can be shown by rotating or positioning these highlighted sectors. On the right, draw horizontal bar segments representing the denominators and numerators with equal-sized sub-intervals, and show how the two parts are combined by shifting/aligning the bars. Include a rectangular feedback area for the final check and leave two input fields for the numerator and denominator of the answer.
The prompt above was compiled from the original drawing commands and is for reference only.