Averages/Median: Difference between revisions

Content deleted Content added
Pari/GP
Line 777:
]
</lang>
 
 
=={{header|REXX}}==
<lang rexx>
/*REXX program to find the medium of a vector. */
 
/*--------vector---------- ---show vector--- ----show result------ */
 
v='1 9 2 4' ; say 'vector='v; say 'medium='medium(v); say
v='3 1 4 1 5 9 7 6' ; say 'vector='v; say 'medium='medium(v); say
v='3 4 1 -8.4 7.2 4 1 1.2' ; say 'vector='v; say 'medium='medium(v); say
v='-1.2345678e99 2.3e+700' ; say 'vector='v; say 'medium='medium(v); say
 
exit
 
 
/*-------------------------------------MEDIUM subroutine----------------*/
medium: procedure; parse arg x
call makeArray x /*make into scaler array (faster)*/
call esort @.0 /*sort array: @.0 =element count*/
/*(ESORT is an overkill for this)*/
m=@.0%2 /* % is integer division. */
n=m+1
if @.0//2==1 then return=@.n /*(odd?) // is modulus.*/
return (@.m+@.n)/2 /*process an even-element vector.*/
 
 
/*-------------------------------------MAKEARRAY subroutine-------------*/
makeArray: procedure expose @.; parse arg v; @.0=words(v) /*make array*/
do j=1 for @.0
@.j=word(v,j)
end
return
 
 
/*-------------------------------------ESORT subroutine-----------------*/
esort: procedure expose @.; h=@.0 /*exchange sort.*/
do while h>1; h=h%2
do i=1 for @.0-h;j=i;k=h+i
do while @.k<@.j;t=@.j;@.j=@.k;@.k=t;if h>=j then leave;j=j-h;k=k-h;end
end /*i*/
end
return
</lang>
Output:
<pre style="height:30ex;overflow:scroll">
vector=1 9 2 4
medium=3
 
vector=3 1 4 1 5 9 7 6
medium=4.5
 
vector=3 4 1 -8.4 7.2 4 1 1.2
medium=2.1
 
vector=-1.2345678e99 2.3e+700
medium=1.15000000E+700
</pre>
 
=={{header|Ruby}}==