56 lines
1 KiB
Text
56 lines
1 KiB
Text
sub floor(x)
|
|
return int(x + .05)
|
|
end sub
|
|
|
|
sub ceil(x)
|
|
if x > int(x) x = x + 1
|
|
return x
|
|
end sub
|
|
|
|
SUB ASort$(matriz$())
|
|
local last, gap, first, tempi$, tempj$, i, j
|
|
|
|
last = arraysize(matriz$(), 1)
|
|
|
|
gap = floor(last / 10) + 1
|
|
while(TRUE)
|
|
first = gap + 1
|
|
for i = first to last
|
|
tempi$ = matriz$(i)
|
|
j = i - gap
|
|
while(TRUE)
|
|
tempj$ = matriz$(j)
|
|
if (tempi$ >= tempj$) then
|
|
j = j + gap
|
|
break
|
|
end if
|
|
matriz$(j+gap) = tempj$
|
|
if j <= gap then
|
|
break
|
|
end if
|
|
j = j - gap
|
|
wend
|
|
matriz$(j) = tempi$
|
|
next i
|
|
if gap = 1 then
|
|
return
|
|
else
|
|
gap = floor(gap / 3.5) + 1
|
|
end if
|
|
wend
|
|
END SUB
|
|
|
|
|
|
sub median(numlist$)
|
|
local numlist$(1), n
|
|
|
|
n = token(numlist$, numlist$(), ", ")
|
|
|
|
ASort$(numlist$())
|
|
|
|
if mod(n, 2) = 0 then return (val(numlist$(n / 2)) + val(numlist$(n / 2 + 1))) / 2 end if
|
|
return val(numlist$(ceil(n / 2)))
|
|
end sub
|
|
|
|
print median("4.1, 5.6, 7.2, 1.7, 9.3, 4.4, 3.2") // 4.4
|
|
print median("4.1, 7.2, 1.7, 9.3, 4.4, 3.2") // 4.25
|