Stem-and-leaf plot: Difference between revisions

Added Algol 68
(added Arturo)
(Added Algol 68)
Line 220:
13 | 1 2 3 9
14 | 1 6
</pre>
 
=={{header|ALGOL 68}}==
{{works with|ALGOL 68G|Any - tested with release 2.8.3.win32}}
{{libheader|ALGOL 68-rows}}
<syntaxhighlight lang="algol68">
BEGIN # produce a stem and leaf plot of some numbers, leaf = last digit, #
# stem = leading digits #
PR read "rows.incl.a68" PR # include row (array) utilities #
[]INT data = ( 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44
, 37, 113, 124, 37, 48, 127, 36, 29, 31, 125, 139
, 131, 115, 105, 132, 104, 123, 35, 113, 122, 42, 117
, 119, 58, 109, 23, 105, 63, 27, 44, 105, 99, 41
, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121
, 58, 114, 126, 53, 114, 96, 25, 109, 7, 31, 141
, 46, 13, 27, 43, 117, 116, 27, 7, 68, 40, 31
, 115, 124, 42, 128, 52, 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
);
# generates a stem-and-leaf plot of d, the stems and leaves are derived #
# from the elements by stem and leaf. f stem if the first stem value #
# the data is assumed to be sorted into stem then leaf order #
PROC stem and leaf plot = ( []INT d, INT f stem, PROC(INT)INT stem, leaf )VOID:
IF UPB d < LWB d THEN
print( ( "No data", newline ) )
ELSE
# there is some data to plot #
INT curr stem := f stem;
BOOL first := TRUE;
FOR i FROM LWB d TO UPB d DO
INT this stem = stem( d[ i ] );
INT this leaf = leaf( 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( this leaf, 0 ) ) )
OD
FI # stem and leaf plot # ;
 
# sort the data #
[ LWB data : UPB data ]INT sorted data := data;
QUICKSORT sorted data FROMELEMENT LWB sorted data TOELEMENT UPB sorted data;
# plot the data: stem = element / 10, leaf = element MOD 10 #
stem and leaf plot( sorted data, -1, ( INT n )INT: n OVER 10, ( INT n )INT: n MOD 10 )
 
END
</syntaxhighlight>
{{out}}
<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>
 
3,025

edits