Microsoft Small Basic
Program Listing:
Embed this in your website
<object id='sbapp' data='data:application/x-silverlight-2,' type='application/x-silverlight-2' width='640' height='480'> <param name='source' value='http://smallbasic.com/program/ClientBin/SBWeb.xap'/> <param name='onError' value='onSilverlightError' /> <param name='background' value='white' /> <param name='minRuntimeVersion' value='3.0.40624.0' /> <param name='autoUpgrade' value='true' /> <param name='initParams' value='programId=pnz684' /> </object>
' Easy Graf making Controlbox data Input version 2011/12/21 by NaoChanON
GraphicsWindow
.
Top
=
30
GraphicsWindow
.
Left
=
50
GraphicsWindow
.
Width
=
1000
GraphicsWindow
.
Height
=
600
GraphicsWindow
.
BackgroundColor
=
"Lavender"
GraphicsWindow
.
Show
(
)
Controls
.
ButtonClicked
=
Onclick
TextBoX_Input
(
)
Sub
OnClick
name
=
""
name
=
controls
.
LastClickedButton
' Last button
nm
=
controls
.
GetButtonCaption
(
name
)
' Button's caption
If
nm
=
"Execute"
Then
get_data
(
)
init
(
)
Plot_Data
(
)
Regressionline
(
)
EndIf
EndSub
Sub
TextBoX_Input
GraphicsWindow
.
BrushColor
=
"Red"
GraphicsWindow
.
FontSize
=
30
GraphicsWindow
.
DrawText
(
80
,
5
,
" Input boxes and push execute "
)
EXEC
=
Controls
.
AddButton
(
"Execute"
,
230
,
540
)
Controls
.
SetSize
(
EXEC
,
300
,
50
)
GraphicsWindow
.
FontSize
=
20
GraphicsWindow
.
BrushColor
=
"Navy"
GraphicsWindow
.
FontSize
=
15
GraphicsWindow
.
DrawText
(
30
,
50
,
"Graf Width,Height"
)
' Width and height
GraphicsWindow
.
DrawText
(
30
,
70
,
"EXAM: 800,500"
)
GXYBOX
=
Controls
.
AddTextBox
(
230
,
50
)
Controls
.
SetSize
(
GXYBOX
,
100
,
40
)
Controls
.
SetTextBoxText
(
GXYBOX
,
"800,500"
)
GraphicsWindow
.
DrawText
(
30
,
120
,
"Min-X , Max-X"
)
' Min-X and Max-X
GraphicsWindow
.
DrawText
(
30
,
140
,
"EXAM: 0,800"
)
MINMAXX
=
Controls
.
AddTextBox
(
230
,
120
)
Controls
.
SetSize
(
MINMAXX
,
100
,
40
)
Controls
.
SetTextBoxText
(
MINMAXX
,
"0,800"
)
GraphicsWindow
.
DrawText
(
30
,
190
,
"Min-Y , Max-Y"
)
'Min-Y and Max-Y
GraphicsWindow
.
DrawText
(
30
,
210
,
"EXAM: 0,500"
)
MINMAXY
=
Controls
.
AddTextBox
(
230
,
190
)
Controls
.
SetSize
(
MINMAXY
,
100
,
40
)
Controls
.
SetTextBoxText
(
MINMAXY
,
"0,500"
)
GraphicsWindow
.
DrawText
(
30
,
260
,
"Dividing X , Y"
)
' dividing number
GraphicsWindow
.
DrawText
(
30
,
280
,
"EXAM: 4,5"
)
DivBOX
=
Controls
.
AddTextBox
(
230
,
260
)
Controls
.
SetSize
(
DivBOX
,
100
,
40
)
Controls
.
SetTextBoxText
(
DivBOX
,
"4,5"
)
GraphicsWindow
.
DrawText
(
30
,
330
,
"Label X"
)
' Label-X name
GraphicsWindow
.
DrawText
(
30
,
350
,
"EXAM: Weight"
)
LABELXBOX
=
Controls
.
AddTextBox
(
230
,
330
)
Controls
.
SetSize
(
LABELXBOX
,
300
,
40
)
Controls
.
SetTextBoxText
(
LABELXBOX
,
" Label X "
)
GraphicsWindow
.
DrawText
(
30
,
400
,
"Label Y"
)
' Label-Y name
GraphicsWindow
.
DrawText
(
30
,
420
,
"EXAM: Height"
)
LABELYBOX
=
Controls
.
AddTextBox
(
230
,
400
)
Controls
.
SetSize
(
LABELYBOX
,
300
,
40
)
Controls
.
SetTextBoxText
(
LABELYBOX
,
" Label Y "
)
GraphicsWindow
.
DrawText
(
30
,
470
,
"Title name"
)
' Title name
GraphicsWindow
.
DrawText
(
30
,
490
,
"EXAM: Weight vs Height"
)
TTLBOX
=
Controls
.
AddTextBox
(
230
,
470
)
Controls
.
SetSize
(
TTLBOX
,
300
,
40
)
Controls
.
SetTextBoxText
(
TTLBOX
,
" Test Graph "
)
GraphicsWindow
.
DrawText
(
660
,
5
,
"Input X , Y data"
)
' X,Y data
GraphicsWindow
.
DrawText
(
660
,
25
,
"EXAM: 50 , 100 enter"
)
GraphicsWindow
.
DrawText
(
720
,
45
,
"80 , 150 enter"
)
MBOX
=
Controls
.
AddMultiLineTextBox
(
700
,
80
)
Controls
.
SetSize
(
MBOX
,
100
,
500
)
Controls
.
SetTextBoxText
(
MBOX
,
" 50,100"
)
EndSub
Sub
get_data
GWH
=
Controls
.
GetTextBoxText
(
GXYBOX
)
GWidth
=
Text
.
GetSubText
(
GWH
,
1
,
text
.
GetIndexOf
(
GWH
,
","
)
-
1
)
' Gwidth
GHeight
=
Text
.
GetSubTextToEnd
(
GWH
,
text
.
GetIndexOf
(
GWH
,
","
)
+
1
)
'Ghight
MMX
=
Controls
.
GetTextBoxText
(
MINMAXX
)
MinX
=
Text
.
GetSubText
(
MMX
,
1
,
text
.
GetIndexOf
(
MMX
,
","
)
-
1
)
' Min-X
MaxX
=
Text
.
GetSubTextToEnd
(
MMX
,
text
.
GetIndexOf
(
MMX
,
","
)
+
1
)
'Max-X
MMY
=
Controls
.
GetTextBoxText
(
MINMAXY
)
MinY
=
Text
.
GetSubText
(
MMY
,
1
,
text
.
GetIndexOf
(
MMY
,
","
)
-
1
)
'Min-Y
MaxY
=
Text
.
GetSubTextToEnd
(
MMY
,
text
.
GetIndexOf
(
MMY
,
","
)
+
1
)
'Max-Y
DXY
=
Controls
.
GetTextBoxText
(
DivBOX
)
XDiv
=
Text
.
GetSubText
(
DXY
,
1
,
text
.
GetIndexOf
(
DXY
,
","
)
-
1
)
'X-Dividing number
YDiv
=
Text
.
GetSubTextToEnd
(
DXY
,
text
.
GetIndexOf
(
DXY
,
","
)
+
1
)
'Y-Dividing number
LBLX
=
Controls
.
GetTextBoxText
(
LABELXBOX
)
' Label-X
LBLY
=
Controls
.
GetTextBoxText
(
LABELYBOX
)
' Label-Y
TTL
=
Controls
.
GetTextBoxText
(
TTLBOX
)
' Title name
DatXY
=
Controls
.
GetTextBoxText
(
MBOX
)
' X-Y data
Get_XYata
(
)
' Pick Up X,Y data from multilinetextbox
EndSub
Sub
Get_XYata
' Pick Up X,Y data from multilinetextbox
DatXY
=
Controls
.
GetTextBoxText
(
MBOX
)
If
Text
.
GetCharacterCode
(
text
.
GetSubText
(
DatXY
,
Text
.
GetLength
(
datXY
)
,
1
)
)
=
10
Then
DatXY
=
text
.
GetSubText
(
DatXY
,
1
,
Text
.
GetLength
(
datXY
)
-
2
)
' if DatXY -end = Chr$(13)+chr$(10) then delete
EndIf
For
i
=
1
To
Text
.
GetLength
(
DatXY
)
word1
=
text
.
GetSubText
(
datXY
,
i
,
1
)
If
word1
=
text
.
GetCharacter
(
13
)
Then
' delete chr$(13)
word1
=
""
ElseIf
word1
=
text
.
GetCharacter
(
10
)
Then
' conversion Chr$(10) to ":" =delimiter
word1
=
":"
EndIf
midw
=
text
.
Append
(
midw
,
word1
)
EndFor
midw
=
midw
+
":"
' connect all word and add ":" =delimiter
while
midw
<>
""
NN
=
NN
+
1
midp1
=
Text
.
GetIndexOf
(
midw
,
","
)
midp2
=
Text
.
GetIndexOf
(
midw
,
":"
)
px
[
NN
]
=
Text
.
GetSubText
(
midw
,
1
,
midp1
-
1
)
' pick up X-data
py
[
NN
]
=
Text
.
GetSubText
(
midw
,
midp1
+
1
,
midp2
-
midp1
-
1
)
' pick up Y-data
midw
=
Text
.
GetSubTextToEnd
(
midw
,
midp2
+
1
)
EndWhile
EndSub
Sub
init
GraphicsWindow
.
Clear
(
)
GraphicsWindow
.
top
=
50
GraphicsWindow
.
Left
=
50
GraphicsWindow
.
Width
=
1000
GraphicsWindow
.
Height
=
650
GraphicsWindow
.
Show
(
)
GraphicsWindow
.
BackgroundColor
=
"Lightcyan"
GraphicsWindow
.
BrushColor
=
"Navy"
GraphicsWindow
.
PenColor
=
"Red"
' Draw Rectangle
GTop
=
60
GLeft
=
150
GraphicsWindow
.
DrawRectangle
(
Gleft
,
Gtop
,
GWidth
,
GHeight
)
' Title and X,Y-labels
GraphicsWindow
.
FontSize
=
30
GTitle
=
Shapes
.
AddText
(
TTL
)
Shapes
.
Animate
(
GTitle
,
Gleft
+
150
,
Gtop
-
40
,
1000
)
LabelY
=
Shapes
.
AddText
(
LBLY
)
Shapes
.
Animate
(
LabelY
,
15
,
(
Gtop
+
GHeight
)
/
2
,
1500
)
Shapes
.
Rotate
(
LabelY
,
-
90
)
LabelX
=
Shapes
.
AddText
(
LBLX
)
Shapes
.
Animate
(
LabelX
,
(
Gleft
+
Gwidth
)
/
2
-
20
,
Gtop
+
GHeight
+
40
,
2000
)
' X-----Axis
GraphicsWindow
.
FontSize
=
20
GraphicsWindow
.
BrushColor
=
"Red"
For
i
=
0
To
XDiv
For
j
=
GTop
To
GTop
+
Gheight
-
5
Step
10
GraphicsWindow
.
DrawLine
(
Gleft
+
i
*
(
Gwidth
/
Xdiv
)
,
J
,
Gleft
+
i
*
(
Gwidth
/
Xdiv
)
,
j
+
5
)
EndFor
DivX
=
math
.
round
(
minX
+
i
*
(
(
MaxX
-
minX
)
/
Xdiv
)
)
GraphicsWindow
.
DrawText
(
Gleft
+
i
*
(
Gwidth
/
Xdiv
)
-
20
,
GTop
+
GHeight
+
10
,
DivX
)
EndFor
' Y---Axis
For
i
=
YDiv
To
0
Step
-
1
For
j
=
GLeft
To
GLeft
+
Gwidth
-
5
Step
10
GraphicsWindow
.
DrawLine
(
j
,
GTop
+
i
*
(
GHeight
/
Ydiv
)
,
j
+
5
,
GTop
+
i
*
(
GHeight
/
Ydiv
)
)
EndFor
DivY
=
math
.
Round
(
MaxY
-
i
*
(
(
MaxY
-
minY
)
/
Ydiv
)
)
GraphicsWindow
.
DrawText
(
Gleft
-
40
,
GTop
+
i
*
(
GHeight
/
Ydiv
)
-
10
,
DivY
)
EndFor
EndSub
Sub
Plot_Data
GraphicsWindow
.
PenColor
=
"Green"
GraphicsWindow
.
PenWidth
=
3
For
i
=
1
To
NN
plotx
=
Gleft
+
(
PX
[
i
]
-
minX
)
*
Gwidth
/
(
MaxX
-
MinX
)
ploty
=
GTop
+
Gheight
-
(
PY
[
i
]
-
minY
)
*
Gheight
/
(
MaxY
-
MinY
)
sc
[
i
]
=
Shapes
.
AddEllipse
(
10
,
10
)
Shapes
.
Animate
(
sc
[
i
]
,
plotx
-
5
,
ploty
-
5
,
1000
)
EndFor
EndSub
Sub
Regressionline
For
i
=
1
To
NN
sumx
=
sumx
+
px
[
i
]
sumy
=
sumy
+
py
[
i
]
sumX2
=
sumX2
+
px
[
i
]
*
px
[
i
]
sumXY
=
sumXY
+
px
[
i
]
*
py
[
i
]
sumY2
=
sumY2
+
py
[
i
]
*
py
[
i
]
EndFor
slope
=
(
NN
*
sumXY
-
sumx
*
sumy
)
/
(
NN
*
sumx2
-
sumx
*
sumx
)
' slope a
slope
=
math
.
Round
(
slope
*
100
)
/
100
' round a
intercept
=
sumy
/
NN
-
slope
*
sumx
/
NN
' intercept b
intercept
=
math
.
Round
(
intercept
*
100
)
/
100
' round b
Reg_line
=
"y= "
+
slope
+
"X + "
+
intercept
' y= aX+b
sreg
=
Shapes
.
AddText
(
Reg_line
)
Shapes
.
Animate
(
sreg
,
Gleft
+
10
,
80
,
1500
)
regY1
=
slope
*
minx
+
intercept
' X=MinX Y= intercept
regY2
=
maxY
*
0.8
' Y=maxY*0.8
regx2
=
(
regY2
-
intercept
)
/
slope
' X at Y
Gregx1
=
Gleft
'conversion x1=minX
GregX2
=
Gleft
+
(
regx2
-
minX
)
*
Gwidth
/
(
MaxX
-
MinX
)
' conversion x2
Gregy1
=
GTop
+
Gheight
-
(
regY1
-
minY
)
*
Gheight
/
(
MaxY
-
MinY
)
' conversion y1
Gregy2
=
GTop
+
Gheight
-
(
regY2
-
minY
)
*
Gheight
/
(
MaxY
-
MinY
)
' conversion y2
slope2
=
(
NN
*
sumXY
-
sumx
*
sumy
)
/
(
NN
*
sumY2
-
sumY
*
sumY
)
' slope c
slope2
=
math
.
Round
(
slope2
*
100
)
/
100
' round c
Coefficient
=
Math
.
SquareRoot
(
slope
*
slope2
)
'Correlation coefficient
Coefficient
=
math
.
Round
(
Coefficient
*
1000
)
/
1000
scoef
=
Shapes
.
AddText
(
"Coefficient= "
+
Coefficient
)
Shapes
.
Animate
(
scoef
,
Gleft
+
10
,
100
,
1500
)
GraphicsWindow
.
PenColor
=
"Green"
GraphicsWindow
.
DrawLine
(
Gregx1
,
GregY1
,
GregX2
,
GregY2
)
' draw regression Line
EndSub
Copyright (c) Microsoft Corporation. All rights reserved.