Stem-and-leaf plot: Difference between revisions
Content added Content deleted
(→{{header|ALGOL 68}}: tweak anf bugfix) |
(→{{header|ALGOL 68}}: replace as to not depend on some random guy's utility library. if the code is needed for the solution, it should be explicitly in it. This solution avoids sorting altogether.) |
||
Line 224: | Line 224: | ||
=={{header|ALGOL 68}}== |
=={{header|ALGOL 68}}== |
||
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}} |
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}} |
||
{{libheader|ALGOL 68-rows}} |
|||
<syntaxhighlight lang="algol68"> |
<syntaxhighlight lang="algol68"> |
||
PROC stem and leaf plot = ([]INT data)VOID: |
|||
BEGIN |
|||
# stem = leading digits # |
|||
# get lower and higher stem value # |
|||
PR read "rows.incl.a68" PR # include row (array) utilities # |
|||
INT min stem := data[LWB data] % 10, |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
IF max stem < stem THEN max stem := stem FI |
|||
⚫ | |||
OD; |
|||
⚫ | |||
# this array will store the amount of leaves per stem: # |
|||
⚫ | |||
[min stem : max stem, 0:9]INT stems; |
|||
⚫ | |||
FOR i FROM LWB stems TO UPB stems DO |
|||
⚫ | |||
stems[i,] := []INT((0,0,0,0,0,0,0,0,0,0))[@0] |
|||
OD; |
|||
# fill the array # |
|||
# generates a stem-and-leaf plot of d, the stems and leaves are derived # |
|||
FOR i FROM LWB data TO UPB data DO |
|||
# from the elements by stem and leaf. the plot starts at first stem. # |
|||
stems[data[i] % 10, data[i] %* 10] +:= 1 |
|||
# the data is assumed to be sorted into stem then leaf order # |
|||
OD; |
|||
PROC stem and leaf plot = ( []INT d, INT first stem, PROC(INT)INT stem, leaf )VOID: |
|||
# print the histogram # |
|||
IF UPB d < LWB d THEN |
|||
FOR i FROM LWB stems TO UPB stems DO |
|||
⚫ | |||
print((whole(i, -4), "| ")); |
|||
⚫ | |||
# there is some data to plot # |
|||
print(REPR (j + ABS "0") * stems[i,j]) |
|||
OD; |
|||
IF first stem < curr stem THEN |
|||
⚫ | |||
curr stem := first stem |
|||
OD |
|||
⚫ | |||
⚫ | |||
BOOL first := TRUE; |
|||
⚫ | |||
⚫ | |||
IF first OR curr stem /= this stem THEN |
|||
curr stem +:= 1; |
|||
WHILE IF NOT first THEN |
|||
print( ( newline ) ) |
|||
ELSE |
|||
first := FALSE |
|||
FI; |
|||
print( ( whole( curr stem, -4 ), "|" ) ); |
|||
curr stem < this stem |
|||
DO |
|||
curr stem +:= 1 |
|||
OD |
|||
FI; |
|||
print( ( " ", whole( leaf( d[ i ] ), 0 ) ) ) |
|||
⚫ | |||
⚫ | |||
⚫ | |||
# sort the data # |
|||
⚫ | |||
[ LWB data : UPB data ]INT sorted data := data; |
|||
⚫ | |||
QUICKSORT sorted data FROMELEMENT LWB sorted data TOELEMENT UPB sorted data; |
|||
122, 42, 117, 119, 58, 109, 23, 105, 63, 27, |
|||
44, 105, 99, 41, 128, 121, 116, 125, 32, 61, |
|||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
⚫ | |||
stem and leaf plot(data) |
|||
⚫ | |||
</syntaxhighlight> |
</syntaxhighlight> |
||
{{out}} |
{{out}} |
||
<pre> |
<pre> |
||
0| |
0| 77 |
||
1| |
1| 2388 |
||
2| |
2| 357777778899 |
||
3| 011112345677789 |
|||
3| 0 1 1 1 1 2 3 4 5 6 7 7 7 8 9 |
|||
4| 001222233344456788 |
|||
4| 0 0 1 2 2 2 2 3 3 3 4 4 4 5 6 7 8 8 |
|||
5| |
5| 23788 |
||
6| |
6| 138 |
||
7| 1 |
7| 1 |
||
8| |
8| |
||
9| |
9| 69 |
||
10| |
10| 4555567999 |
||
11| 13333444555666677778899 |
|||
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| 00112234445556777788 |
|||
12| 0 0 1 1 2 2 3 4 4 4 5 5 5 6 7 7 7 7 8 8 |
|||
13| |
13| 1239 |
||
14| |
14| 16 |
||
</pre> |
</pre> |
||