Stem-and-leaf plot: Difference between revisions

m
(→‎Without external dependencies: Removed offensive comment.)
m (→‎{{header|Wren}}: Minor tidy)
 
(10 intermediate revisions by one other user not shown)
Line 543:
</pre>
 
=={{header|BBC BASIC}}==
==={{header|ANSI BASIC}}===
{{trans|QuickBASIC}}
{{works with|Decimal BASIC}}
<syntaxhighlight lang="basic">
100 PROGRAM StemAndLeafPlot
110 OPTION BASE 0
120 DIM Dat(120)
130 FOR I = 0 TO 120
140 READ Dat(I)
150 NEXT I
160 DATA 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
170 DATA 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
180 DATA 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
190 DATA 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
200 DATA 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
210 DATA 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
220 DATA 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
230 DATA 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
240 DATA 34, 133, 45, 120, 30, 127, 31, 116, 146
250 CALL LeafPlot(Dat)
260 END
270 REM ************************
1000 EXTERNAL SUB LeafPlot(A())
1010 CALL ShellSort(A)
1020 LET I = INT(A(0) / 10) - 1
1030 FOR J = 0 TO UBOUND(A)
1040 LET D = INT(A(J) / 10)
1050 DO WHILE D > I
1060 LET I = I + 1
1070 IF J <> 0 THEN PRINT
1080 PRINT USING "## |": I;
1090 LOOP
1100 PRINT USING "##": MOD(A(J), 10);
1110 NEXT J
1120 PRINT
1130 END SUB
1140 REM ************************
2000 EXTERNAL SUB ShellSort(A())
2010 LET N = UBOUND(A)
2020 LET Incr = INT(N / 2)
2030 DO WHILE Incr > 0
2040 FOR I = Incr TO N - 1
2050 LET J = I - Incr
2060 DO WHILE J >= 0
2070 IF A(J) > A(J + Incr) THEN
2080 REM SWAP A(J), A(J + Incr): J = J - Incr
2090 LET Tmp = A(J)
2100 LET A(J) = A(J + Incr)
2110 LET A(J + Incr) = Tmp
2120 LET J = J - Incr
2130 ELSE
2140 LET J = -1
2150 END IF
2160 LOOP
2170 NEXT I
2180 LET Incr = INT(Incr / 2)
2190 LOOP
2200 END SUB
</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>
 
==={{header|ASIC}}===
{{trans|QuickBASIC|A global array used instead of subroutine parameters.}}
<syntaxhighlight lang="basic">
REM Stem-and-leaf plot
DIM A(120)
DATA 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
DATA 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
DATA 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
DATA 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
DATA 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
DATA 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
DATA 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
DATA 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
DATA 34, 133, 45, 120, 30, 127, 31, 116, 146
FOR I = 0 TO 120
READ A(I)
NEXT I
N = 121
NMin1 = N - 1
GOSUB LeafPlot:
END
 
LeafPlot:
GOSUB ShellSortInt:
I = A(0) / 10
I = I - 1
FOR J = 0 TO NMin1
D = A(J) / 10
WHILE D > I
I = I + 1
IF J <> 0 THEN
PRINT
ENDIF
SI$ = STR$(I)
SI$ = RIGHT$(SI$, 2)
PRINT SI$;
PRINT " |";
WEND
AJMod10 = A(J) MOD 10
SI$ = STR$(AJMod10)
SI$ = RIGHT$(SI$, 2)
PRINT SI$;
NEXT J
PRINT
RETURN
 
ShellSortInt:
Incr = N / 2
WHILE Incr > 0
FOR I = Incr TO NMin1
J = I - Incr
JPlIncr = J + Incr
WHILE J >= 0
IF A(J) > A(JPlIncr) THEN
Tmp = A(J)
A(J) = A(JPlIncr)
A(JPlIncr) = Tmp
JPlIncr = J
J = J - Incr
ELSE
J = -1
ENDIF
WEND
NEXT I
Incr = Incr / 2
WEND
RETURN
</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>
 
==={{header|BBC BASIC}}===
{{works with|BBC BASIC for Windows}}
<syntaxhighlight lang="bbcbasic"> INSTALL @lib$+"SORTLIB"
Line 599 ⟶ 765:
13 | 1 2 3 9
14 | 1 6
</pre>
 
==={{header|FreeBASIC}}===
<syntaxhighlight lang="freebasic">' version 22-06-2015
' compile with: fbc -s console
' for boundry checks on array's compile with: fbc -s console -exx
' from the rosetta code FreeBASIC entry
#Define out_of_data 99999999 ' any number that is not in the set will do
 
Sub shellsort(s() As Integer)
' from the FreeBASIC entry at rosetta code
' sort from lower bound to the highter bound
Dim As Integer lb = LBound(s)
Dim As Integer ub = UBound(s)
Dim As Integer done, i, inc = ub - lb
 
Do
inc = inc / 2.2
If inc < 1 Then inc = 1
Do
done = 0
For i = lb To ub - inc
If s(i) > s(i + inc) Then
Swap s(i), s(i + inc)
done = 1
End If
Next
Loop Until done = 0
Loop Until inc = 1
 
End Sub
 
' ------=< TASK DATA >=------
 
Data 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
Data 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
Data 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
Data 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
Data 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
Data 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
Data 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
Data 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
Data 34, 133, 45, 120, 30, 127, 31, 116, 146
Data out_of_data
 
' ------=< MAIN >=------
 
Dim As String read_in
Dim As Integer i, x, y, count = -1 ' to let the index start on 0
Dim As Integer d()
ReDim d(300) ' big enough to hold data index start at 0
 
Do
Read i
If i = out_of_data Then Exit Do
count = count + 1
d(count) = i
Loop
 
ReDim Preserve d(count) ' trim the data array
shellsort(d()) ' sort data array
 
i = 0
For y = d(0) \ 10 To d(UBound(d)) \ 10
Print Using "#### |"; y;
Do
x = d(i) \ 10 ' \ = integer division
If y = x Then
Print Using "##"; d(i) Mod 10;
i = i + 1
Else
Exit Do
End If
Loop While i <= UBound(d)
Print ' force linefeed
Next
 
' empty keyboard buffer
While Inkey <> "" : Wend
Print : Print "hit any key to end program"
Sleep
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>
 
==={{header|GW-BASIC}}===
{{trans|QuickBASIC|A global array used instead of subroutine parameters.}}
{{works with|BASICA}}
<syntaxhighlight lang="gwbasic">
100 REM Stem-and-leaf plot
110 N% = 121: REM Array size
120 DIM A%(N% - 1)
130 FOR I% = 0 TO N% - 1
140 READ A%(I%)
150 NEXT I%
160 DATA 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
170 DATA 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
180 DATA 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
190 DATA 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
200 DATA 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
210 DATA 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
220 DATA 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
230 DATA 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
240 DATA 34, 133, 45, 120, 30, 127, 31, 116, 146
250 GOSUB 1000
260 END
990 REM ** Leaf plot
1000 GOSUB 2000
1010 I% = A%(0) \ 10 - 1
1020 FOR J% = 0 TO N% - 1
1030 D% = A%(J%) \ 10
1040 WHILE D% > I%
1050 I% = I% + 1
1060 IF J% THEN PRINT
1070 PRINT USING "## |"; I%;
1080 WEND
1090 PRINT USING "##"; A%(J%) MOD 10;
1100 NEXT J%
1110 PRINT
1120 RETURN
1990 REM ** Shell sort
2000 INCR% = N% \ 2
2010 WHILE INCR% > 0
2020 FOR I% = INCR% TO N% - 1
2030 J% = I% - INCR%
2040 WHILE J% >= 0
2050 IF A%(J%) > A%(J% + INCR%) THEN SWAP A%(J%), A%(J% + INCR%): J% = J% - INCR% ELSE J% = -1
2060 WEND
2070 NEXT I%
2080 INCR% = INCR% \ 2
2090 WEND
2100 RETURN
</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>
 
==={{header|PureBasic}}===
{{works with|PureBasic|4.41}}
<syntaxhighlight lang="purebasic">If OpenConsole()
Dim MyList(120)
Define i, j, StemMax, StemMin
Restore MyData ; Get the address of MyData, e.g. the data to print as a Stem-and-leaf plot
For a=0 To 120
Read.i MyList(a) ; Read the data into the used Array
If MyList(a)>StemMax
StemMax=MyList(a) ; Find the largest Stem layer at the same time
EndIf
If MyList(a)<StemMin
StemMin=MyList(a) ; Find the smallest Stem layer at the same time
EndIf
Next
StemMax/10: StemMin/10 ; Remove the leafs from the Stem limits
SortArray(MyList(),#PB_Sort_Ascending) ; Sort the data
For i=StemMin To StemMax
Print(RSet(Str(i),3)+" | ") ; Print the Stem
For j=0 To 120
If MyList(j)<10*i ; Skip all smaller then current
Continue
ElseIf MyList(j)>=10*(i+1) ; Break current print if a new Stem layer is reached
Break
Else
Print(Str(MyList(j)%10)+" ") ; Print all Leafs on this current Stem layer
EndIf
Next j
PrintN("")
Next i
Print(#CRLF$+#CRLF$+"Press ENTER to exit")
Input()
CloseConsole()
EndIf
DataSection
MyData:
Data.i 12,127, 28, 42, 39,113, 42, 18, 44,118, 44, 37,113,124, 37, 48,127, 36, 29, 31,125,139,131,115
Data.i 105,132,104,123, 35,113,122, 42,117,119, 58,109, 23,105, 63, 27, 44,105, 99, 41,128,121,116,125
Data.i 32, 61, 37,127, 29,113,121, 58,114,126, 53,114, 96, 25,109, 7, 31,141, 46, 13, 27, 43,117,116
Data.i 27, 7, 68, 40, 31,115,124, 42,128, 52, 71,118,117, 38, 27,106, 33,117,116,111, 40,119, 47,105
Data.i 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
EndDataSection</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>
 
==={{header|QuickBASIC}}===
{{trans|BBC BASIC|But Shell sort is used.}}
<syntaxhighlight lang="qbasic">
REM Stem-and-leaf plot
DECLARE SUB LeafPlot (X%())
DECLARE SUB ShellSortInt (A%())
 
CONST MAXDATNDX = 120
DIM Dat%(MAXDATNDX)
FOR I% = 0 TO MAXDATNDX
READ Dat%(I%)
NEXT I%
DATA 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
DATA 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
DATA 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
DATA 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
DATA 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
DATA 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
DATA 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
DATA 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
DATA 34, 133, 45, 120, 30, 127, 31, 116, 146
 
LeafPlot Dat%()
END
 
SUB LeafPlot (X%())
ShellSortInt X%()
I% = X%(0) \ 10 - 1
FOR J% = 0 TO UBOUND(X%)
D% = X%(J%) \ 10
WHILE D% > I%
I% = I% + 1
IF J% THEN PRINT
PRINT USING "## |"; I%;
WEND
PRINT USING "##"; X%(J%) MOD 10;
NEXT
PRINT
END SUB
 
SUB ShellSortInt (A%())
N% = UBOUND(A%) + 1
Incr% = N% \ 2
WHILE Incr% > 0
FOR I% = Incr% TO N% - 1
J% = I% - Incr%
WHILE J% >= 0
IF A%(J%) > A%(J% + Incr%) THEN
SWAP A%(J%), A%(J% + Incr%)
J% = J% - Incr%
ELSE
J% = -1
END IF
WEND
NEXT I%
Incr% = Incr% \ 2
WEND
END SUB
</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>
 
==={{header|uBasic/4tH}}===
<syntaxhighlight lang="text">Push 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
Push 0, 13 : Gosub _Read ' read 1st line of data
 
Push 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
Push 14, 27 : Gosub _Read ' read 2nd line of data
 
Push 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
Push 28, 41 : Gosub _Read ' read 3rd line of data
 
Push 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
Push 42, 55 : Gosub _Read ' read 4tH line of data
 
Push 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
Push 56, 69 : Gosub _Read ' read 5th line of data
 
Push 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
Push 70, 83 : Gosub _Read ' read 6th line of data
 
Push 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
Push 84, 97 : Gosub _Read ' read 7th line of data
 
Push 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
Push 98, 111 : Gosub _Read ' read 8th line of data
 
Push 34, 133, 45, 120, 30, 127, 31, 116, 146
Push 112, 120 : Gosub _Read ' read last line of data
 
Push 121 : Gosub _SimpleSort ' now sort 121 elements
 
i = @(0) / 10 - 1
For j = 0 To Pop() - 1 ' note array size was still on stack
d = @(j) / 10
Do While d > i
If j Print
i = i + 1
If i < 10 Print " "; ' align stem number
Print i;" |"; ' print stem number
Loop
Print @(j) % 10;" "; ' print leaf number
Next
Print ' print final LF
 
End
 
' simplest sorting algorithm
_SimpleSort ' ( n -- n)
For x = 0 To Tos() - 1
For y = x+1 To Tos() - 1
If @(x) > @ (y) Then ' if larger, switch elements
Push @(y)
@(y) = @(x)
@(x) = Pop()
Endif
Next
Next
 
Return
 
' read a line of data backwards
_Read ' (.. n1 n2 -- ..)
For x = Pop() To Pop() Step -1 ' loop from n2 to n1
@(x) = Pop() ' get element from stack
Next
Return</syntaxhighlight>
Output:
<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
 
0 OK, 0:2037
</pre>
 
Line 1,230 ⟶ 1,787:
14|16
</pre>
 
=={{header|FreeBASIC}}==
<syntaxhighlight lang="freebasic">' version 22-06-2015
' compile with: fbc -s console
' for boundry checks on array's compile with: fbc -s console -exx
' from the rosetta code FreeBASIC entry
#Define out_of_data 99999999 ' any number that is not in the set will do
 
Sub shellsort(s() As Integer)
' from the FreeBASIC entry at rosetta code
' sort from lower bound to the highter bound
Dim As Integer lb = LBound(s)
Dim As Integer ub = UBound(s)
Dim As Integer done, i, inc = ub - lb
 
Do
inc = inc / 2.2
If inc < 1 Then inc = 1
Do
done = 0
For i = lb To ub - inc
If s(i) > s(i + inc) Then
Swap s(i), s(i + inc)
done = 1
End If
Next
Loop Until done = 0
Loop Until inc = 1
 
End Sub
 
' ------=< TASK DATA >=------
 
Data 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
Data 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
Data 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
Data 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
Data 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
Data 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
Data 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
Data 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
Data 34, 133, 45, 120, 30, 127, 31, 116, 146
Data out_of_data
 
' ------=< MAIN >=------
 
Dim As String read_in
Dim As Integer i, x, y, count = -1 ' to let the index start on 0
Dim As Integer d()
ReDim d(300) ' big enough to hold data index start at 0
 
Do
Read i
If i = out_of_data Then Exit Do
count = count + 1
d(count) = i
Loop
 
ReDim Preserve d(count) ' trim the data array
shellsort(d()) ' sort data array
 
i = 0
For y = d(0) \ 10 To d(UBound(d)) \ 10
Print Using "#### |"; y;
Do
x = d(i) \ 10 ' \ = integer division
If y = x Then
Print Using "##"; d(i) Mod 10;
i = i + 1
Else
Exit Do
End If
Loop While i <= UBound(d)
Print ' force linefeed
Next
 
' empty keyboard buffer
While Inkey <> "" : Wend
Print : Print "hit any key to end program"
Sleep
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>
 
=={{header|Go}}==
Line 2,945 ⟶ 3,405:
14 | 1 6
</pre>
 
=={{header|PureBasic}}==
{{works with|PureBasic|4.41}}
 
'''PureBasic Code'''
<syntaxhighlight lang="purebasic">If OpenConsole()
Dim MyList(120)
Define i, j, StemMax, StemMin
Restore MyData ; Get the address of MyData, e.g. the data to print as a Stem-and-leaf plot
For a=0 To 120
Read.i MyList(a) ; Read the data into the used Array
If MyList(a)>StemMax
StemMax=MyList(a) ; Find the largest Stem layer at the same time
EndIf
If MyList(a)<StemMin
StemMin=MyList(a) ; Find the smallest Stem layer at the same time
EndIf
Next
StemMax/10: StemMin/10 ; Remove the leafs from the Stem limits
SortArray(MyList(),#PB_Sort_Ascending) ; Sort the data
For i=StemMin To StemMax
Print(RSet(Str(i),3)+" | ") ; Print the Stem
For j=0 To 120
If MyList(j)<10*i ; Skip all smaller then current
Continue
ElseIf MyList(j)>=10*(i+1) ; Break current print if a new Stem layer is reached
Break
Else
Print(Str(MyList(j)%10)+" ") ; Print all Leafs on this current Stem layer
EndIf
Next j
PrintN("")
Next i
Print(#CRLF$+#CRLF$+"Press ENTER to exit")
Input()
CloseConsole()
EndIf
DataSection
MyData:
Data.i 12,127, 28, 42, 39,113, 42, 18, 44,118, 44, 37,113,124, 37, 48,127, 36, 29, 31,125,139,131,115
Data.i 105,132,104,123, 35,113,122, 42,117,119, 58,109, 23,105, 63, 27, 44,105, 99, 41,128,121,116,125
Data.i 32, 61, 37,127, 29,113,121, 58,114,126, 53,114, 96, 25,109, 7, 31,141, 46, 13, 27, 43,117,116
Data.i 27, 7, 68, 40, 31,115,124, 42,128, 52, 71,118,117, 38, 27,106, 33,117,116,111, 40,119, 47,105
Data.i 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
EndDataSection</syntaxhighlight>
 
'''Output'''
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
 
=={{header|Python}}==
Line 3,975 ⟶ 4,370:
13 1'2'3'9
14 1'6
</pre>
 
=={{header|uBasic/4tH}}==
<syntaxhighlight lang="text">Push 12, 127, 28, 42, 39, 113, 42, 18, 44, 118, 44, 37, 113, 124
Push 0, 13 : Gosub _Read ' read 1st line of data
 
Push 37, 48, 127, 36, 29, 31, 125, 139, 131, 115, 105, 132, 104, 123
Push 14, 27 : Gosub _Read ' read 2nd line of data
 
Push 35, 113, 122, 42, 117, 119, 58, 109, 23, 105, 63, 27, 44, 105
Push 28, 41 : Gosub _Read ' read 3rd line of data
 
Push 99, 41, 128, 121, 116, 125, 32, 61, 37, 127, 29, 113, 121, 58
Push 42, 55 : Gosub _Read ' read 4tH line of data
 
Push 114, 126, 53, 114, 96, 25, 109, 7, 31, 141, 46, 13, 27, 43
Push 56, 69 : Gosub _Read ' read 5th line of data
 
Push 117, 116, 27, 7, 68, 40, 31, 115, 124, 42, 128, 52, 71, 118
Push 70, 83 : Gosub _Read ' read 6th line of data
 
Push 117, 38, 27, 106, 33, 117, 116, 111, 40, 119, 47, 105, 57, 122
Push 84, 97 : Gosub _Read ' read 7th line of data
 
Push 109, 124, 115, 43, 120, 43, 27, 27, 18, 28, 48, 125, 107, 114
Push 98, 111 : Gosub _Read ' read 8th line of data
 
Push 34, 133, 45, 120, 30, 127, 31, 116, 146
Push 112, 120 : Gosub _Read ' read last line of data
 
Push 121 : Gosub _SimpleSort ' now sort 121 elements
 
i = @(0) / 10 - 1
For j = 0 To Pop() - 1 ' note array size was still on stack
d = @(j) / 10
Do While d > i
If j Print
i = i + 1
If i < 10 Print " "; ' align stem number
Print i;" |"; ' print stem number
Loop
Print @(j) % 10;" "; ' print leaf number
Next
Print ' print final LF
 
End
 
' simplest sorting algorithm
_SimpleSort ' ( n -- n)
For x = 0 To Tos() - 1
For y = x+1 To Tos() - 1
If @(x) > @ (y) Then ' if larger, switch elements
Push @(y)
@(y) = @(x)
@(x) = Pop()
Endif
Next
Next
 
Return
 
' read a line of data backwards
_Read ' (.. n1 n2 -- ..)
For x = Pop() To Pop() Step -1 ' loop from n2 to n1
@(x) = Pop() ' get element from stack
Next
Return</syntaxhighlight>
Output:
<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
 
0 OK, 0:2037
</pre>
 
Line 4,120 ⟶ 4,430:
{{trans|Kotlin}}
{{libheader|Wren-fmt}}
<syntaxhighlight lang="ecmascriptwren">import "./fmt" for Fmt
 
var leafPlot = Fn.new { |x|
Line 4,166 ⟶ 4,476:
13 | 1 2 3 9
14 | 1 6
</pre>
 
=={{header|XPL0}}==
{{trans|QuickBASIC}}
{{works with|EXPL-32}}
<syntaxhighlight lang="xpl0">
\ Stem-and-leaf plot
code Rem=2, CrLf=9, Text=12;
code real RlOut=48, Float=49, Format=52;
define DataSize = 121;
integer Data;
 
procedure ShellSortInt(A, N);
integer A, N;
integer I, J, Incr, Tmp;
begin
Incr:= N / 2;
while Incr > 0 do
begin
for I:= Incr, N - 1 do
begin
J:= I - Incr;
while J >= 0 do
begin
if A(J) > A(J + Incr) then
begin
Tmp:= A(J);
A(J):= A(J + Incr);
A(J + Incr):= Tmp;
J:= J - Incr
end
else
J:= -1
end;
end;
Incr:= Incr / 2
end;
end;
 
procedure LeafPlot (X, N);
integer X, N;
integer D, I, J;
begin
ShellSortInt(X, N);
I:= X(0) / 10 - 1;
Format(2,0);
for J:= 0, N - 1 do
begin
D:= X(J) / 10;
while D > I do
begin
I:= I + 1;
if J then CrLf(0);
RlOut(0, Float(I)); Text(0, " |");
end;
RlOut(0, Float(Rem(X(J) / 10)));
end;
CrLf(0);
end;
 
begin
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];
LeafPlot(Data, DataSize)
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>
 
9,476

edits