Stem-and-leaf plot: Difference between revisions

→‎{{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.
(→‎{{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:
=={{header|ALGOL 68}}==
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}}
{{libheader|ALGOL 68-rows}}
<syntaxhighlight lang="algol68">
BEGIN # produce aPROC stem and leaf plot of some numbers, leaf = last digit, ([]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,
[]INT data = ( 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44
FI #max stem and:= leafdata[LWB plotdata] #% 10;
, 37, 113, 124, 37, 48, 127, 36, 29, 31, 125, 139
FOR i FROM LWB ddata + 1 TO UPB ddata DO
, 131, 115, 105, 132, 104, 123, 35, 113, 122, 42, 117
INT this stem := stem( ddata[ i] ]% )10;
, 119, 58, 109, 23, 105, 63, 27, 44, 105, 99, 41
IF min stem > stem THEN currmin stem -:= 1stem FI;
, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121
IF max stem < stem THEN max stem := stem FI
, 58, 114, 126, 53, 114, 96, 25, 109, 7, 31, 141
OD;
, 46, 13, 27, 43, 117, 116, 27, 7, 68, 40, 31
# this array will store the amount of leaves per stem: #
, 115, 124, 42, 128, 52, 71, 118, 117, 38, 27, 106
[min stem : max stem, 0:9]INT stems;
, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122, 109
FOR i FROM LWB stems TO UPB stems DO
, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125
stems[i,] 107,:= 114[]INT((0, 340, 1330, 450, 1200, 300, 1270, 310, 1160, 1460))[@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( ( "No data", newline ) )
print((whole(i, -4), "| ELSE"));
FOR j FROM 0 TO 9 ODDO
# there is some data to plot #
print(REPR (j + ABS "0") INT* curr stem := stem( dstems[ LWB d i,j] );
OD;
IF first stem < curr stem THEN
print( ( "No data", newline ) )
curr stem := first stem
FI;OD
END;
curr stem -:= 1;
BOOL first := TRUE;
FOR i FROM LWB d TO UPB d DO
INT this stem = stem( d[ i ] );
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 ) ) )
OD
FI # stem and leaf plot # ;
 
[]INT data = ( 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44,
# sort the data #
, 37, 113, 124, 37, 48, 127, 36, 29, 31, 125, 139
[ LWB data : UPB data ]INT sorted data := data;
139, 131, 115, 105, 132, 104, 123, 35, 113, 122, 42, 117
QUICKSORT sorted data FROMELEMENT LWB sorted data TOELEMENT UPB sorted data;
# plot the data: stem = element / 10, leaf =122, element42, MOD 10117, 119, 58, 109, 23, 105, 63, #27,
stem and leaf plot( sorted data, 0, ( INT n )INT:44, n105, OVER99, 1041, (128, INT121, n116, )INT:125, n32, MOD 10 )61,
37, 33127, 11729, 116113, 111121, 4058, 119114, 47126, 10553, 57114, 122, 109
96, 12825, 121109, 1167, 12531, 32141, 6146, 3713, 12727, 2943, 113117, 121
116, 5827, 1147, 12668, 5340, 11431, 96115, 25124, 10942, 7128, 3152, 141
71, 115118, 124117, 4238, 12827, 52106, 71, 11833, 117, 38116, 27111, 106
40, 119, 5847, 109105, 2357, 105122, 63109, 27124, 44115, 10543, 99, 41
120, 4643, 1327, 27, 4318, 11728, 11648, 27125, 7107, 68114, 4034, 31
133, 124, 115, 4345, 120, 4330, 27127, 2731, 18, 28, 48116, 125146);
 
stem and leaf plot(data)
END
</syntaxhighlight>
{{out}}
<pre>
0| 7 777
1| 2 3 8 82388
2| 3 5 7 7 7 7 7 7 8 8 9 9357777778899
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| 2 3 7 8 823788
6| 1 3 8138
7| 1
8|
9| 6 969
10| 4 5 5 5 5 6 7 9 9 94555567999
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| 1 2 3 91239
14| 1 616
</pre>
 
7

edits