Microsoft Small Basic

Program Listing: XQF852-1
' Trapezoid (XQF852-1)
' Copyright (c) 2013 Nonki Takahashi
'
GraphicsWindow.Title = "Trapezoid"
Init()
Calc()
Controls.TextTyped = OnTextTyped
Sub OnTextTyped
Calc()
EndSub
Sub Calc
upper = Controls.GetTextBoxText(oUpper)
lower = Controls.GetTextBoxText(oLower)
height = Controls.GetTextBoxText(oHeight)
oblique2 = Math.Power(lower - upper, 2) + Math.Power(height, 2)
oblique = Math.SquareRoot(oblique2)
area = (upper + lower) * height / 2
perimeter = upper + lower + 2 * oblique
Shapes.SetText(oArea, area)
Shapes.SetText(oPerimeter, perimeter)
If oTrapezoid <> "" Then
Shapes.Remove(oTrapezoid[1])
Shapes.Remove(oTrapezoid[2])
Shapes.Remove(oTrapezoid[3])
EndIf
GraphicsWindow.PenWidth = 0
GraphicsWindow.BrushColor = "MediumSeaGreen"
oTrapezoid[1] = Shapes.AddTriangle((lower - upper) / 2 * cm, 0, 0, height * cm, (lower - upper) / 2 * cm, height * cm)
Shapes.Move(oTrapezoid[1], cm, cm * 4)
oTrapezoid[2] = Shapes.AddRectangle(upper * cm, height * cm)
Shapes.Move(oTrapezoid[2], (1 + (lower - upper) / 2) * cm, cm * 4)
oTrapezoid[3] = Shapes.AddTriangle(0, 0, 0, height * cm, (lower - upper) / 2 * cm, height * cm)
Shapes.Move(oTrapezoid[3], (1 + (lower - upper) / 2 + upper) * cm, cm * 4)
EndSub
Sub Init
gw = GraphicsWindow.Width
gh = GraphicsWindow.Height
cm = 36 ' [px / cm]
GraphicsWindow.BackgroundColor = "LightGray"
GraphicsWindow.PenColor = "DimGray"
For x = 0 To gw Step cm
GraphicsWindow.DrawLine(x, 0, x, gh)
EndFor
For y = 0 To gh Step cm
GraphicsWindow.DrawLine(0, y, gw, y)
EndFor
GraphicsWindow.BrushColor = "Black"
GraphicsWindow.DrawText(cm, cm, "Upper Base")
oUpper = Controls.AddTextBox(cm * 3, cm)
Controls.SetTextBoxText(oUpper, 4)
GraphicsWindow.DrawText(cm, cm * 2, "Lower Base")
oLower = Controls.AddTextBox(cm * 3, cm * 2)
Controls.SetTextBoxText(oLower, 6)
GraphicsWindow.DrawText(cm, cm * 3, "Height")
oHeight = Controls.AddTextBox(cm * 3, cm * 3)
Controls.SetTextBoxText(oHeight, 3)
GraphicsWindow.DrawText(cm * 10, cm, "Area")
oArea = Shapes.AddText(0)
Shapes.Move(oArea, cm * 12, cm)
GraphicsWindow.DrawText(cm * 10, cm * 2, "Perimeter")
oPerimeter = Shapes.AddText(0)
Shapes.Move(oPerimeter, cm * 12, cm * 2)
EndSub