Gambas/Maths

From Wikibooks, open books for an open world
< Gambas
Jump to: navigation, search

Back to Gambas

The Cross Sum Program[edit]

This miniprogram calculates the cross sum of an integer. You need 2 textboxes and 1 commandbutton to get the program going.

Please beware of the signs / and \ . In this program the sign \ is used for a division without a remainder.

The Code

PUBLIC SUB Button1_Click()
    DIM z AS Integer
    DIM crosssum AS Integer
    z = Val(TextBox1.Text)
    DO WHILE z <> 0 
      crosssum = crosssum + z MOD 10
      z= z \ 10 
    LOOP 
    TextBox2.Text = Str$(crosssum)
END

Addy The Sum Program[edit]

This miniprogram calculates the sum of a row of integers. You need 1 textarea, 1 textbox and 1 commandbutton to get the program going. You can also add negative integers. Very helpful is the Split command and the String array String[]

The Code

PUBLIC SUB Button1_Click()
DIM text AS String
DIM summe AS Float
DIM Elt AS String[]
DIM Sb AS String
text = textarea1.Text
Elt = Split(text,Chr(10))
FOR EACH Sb IN Elt
 summe = summe + Val(sb)
NEXT
textbox1.Text = summe
END

The Average Program[edit]

This miniprogram calculates the average of a row of integers. You need 1.textarea, 2 textboxes and 1 commandbutton to get the program going.

The Code

PUBLIC SUB Button1_Click()
DIM text AS String
DIM summe AS Float
DIM mw AS Float
DIM varianz AS Float
DIM sigma AS Float
DIM Liste AS String[]
DIM Einzelwert AS String
text = textarea1.Text
Liste = Split(text,Chr(10))
FOR EACH Einzelwert IN Liste
 summe = summe + Val(Einzelwert)
NEXT
mw = summe / Liste.Length
textbox1.Text = mw
varianz = 0
FOR EACH Einzelwert IN Liste
 varianz = varianz + ((Val(Einzelwert) - mw)^2)
 PRINT Einzelwert,mw,((Val(Einzelwert) - mw)^2)
 PRINT varianz
NEXT
varianz = varianz / (Liste.Length - 1)
PRINT varianz
sigma = Sqr(varianz)
textbox2.Text = sigma
END

The Median[edit]

The Median of a list of values lies between two equal parts of the list. 50 % of the values ar greater or equal to the median. 50 % are smaler or equal to the median. In contrary to the average the median is not influenced that much by extreme values.

If you want to program the median, you have to

  • 1.sort your list of values
  • 2.check if the list has an even or an odd number of values.
  • 3.chooes the right formula for the median.
    • for an odd number of values
xmedian = x[(n+1)/2]
    • for an even number of values
xmedian = 1/2*(x[n/2] + x[n/2+1])

example 1:

sorted list of values:

11
12
13
14
15    

The number of values is odd. n = 5

(n+1)/2 =  6/2 = 3 

xmedian = x[3] = 13

example 2.

sorted list of values:

11
12
13
14
15
16

The number of values is even , n = 6

n/2 =  6/2 = 3 
x[3] = 13
x[4] = 14
xmedian = 1/2*(13+14) = 13,5

You can take the list from above and copy it into the Gambas median program. Use the clipboard of your computer for that. Ctrl+C = Copy , Ctrl + V = Paste

example program

You need 2 textareas , 3 commandbuttons and 1 textbox, to get the program going:

' Gambas CLASS file
liste AS String[]
PUBLIC SUB Form_Open()
  ME.Text = "Computate the Median "
END
PUBLIC SUB Button1_Click()
'sort
c AS Integer 
j AS Integer 
n AS Integer 
y AS Variant
liste AS String[]
element AS String 
txt AS String 
text AS String 
text = Textarea1.Text
liste = Split(text,Chr(10))
y = 0
n = liste.length
REPEAT 
c = 0
 FOR j = 0 TO n - 2
   'PRINT j,y,liste[0],ar[1],ar[2],ar[3],ar[4]
   IF Val(liste[j]) > Val(liste[j + 1]) THEN 
     y = Val(liste[j]) 
     liste[j] = liste[j + 1]
     liste[j + 1] = Str(y) 
     c = 1
   ENDIF 
 NEXT 
UNTIL c = 0 
FOR EACH element IN liste 
txt = txt & Str(element) & Chr(10) 
NEXT
PRINT txt
textarea2.Text = ""
txt = Mid$(txt,1,-1)
'the last CR has to be killed chr(10) 
textarea2.Text = txt
END
PUBLIC SUB Button2_Click()
'computate median, but sort first !! 
 text AS String
 median AS Float
 liste AS String[]
 posten AS String
 text = Textarea2.Text
 liste = Split(text,Chr(10))
 'count the length of your list and choose the right formula 
    IF liste.Length MOD 2 THEN 
  'PRINT liste.Length MOD 2 & " odd"
  'PRINT (liste.length + 1)/2
  'PRINT liste[(liste.length + 1)/2 - 1]
  median = Val(liste[(liste.length + 1)/2 - 1])
  'the array starts with the element 0 not with the element 1 !
  ELSE
  'PRINT liste.Length MOD 2 & " even"
  median = (Val(liste[liste.length/2 - 1]) + Val(liste[liste.length/2]))/2
  ENDIF 
 textbox1.Text = Str(median)
 END
 PUBLIC SUB Button3_Click()
 'list of values as an example 
 textarea1.Text = "114,3"
 textarea1.Text = textarea1.Text & Chr(10) & "135,7"
 textarea1.Text = textarea1.Text & Chr(10) & "104,8"
 textarea1.Text = textarea1.Text & Chr(10) & "118,5"
 textarea1.Text = textarea1.Text & Chr(10) & "125,7"
 textarea1.Text = textarea1.Text & Chr(10) & "121,4"
 textarea1.Text = textarea1.Text & Chr(10) & "122,4"
 textarea1.Text = textarea1.Text & Chr(10) & "96,8"
 textarea1.Text = textarea1.Text & Chr(10) & "118,9"
 textarea1.Text = textarea1.Text & Chr(10) & "120"
 textarea1.Text = textarea1.Text & Chr(10) & "112,2"
 textarea1.Text = textarea1.Text & Chr(10) & "127,9"
 textarea1.Text = textarea1.Text & Chr(10) & "122,8"
 textarea1.Text = textarea1.Text & Chr(10) & "128,9"
 textarea1.Text = textarea1.Text & Chr(10) & "120,3"
'median = 120,3
END