Averages/Mode: Difference between revisions

Content added Content deleted
(task description: Improve formatting and add related tasks box)
m (→‎version 1: added/changed comments, indentations, and whitespace.)
Line 2,209: Line 2,209:
Returns one mode value.
Returns one mode value.
<lang rexx>/*REXX program finds the mode (most occurring element) of a vector. */
<lang rexx>/*REXX program finds the mode (most occurring element) of a vector. */
/* ════════vector══════════─ ═══show vector═══ ═─═══show result═════ */
/* ════════vector═══════════ ═══show vector═══ ═════show result═════ */
v= 1 8 6 0 1 9 4 6 1 9 9 9 ; say 'vector='v; say 'mode='mode(v); say
v= 1 8 6 0 1 9 4 6 1 9 9 9 ; say 'vector='v; say 'mode='mode(v); say
v= 1 2 3 4 5 6 7 8 9 11 10 ; say 'vector='v; say 'mode='mode(v); say
v= 1 2 3 4 5 6 7 8 9 11 10 ; say 'vector='v; say 'mode='mode(v); say
v= 8 8 8 2 2 2 ; say 'vector='v; say 'mode='mode(v); say
v= 8 8 8 2 2 2 ; say 'vector='v; say 'mode='mode(v); say
v='cat kat Cat emu emu Kat' ; say 'vector='v; say 'mode='mode(v); say
v='cat kat Cat emu emu Kat' ; say 'vector='v; say 'mode='mode(v); say
exit /*stick a fork in it, we're all done. */
exit /*stick a fork in it, we're all done. */
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
eSort: procedure expose @.; parse arg # 1 h /* [↓] this is an exchange sort. */
sort: procedure expose @.; parse arg # 1 h /* [↓] this is an exchange sort. */
do while h>1; h=h%2 /*In REXX, % is an integer divide.*/
do while h>1; h=h%2 /*In REXX, % is an integer divide.*/
do i=1 for #-h; j=i; k=h+i /* [↓] perform exchange for elements. */
do i=1 for #-h; j=i; k=h+i /* [↓] perform exchange for elements. */
do while @.k<@.j & h<j; _=@.j; @.j=@.k; @.k=_; j=j-h; k=k-h; end
do while @.k<@.j & h<j; _=@.j; @.j=@.k; @.k=_; j=j-h; k=k-h; end
end /*i*/
end /*i*/
end /*while h>1*/
end /*while h>1*/; return
return
/*──────────────────────────────────────────────────────────────────────────────────────*/
/*──────────────────────────────────────────────────────────────────────────────────────*/
mode: procedure expose @.; parse arg x /*function finds the MODE of a vector*/
mode: procedure expose @.; parse arg x; freq=1 /*function finds the MODE of a vector*/
#=words(x) /*#: the number of elements in vector.*/
#=words(x) /*#: the number of elements in vector.*/
do k=1 for #; @.k=word(x,k); end /* ◄──── make an array from the vector.*/
do k=1 for #; @.k=word(x,k); end /* ◄──── make an array from the vector.*/
call eSort # /*sort the elements in the array. */
call Sort # /*sort the elements in the array. */
?=@.1 /*assume the first element is the mode.*/
?=@.1 /*assume the first element is the mode.*/
freq=1 /*the frequency of the occurrence. */
do j=1 for #; _=j-freq /*traipse through the elements in array*/
do j=1 for #; _=j-freq /*traipse through the elements in array*/
if @.j==@._ then do; freq=freq+1 /*is this element the same as previous?*/
if @.j==@._ then do /*is this element the same as previous?*/
?=@.j /*this element is the mode (···so far).*/
freq=freq+1 /*bump the frequency counter. */
end
?=@.j /*this element is the mode (···so far).*/
end /*j*/
end
return ? /*return the mode of vector to invoker.*/</lang>
end /*j*/
return ? /*return the mode of vector to invoker.*/</lang>
'''output'''
'''output'''
<pre>
<pre>