RosettaCodeData/Task/Averages-Median/Yabasic/averages-median.basic
2023-07-01 13:44:08 -04:00

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