Stem-and-leaf plot: Difference between revisions

m
→‎{{header|REXX}}: elided some statements in the program, changed whitespace and comments.
(→‎{{header|Julia}}: A new entry for Julia)
m (→‎{{header|REXX}}: elided some statements in the program, changed whitespace and comments.)
Line 1,981:
<br>Also, all numbers that are processed are normalized.
<br>Using a sparse array bypasses the need for sorting.
<lang rexx>/*REXX program displays a stem-and-leafstem─and─leaf plot of real numbers [-, 0, +].*/
min= parse arg data /*This program[↓] Not handlesspecified? negativesUse default*/
if data='' then data=12 127 28 42 39 113 42 18 44 118 44 37 113 124 37 48 127 36 29 31,
max= /* ··· and decimal fractions. */
125 139 131 115 105 132 104 123 35 113 122 42 117 119 58 109 23 105 63 27 44 105 99 41,
parse arg data; if data='' then data=, /*Not specified? Then use default*/
128 121 116 12125 12732 2861 4237 39127 29 113 42121 1858 44114 118126 4453 37114 11396 12425 37109 487 12731 36141 2946 3113 12527 43,
117 116 27 1397 13168 11540 10531 132115 104124 12342 35128 11352 12271 42118 117 11938 5827 109106 2333 105117 63116 27111 40 119 47 105,
57 122 109 44124 105115 9943 41120 12843 12127 11627 12518 3228 6148 37125 127107 29114 11334 121133 5845 114120 12630 53127 114,31 116 146
parse var data min . 1 max . '' #. /*define MIN & MAX as 1st number.*/
96 25 109 7 31 141 46 13 27 43 117 116 27 7 68 40 31 115 124 42 128 52,
max= /* ···[↑] and decimaldefine fractions #. as null. */
71 118 117 38 27 106 33 117 116 111 40 119 47 105 57 122 109 124 115,
43 120 43 27 27 18 28 48 125 107 114 34 133 45 120 30 127 31 116 146
#.=
do j=1 for words(data); _=format(word(data,j),,0)/1 /*normalize*/
stem=left(_, max(1, length(_)-1)) /*extract the stem from the num. */
if length(_)==1 then stem=0 /*handle single-digitsingle─digit leaves. */
if min==''min(min, then min=stem*sign(_)); if max==''max(max, then max=stem*sign(_))
leaf=right(_,1) parse var _ '' -1 leaf /*pick off the leaf from the num.*/
min=min(min, stem*sign(_)); max=max(max, stem*sign(_))
leaf=right(_,1) /*pick off the leaf from the num.*/
#.stem.leaf=#.stem.leaf leaf /*construct a sorted stem-&-leaf.*/
end /*j*/
 
w=max(length(min), length(max)) +1 /*widthW: used to align theright─justify stems.*/
 
do k=min to max; _=; do m=0 for 10; _=_ #.k.m; end /*m*/
say right(k,w) '' space(_)
end /*k*/
/*stick a fork in it, we're done.*/</lang>
'''output''' when using the default input:
<pre>
0 7 7
1 2 3 8 8
2 3 5 7 7 7 7 7 7 8 8 9 9
3 0 1 1 1 1 2 3 4 5 6 7 7 7 8 9
4 0 0 1 2 2 2 2 3 3 3 4 4 4 5 6 7 8 8
5 2 3 7 8 8
6 1 3 8
7 1
8
9 6 9
10 4 5 5 5 5 6 7 9 9 9
11 1 3 3 3 3 4 4 4 5 5 5 6 6 6 6 7 7 7 7 8 8 9 9
12 0 0 1 1 2 2 3 4 4 4 5 5 5 6 7 7 7 7 8 8
13 1 2 3 9
14 1 6
</pre>