Averages/Mode: Difference between revisions

Added FreeBASIC
No edit summary
(Added FreeBASIC)
Line 923:
 
end program mode_test</lang>
 
=={{header|FreeBASIC}}==
<lang freebasic>' FB 1.05.0
 
Sub quicksort(a() As Integer, first As Integer, last As Integer)
Dim As Integer length = last - first + 1
If length < 2 Then Return
Dim pivot As Integer = a(first + length\ 2)
Dim lft As Integer = first
Dim rgt As Integer = last
While lft <= rgt
While a(lft) < pivot
lft +=1
Wend
While a(rgt) > pivot
rgt -= 1
Wend
If lft <= rgt Then
Swap a(lft), a(rgt)
lft += 1
rgt -= 1
End If
Wend
quicksort(a(), first, rgt)
quicksort(a(), lft, last)
End Sub
 
' The modal value(s) is/are stored in 'm'.
' The function returns the modal count.
Function mode(a() As Integer, m() As Integer, sorted As Boolean = false) As Integer
Dim lb As Integer = LBound(a)
Dim ub As Integer = UBound(a)
If ub = -1 Then Return 0 '' empty array
If Not sorted Then quicksort(a(), lb, ub)
Dim cValue As Integer = a(lb)
Dim cCount As Integer = 1
Dim cMax As Integer = 0
'' We iterate to the end of the array plus 1 to ensure the
'' final value is dealt with properly
For i As Integer = lb + 1 To ub + 1
If i <= ub AndAlso a(i) = cValue Then
cCount += 1
Else
If cCount > cMax Then
Erase m
Redim m(1 To 1)
m(1) = cValue
cMax = cCount
ElseIf cCount = cMax Then
Redim Preserve m(1 To UBound(m) + 1)
m(UBound(m)) = cValue
End If
If i = ub + 1 Then Exit For
cValue = a(i)
cCount = 1
End If
Next
Return cMax
End Function
 
Dim a(1 To 14) As Integer = {1, 2, 3, 1, 2, 4, 2, 5, 2, 3, 3, 1, 3, 6}
Dim m() As Integer '' to store the mode(s)
Dim mCount As Integer = mode(a(), m())
Print "The following are the modes which occur"; mCount; " times : "
For i As Integer = LBound(m) To UBound(m) : Print m(i); " "; : Next
Print
Print "Press any key to quit"
Sleep</lang>
 
{{out}}
<pre>
c:\FreeBasic>mode
The following are the modes which occur 4 times :
2 3
</pre>
 
=={{header|Haskell}}==
9,490

edits