Loops/Break: Difference between revisions
→{{header|langur}}
(HolyC) |
Langurmonkey (talk | contribs) |
||
(107 intermediate revisions by 63 users not shown) | |||
Line 2:
;Task:
Show a loop which prints random numbers (each number newly generated each loop) from
If a number is
Otherwise, generate and print a second random number before restarting the loop.
If the number
;Related tasks:
* [[Loop over multiple arrays simultaneously]]
* [[Loops/Break]]
* [[Loops/Continue]]
* [[Loops/Do-while]]
* [[Loops/Downward for]]
* [[Loops/For]]
* [[Loops/For with a specified step]]
* [[Loops/Foreach]]
* [[Loops/Increment loop index within loop body]]
* [[Loops/Infinite]]
* [[Loops/N plus one half]]
* [[Loops/Nested]]
* [[Loops/While]]
* [[Loops/with multiple ranges]]
<br><br>
=={{header|11l}}==
{{trans|Python}}
<syntaxhighlight lang="11l">L
V a = random:(20)
print(a)
I a == 10
L.break
V b = random:(20)
print(b)</syntaxhighlight>
=={{header|360 Assembly}}==
<
LOOPBREA CSECT
USING LOOPBREA,R13 base register
Line 50 ⟶ 77:
XDEC DS CL12
YREGS
END LOOPBREA</
{{out}}
<pre>
Line 67 ⟶ 94:
=={{header|6502 Assembly}}==
Code is called as a subroutine (i.e. JSR LoopBreakSub). Specific OS/hardware routines for generating random numbers and printing are left unimplemented.
<
Line 83 ⟶ 110:
Break: PLA ;restore accumulator from stack
RTS ;return from subroutine</
=={{header|AArch64 Assembly}}==
{{works with|as|Raspberry Pi 3B version Buster 64 bits}}
<syntaxhighlight lang="aarch64 assembly">
/* ARM assembly AARCH64 Raspberry PI 3B */
/* program loopbreak64.s */
/*******************************************/
/* Constantes file */
/*******************************************/
/* for this file see task include a file in language AArch64 assembly*/
.include "../includeConstantesARM64.inc"
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessEndLoop: .asciz "loop break with value : \n"
szMessResult: .asciz "Resultat = @ \n" // message result
.align 4
qGraine: .quad 12345678
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
sZoneConv: .skip 24
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: // entry of program
1: // begin loop
mov x4,20
2:
mov x0,19
bl genereraleas // generate number
cmp x0,10 // compar value
beq 3f // break if equal
ldr x1,qAdrsZoneConv // display value
bl conversion10 // call function with 2 parameter (x0,x1)
ldr x0,qAdrszMessResult
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at third @ character
bl affichageMess // display message final
subs x4,x4,1 // decrement counter
bgt 2b // loop if greather
b 1b // begin loop one
3:
mov x2,x0 // save value
ldr x0,qAdrszMessEndLoop
bl affichageMess // display message
mov x0,x2
ldr x1,qAdrsZoneConv
bl conversion10 // call function with 2 parameter (x0,x1)
ldr x0,qAdrszMessResult
ldr x1,qAdrsZoneConv
bl strInsertAtCharInc // insert result at third @ character
bl affichageMess // display message
100: // standard end of the program
mov x0,0 // return code
mov x8,EXIT // request to exit program
svc 0 // perform the system call
qAdrsZoneConv: .quad sZoneConv
qAdrszMessResult: .quad szMessResult
qAdrszMessEndLoop: .quad szMessEndLoop
/***************************************************/
/* Generation random number */
/***************************************************/
/* x0 contains limit */
genereraleas:
stp x1,lr,[sp,-16]! // save registers
stp x2,x3,[sp,-16]! // save registers
ldr x3,qAdrqGraine // load graine
ldr x2,[x3]
lsr x1,x2,17 // see xorshift on wikipedia
eor x2,x2,x1
lsl x1,x2,31
eor x2,x2,x1
lsr x1,x2,8
eor x1,x2,x1
str x1,[x3] // save graine for the next call
udiv x1,x2,x0 // divide by value maxi
msub x0,x1,x0,x2 // résult = remainder
100: // end function
ldp x2,x3,[sp],16 // restaur 2 registers
ldp x1,lr,[sp],16 // restaur 2 registers
ret // return to address lr x30
/********************************************************************/
qAdrqGraine: .quad qGraine
/********************************************************/
/* File Include fonctions */
/********************************************************/
/* for this file see task include a file in language AArch64 assembly */
.include "../includeARM64.inc"
</syntaxhighlight>
{{output}}
<pre>
Resultat = 1
Resultat = 8
Resultat = 11
Resultat = 11
Resultat = 5
Resultat = 3
Resultat = 5
Resultat = 12
Resultat = 18
Resultat = 14
loop break with value :
Resultat = 10
</pre>
=={{header|Action!}}==
<syntaxhighlight lang="action!">PROC Main()
BYTE v
PrintE("Before loop")
DO
v=Rand(20)
PrintBE(v)
IF v=10 THEN
EXIT
FI
OD
PrintE("After loop")
RETURN</syntaxhighlight>
{{out}}
[https://gitlab.com/amarok8bit/action-rosetta-code/-/raw/master/images/Break.png Screenshot from Atari 8-bit computer]
<pre>
Before loop
2
6
3
4
11
17
5
17
10
After loop
</pre>
=={{header|Ada}}==
<
with Ada.Numerics.Discrete_Random;
Line 103 ⟶ 274:
Put_Line (Value_Type'Image (B));
end loop;
end Test_Loop_Break;</
=={{header|Aime}}==
<
main(void)
{
Line 125 ⟶ 296:
return 0;
}</
=={{header|ALGOL 60}}==
{{works with|ALGOL 60|OS/360}}
<syntaxhighlight lang="algol60">'BEGIN' 'COMMENT' Loops/Break - ALGOL60 - 18/06/2018;
'INTEGER' SEED;
'INTEGER' 'PROCEDURE' RANDOM(N);
'VALUE' N; 'INTEGER' N;
'BEGIN'
SEED:=(SEED*19157+12347) '/' 21647;
RANDOM:=SEED-(SEED '/' N)*N+1
'END' RANDOM;
'INTEGER' I,J,K;
SYSACT(1,6,120);SYSACT(1,8,60);SYSACT(1,12,1);'COMMENT' open print;
SEED:=31567;
J:=0;
'FOR' I:=1, I+1 'WHILE' I 'LESS' 100 'DO' 'BEGIN'
J:=J+1;
K:=RANDOM(20);
OUTINTEGER(1,K);
'IF' J=8 'THEN' 'BEGIN'
SYSACT(1,14,1); 'COMMENT' skip line;
J:=0
'END';
'IF' K=10 'THEN' 'GOTO' LAB
'END';
LAB:
SYSACT(1,14,1); 'COMMENT' skip line;
'END'</syntaxhighlight>
{{out}}
<pre>
+17 +4 +20 +3 +16 +5 +1 +17
+11 +2 +12 +5 +7 +6 +10
</pre>
=={{header|ALGOL 68}}==
Line 132 ⟶ 336:
{{wont work with|ALGOL 68G|Any - in a68G next random takes no seed argument}}
{{works with|ELLA ALGOL 68|Any (with appropriate job cards)}}
<
INT a, b;
INT seed := 4; # chosen by a fair dice roll, guaranteed to be random c.f. http://xkcd.com/221/ #
Line 144 ⟶ 348:
OD;
print(new line)
)</
{{out}}
<pre style="height:25ex;overflow:scroll">
Line 176 ⟶ 380:
+7 +4
+10
</pre>
=={{header|Amazing Hopper}}==
<p>Flavour "Jambo"</p>
<syntaxhighlight lang="c">
#include <jambo.h>
Main
Loop
Break if ' Int rand(20) ---show--- Is equal to (10) '
Printnl ( "--", Int rand(20) )
Back
Print '"\nEnd of Loop\n" '
End
</syntaxhighlight>
<p>Assembler Hopper version of this program:</p>
<syntaxhighlight lang="amazing hopper">
main:
____CODE_JUMP____997416047:,
;{20};rand;int;show;eqto(10);jt(____CODE_JUMP____803885359)
{"--"};{20};rand;int;{"\n"}print;
,jmp(____CODE_JUMP____997416047),____CODE_JUMP____803885359:,
{"\nEnd of Loop\n"};print;
emptystack?do{{0}};return
</syntaxhighlight>
{{out}}
<pre>
xxxx@debian:~/Proy$ hopper3 jm/rand.jambo
11--19
4--4
1--9
0--13
19--18
12--6
10
End of Loop
xxxx@debian:~/Proy$ hopper3 jm/rand.jambo
19--10
10
End of Loop
xxxx@debian:~/Proy$ hopper3 jm/rand.jambo
10
End of Loop
xxxx@debian:~/Proy$ hopper3 jm/rand.jambo
0--14
7--1
18--11
15--15
17--9
7--1
10
End of Loop
xxxx@debian:~/Proy$ hopper3 jm/rand.jambo
13--0
17--12
16--2
19--14
2--6
19--10
10
End of Loop
xxxx@debian:~/Proy$
</pre>
=={{header|AppleScript}}==
<
set a to random number from 0 to 19
if a is 10 then
Line 187 ⟶ 455:
set b to random number from 0 to 19
log a & b
end repeat</
Line 235 ⟶ 503:
=={{header|Arc}}==
<
(while t
(let x (rand 20)
(prn "a: " x)
(if (is x
(break)))
(prn "b: " (rand 20))))</
=={{header|ARM Assembly}}==
{{works with|as|Raspberry Pi}}
<syntaxhighlight lang="arm assembly">
/* ARM assembly Raspberry PI */
/* program loopbreak.s */
/* Constantes */
.equ STDOUT, 1 @ Linux output console
.equ EXIT, 1 @ Linux syscall
.equ WRITE, 4 @ Linux syscall
/*********************************/
/* Initialized data */
/*********************************/
.data
szMessEndLoop: .asciz "loop break with value : \n"
szMessResult: .ascii "Resultat = " @ message result
sMessValeur: .fill 12, 1, ' '
.asciz "\n"
.align 4
iGraine: .int 123456
/*********************************/
/* UnInitialized data */
/*********************************/
.bss
/*********************************/
/* code section */
/*********************************/
.text
.global main
main: @ entry of program
push {fp,lr} @ saves 2 registers
1: @ begin loop
mov r4,#20
2:
mov r0,#19
bl genereraleas @ generate number
cmp r0,#10 @ compar value
beq 3f @ break if equal
ldr r1,iAdrsMessValeur @ display value
bl conversion10 @ call function with 2 parameter (r0,r1)
ldr r0,iAdrszMessResult
bl affichageMess @ display message
subs r4,#1 @ decrement counter
bgt 2b @ loop if greather
b 1b @ begin loop one
3:
mov r2,r0 @ save value
ldr r0,iAdrszMessEndLoop
bl affichageMess @ display message
mov r0,r2
ldr r1,iAdrsMessValeur
bl conversion10 @ call function with 2 parameter (r0,r1)
ldr r0,iAdrszMessResult
bl affichageMess @ display message
100: @ standard end of the program
mov r0, #0 @ return code
pop {fp,lr} @restaur 2 registers
mov r7, #EXIT @ request to exit program
svc #0 @ perform the system call
iAdrsMessValeur: .int sMessValeur
iAdrszMessResult: .int szMessResult
iAdrszMessEndLoop: .int szMessEndLoop
/******************************************************************/
/* display text with size calculation */
/******************************************************************/
/* r0 contains the address of the message */
affichageMess:
push {r0,r1,r2,r7,lr} @ save registres
mov r2,#0 @ counter length
1: @ loop length calculation
ldrb r1,[r0,r2] @ read octet start position + index
cmp r1,#0 @ if 0 its over
addne r2,r2,#1 @ else add 1 in the length
bne 1b @ and loop
@ so here r2 contains the length of the message
mov r1,r0 @ address message in r1
mov r0,#STDOUT @ code to write to the standard output Linux
mov r7, #WRITE @ code call system "write"
svc #0 @ call systeme
pop {r0,r1,r2,r7,lr} @ restaur des 2 registres */
bx lr @ return
/******************************************************************/
/* Converting a register to a decimal */
/******************************************************************/
/* r0 contains value and r1 address area */
conversion10:
push {r1-r4,lr} @ save registers
mov r3,r1
mov r2,#10
1: @ start loop
bl divisionpar10 @ r0 <- dividende. quotient ->r0 reste -> r1
add r1,#48 @ digit
strb r1,[r3,r2] @ store digit on area
sub r2,#1 @ previous position
cmp r0,#0 @ stop if quotient = 0 */
bne 1b @ else loop
@ and move spaces in first on area
mov r1,#' ' @ space
2:
strb r1,[r3,r2] @ store space in area
subs r2,#1 @ @ previous position
bge 2b @ loop if r2 >= zéro
100:
pop {r1-r4,lr} @ restaur registres
bx lr @return
/***************************************************/
/* division par 10 signé */
/* Thanks to http://thinkingeek.com/arm-assembler-raspberry-pi/*
/* and http://www.hackersdelight.org/ */
/***************************************************/
/* r0 dividende */
/* r0 quotient */
/* r1 remainder */
divisionpar10:
/* r0 contains the argument to be divided by 10 */
push {r2-r4} /* save registers */
mov r4,r0
mov r3,#0x6667 @ r3 <- magic_number lower
movt r3,#0x6666 @ r3 <- magic_number upper
smull r1, r2, r3, r0 @ r1 <- Lower32Bits(r1*r0). r2 <- Upper32Bits(r1*r0)
mov r2, r2, ASR #2 /* r2 <- r2 >> 2 */
mov r1, r0, LSR #31 /* r1 <- r0 >> 31 */
add r0, r2, r1 /* r0 <- r2 + r1 */
add r2,r0,r0, lsl #2 /* r2 <- r0 * 5 */
sub r1,r4,r2, lsl #1 /* r1 <- r4 - (r2 * 2) = r4 - (r0 * 10) */
pop {r2-r4}
bx lr /* leave function */
/***************************************************/
/* Generation random number */
/***************************************************/
/* r0 contains limit */
genereraleas:
push {r1-r4,lr} @ save registers
ldr r4,iAdriGraine
ldr r2,[r4]
ldr r3,iNbDep1
mul r2,r3,r2
ldr r3,iNbDep1
add r2,r2,r3
str r2,[r4] @ maj de la graine pour l appel suivant
mov r1,r0 @ divisor
mov r0,r2 @ dividende
bl division
mov r0,r3 @ résult = remainder
100: @ end function
pop {r1-r4,lr} @ restaur registers
bx lr @ return
/********************************************************************/
iAdriGraine: .int iGraine
iNbDep1: .int 0x343FD
iNbDep2: .int 0x269EC3
/***************************************************/
/* integer division unsigned */
/***************************************************/
division:
/* r0 contains dividend */
/* r1 contains divisor */
/* r2 returns quotient */
/* r3 returns remainder */
push {r4, lr}
mov r2, #0 @ init quotient
mov r3, #0 @ init remainder
mov r4, #32 @ init counter bits
b 2f
1: @ loop
movs r0, r0, LSL #1 @ r0 <- r0 << 1 updating cpsr (sets C if 31st bit of r0 was 1)
adc r3, r3, r3 @ r3 <- r3 + r3 + C. This is equivalent to r3 <- (r3 << 1) + C
cmp r3, r1 @ compute r3 - r1 and update cpsr
subhs r3, r3, r1 @ if r3 >= r1 (C=1) then r3 <- r3 - r1
adc r2, r2, r2 @ r2 <- r2 + r2 + C. This is equivalent to r2 <- (r2 << 1) + C
2:
subs r4, r4, #1 @ r4 <- r4 - 1
bpl 1b @ if r4 >= 0 (N=0) then loop
pop {r4, lr}
bx lr
</syntaxhighlight>
=={{header|Arturo}}==
<syntaxhighlight lang="rebol">while ø [
a: random 0 19
prints [a ""]
if a=10 -> break
b: random 0 19
print b
]
print ""</syntaxhighlight>
{{out}}
<pre>11 1
11 16
19 14
17 0
18 11
9 9
1 15
5 5
1 16
7 10
10 </pre>
=={{header|AutoHotkey}}==
<syntaxhighlight lang="autohotkey">Loop
{
Random, var, 0, 19
Line 253 ⟶ 737:
output = %output%`n%var%
}
MsgBox % output</
=={{header|Avail}}==
<syntaxhighlight lang="avail">rng ::= a pRNG;
checked : [0..19];
Do [
checked : = rng's next [0..19];
Print: “checked”;
] while checked ≠ 10 alternate with [
Print: " " ++ “rng's next [0..19]” ++ "\n";
];</syntaxhighlight>
This demonstrates two interesting Avail features: the ''alternate with'' loop structures, which provide two separate code blocks that are run with a check in between, and the random number generator's ability to pick an item from the ranger of a given number type (<code>[0..19]</code> is an expression generating a ''type'' whose values are integers in the range 0-19 inclusive).
=={{header|AWK}}==
<
srand() # randomize the RNG
for (;;) {
print n = int(rand() * 20)
Line 263 ⟶ 760:
print int(rand() * 20)
}
}</
=={{header|Axe}}==
Because Axe only supports breaking out of loops as end conditions, the behavior must be simulated using a return statement. Note, however, that this will exit the current call context, not the necessarily just the current loop.
<
rand^20→A
Disp A▶Dec
Line 274 ⟶ 771:
rand^20→B
Disp B▶Dec,i
End</
=={{header|BASIC}}==
==={{header|Applesoft BASIC}}===
<syntaxhighlight lang="gwbasic">FOR I = 0 TO 1 STEP 0 : N = INT(RND(1) * 20) : PRINT " "N; : IF N <> 10 THEN ? ","INT(RND(1) * 20); : NEXT</syntaxhighlight>
==={{header|BaCon}}===
<
REPEAT
number = RANDOM(20)
PRINT "first " ,number
IF number =
BREAK
ENDIF
PRINT "second ",RANDOM(20)
UNTIL FALSE</
==={{header|BASIC256}}===
<syntaxhighlight lang="basic256">do
i = int(rand * 19)
print i; " ";
if i = 10 then exit do
i = int(rand * 19)
print i; " ";
until false
print
end</syntaxhighlight>
==={{header|bootBASIC}}===
In bootBASIC, the rnd statement returns an unsigned integer between 0 and 255. 255 divided by 19 gives us 13 without the fraction part, so 13 is the number to divide the random number by to get a range of 0 to 19. All division is integer division.
<syntaxhighlight lang="BASIC">
10 a=rnd/13
20 print a ;
30 if a-10 goto 50
40 goto 100
50 a=rnd/13
55 print ", ";
60 print a
70 goto 10
100 print
</syntaxhighlight>
{{out}}
<pre>
13, 19
11, 14
18, 4
17, 0
12, 15
0, 13
7, 19
2, 7
1, 3
6, 18
13, 6
9, 10
4, 7
15, 7
10
</pre>
==={{header|Commodore BASIC}}===
In Commodore BASIC, the function RND() generates a floating point number from 0.0 to 1.0 (exclusive).
<
20 A = INT(RND(1)*20)
30 PRINT A
Line 298 ⟶ 839:
60 PRINT B
70 GOTO 20
80 END</
==={{header|IS-BASIC}}===
<syntaxhighlight lang="is-basic">100 RANDOMIZE
110 DO
120 LET A=RND(20)+1
130 PRINT A,
140 IF A=10 THEN EXIT DO
150 PRINT RND(20)+1
160 LOOP</syntaxhighlight>
==={{header|QuickBASIC}}===
{{works with|QuickBasic|4.5}}
<
a = int(rnd * 20)
print a
Line 308 ⟶ 858:
b = int(rnd * 20)
print b
loop</
==={{header|True BASIC}}===
<syntaxhighlight lang="basic">RANDOMIZE
DO
LET i = INT(RND * 19)
PRINT i; " ";
IF i = 10 THEN
EXIT DO
END IF
LET i = INT(RND * 19)
PRINT i; " ";
LOOP
PRINT
END</syntaxhighlight>
==={{header|uBasic/4tH}}===
In uBasic/4tH '''UNTIL''' ''<cond>'' is equivalent to '''IF''' ''<cond>'' '''THEN BREAK'''. You can add as many '''UNTIL''' and '''WHILE''' as required in '''FOR..NEXT''' or '''DO..LOOP''' loops.
<syntaxhighlight lang="qbasic">Do
n = Rnd(20)
Print n
Until n=10
Print Rnd(20)
Loop</syntaxhighlight>
==={{header|ZX Spectrum Basic}}===
On the ZX Spectrum, for loops must be terminated through the NEXT statement, otherwise a memory leak will occur. To terminate a loop prematurely, set the loop counter to the last iterative value and jump to the NEXT statement:
<
20 IF l = 10 THEN LET l = 20: GO TO 40: REM terminate the loop
30 PRINT l
40 NEXT l
50 STOP</
The correct solution:
<
20 PRINT a
30 IF a = 10 THEN STOP
40 PRINT INT (RND * 20)
50 GO TO 10</
=={{header|Batch File}}==
<
:loop
set /a N=%RANDOM% %% 20
Line 335 ⟶ 910:
set /a N=%RANDOM% %% 20
echo %N%
goto loop</
=={{header|BBC BASIC}}==
{{works with|BBC BASIC for Windows}}
<
num% = RND(20)-1
PRINT num%
IF num%=10 THEN EXIT REPEAT
PRINT RND(20)-1
UNTIL FALSE</
=={{header|bc}}==
<
scale = 0
Line 369 ⟶ 944:
r() /* print 2nd number */
}
quit</
=={{header|Befunge}}==
<syntaxhighlight lang="befunge">
>60v *2\<
>?>\1-:|
1+ $
>^ 7
v.:%++67<
>55+-#v_@
>60v *2\<
>?>\1-:|
1+ $
>^ 7
^ .%++67<
</syntaxhighlight>
=={{header|C}}==
<syntaxhighlight lang="c">
int main(){
time_t t;
int a, b;
for(;;){
a = rand() % 20;
printf("%d\n", a);
if(a == 10)
b = rand() %
printf("%d\n", b);
}
return 0;
}</syntaxhighlight>
Output (example):
<pre>
12
Line 399 ⟶ 984:
2
8
10
18
9
9
4
10
</pre>
=={{header|C sharp|C#}}==
<
{
static void Main(string[] args)
Line 425 ⟶ 1,010:
Console.ReadLine();
}
}</
=={{header|C++}}==
<
#include <ctime>
#include <cstdlib>
int main(){
srand(time(NULL)); // randomize seed
while(true){
const int a = rand() % 20; // biased towards lower numbers if RANDMAX % 20 > 0
std::cout << a << std::endl;
if(a == 10)
break;
const int b =
std::cout << b << std::endl;
}
return 0;
}</syntaxhighlight>
=={{header|Chapel}}==
<
var r = new RandomStream();
Line 458 ⟶ 1,041:
writeln(b);
}
delete r;</
=={{header|Chef}}==
"Liquify" is now depreciated in favor of "Liquefy", but my interpreter/compiler ([http://search.cpan.org/~smueller/Acme-Chef/ Acme::Chef]) works only with "Liquify" so that's how I'm leaving it. At least it'll work no matter which version you use.
<div style='width:full;overflow:scroll'>
<
Makes a whole lot of sauce for two people.
Line 520 ⟶ 1,103:
Pour contents of the 1st mixing bowl into the 1st baking dish.
Serves 2.</
</div>
=={{header|Clojure}}==
<
(println a)
(when-not (= 10 a)
(println b)
(recur more)))</
=={{header|COBOL}}==
{{works with|OpenCOBOL}}
<
PROGRAM-ID. Random-Nums.
Line 557 ⟶ 1,140:
COMPUTE Num = FUNCTION REM(FUNCTION RANDOM * 100, 20)
DISPLAY Num
.</
=={{header|CoffeeScript}}==
We can use print from the Rhino JavaScript shell as in the JavaScript example or console.log, with a result like this:
<
loop
print a = Math.random() * 20 // 1
break if a == 10
print Math.random() * 20 // 1
</syntaxhighlight>
=={{header|ColdFusion}}==
<
<Cfset randNum = 0>
<cfloop condition="randNum neq 10">
Line 578 ⟶ 1,161:
<Br>
</cfloop>
</syntaxhighlight>
{{out}}
My first two test outputs (I swear this is true)
Line 646 ⟶ 1,229:
=={{header|Common Lisp}}==
<
do (print a)
until (= a 10)
do (print (random 20)))</
=== Using DO ===
<syntaxhighlight lang="lisp">
(do ((a (random 20) (random 20))) ; Initialize to rand and set new rand on every loop
((= a 10) (write a)) ; Break condition and last step
(format t "~a~3T~a~%" a (random 20))) ; On every loop print formated `a' and rand `b'
</syntaxhighlight>
{{out}}
<pre>
19 7
8 16
17 10
19 12
7 16
5 19
16 1
8 8
3 18
3 5
3 3
9 7
1 15
1 10
14 10
2 4
13 6
10
</pre>
=={{header|D}}==
<
void main() {
Line 662 ⟶ 1,274:
write(uniform(0, 20), " ");
}
}</
{{out}}
<pre>2 4 9 5 3 7 4 4 14 14 3 7 13 8 13 6 10 </pre>
Line 668 ⟶ 1,280:
=={{header|dc}}==
{{trans|bc}}
<
0k [scale = 0]sz
Line 692 ⟶ 1,304:
0 0 =r p sz [Print 2nd number.]sz
0 0 =B [Continue loop.]sz
]sB 0 0 =B</
=={{header|Delphi}}==
<
{$APPTYPE CONSOLE}
Line 712 ⟶ 1,324:
end.
</syntaxhighlight>
=={{header|DWScript}}==
<
while True do begin
var num := RandomInt(20);
PrintLn(num);
if num=10 then Break;
end;</
=={{header|E}}==
<
def a := entropy.nextInt(20)
print(a)
Line 732 ⟶ 1,344:
}
println(" ", entropy.nextInt(20))
}</
=={{header|EasyLang}}==
<syntaxhighlight>
repeat
a = randint 20
print a
until a = 10
print randint 20
.
</syntaxhighlight>
=={{header|Eiffel}}==
<syntaxhighlight lang="eiffel">
example
-- Eiffel example code
local
n: INTEGER
r: RANDOMIZER
do
from
create r
n := r.random_integer_in_range (0 |..| 19)
until
n = 10
loop
n := r.random_integer_in_range (0 |..| 19)
end
end
</syntaxhighlight>
{{out}}
The output is superfluous and unneeded to read and understand what the Eiffel code is doing.
The test code is sufficient to prove that it works.
Uses randomizer library located at: https://github.com/ljr1981/randomizer
=={{header|Ela}}==
Line 740 ⟶ 1,385:
As a result, an output looks almost truly random:
<
loop = loop' 1
Line 751 ⟶ 1,396:
loop 10 ::: IO</
=={{header|Elixir}}==
{{works with|Elixir|1.2}}
<
def break, do: break(random)
Line 767 ⟶ 1,412:
end
Loops.break</
{{out}}
Line 785 ⟶ 1,430:
1, 17
13, 5
10
</pre>
=={{header|Emacs Lisp}}==
<syntaxhighlight lang="lisp">(defun wait_10 ()
(catch 'loop-break
(while 't
(let ((math (random 19)))
(if (= math 10)
(progn (message "Found value: %d" math)
(throw 'loop-break math))
(message "current number is: %d" math) ) ) ) ) )
(wait_10)</syntaxhighlight>
=={{header|EMal}}==
<syntaxhighlight lang="emal">
for ever
int a = random(20)
write(a)
if a == 10 do break end
writeLine("," + random(20))
end
writeLine()
</syntaxhighlight>
{{out}}
<pre>
19,14
10
</pre>
=={{header|Erlang}}==
<
-module(forever).
-export([main/0, for/0]).
Line 806 ⟶ 1,479:
for()
end.
</syntaxhighlight>
=={{header|ERRE}}==
<syntaxhighlight lang="erre">
LOOP
A=INT(RND(1)*20)
Line 816 ⟶ 1,489:
PRINT(INT(RND(1)*20))
END LOOP
</syntaxhighlight>
The <code>RND(X)</code> function returns a random integer from 0 to 1. X is a dummy argument.
=={{header|Euphoria}}==
<
while 1 do
i = rand(20) - 1
Line 828 ⟶ 1,501:
end if
printf(1, "%g ", {rand(20)-1})
end while</
The <code>rand()</code> function returns a random integer from 1 to the integer provided.
=={{header|F_Sharp|F#}}==
<syntaxhighlight lang="fsharp">
// Loops/Break. Nigel Galloway: February 21st., 2022
let n=System.Random()
let rec fN g=printf "%d " g; if g <> 10 then fN(n.Next(20))
fN(n.Next(20))
</syntaxhighlight>
=={{header|Factor}}==
Using <code>with-return</code>:
<
[ 20 random [ . ] [ 10 = [ return ] when ] bi 20 random . t ] loop
] with-return</
Idiomatic Factor:
<
=={{header|Fantom}}==
<
class ForBreak
{
Line 872 ⟶ 1,537:
}
}
</syntaxhighlight>
=={{header|Forth}}==
<
: main
Line 888 ⟶ 1,553:
10 = if leave then
i random .
loop ;</
=={{header|Fortran}}==
{{works with|Fortran|90 and later}}
<
implicit none
Line 908 ⟶ 1,573:
end do
end program Example</
{{works with|Fortran|77 and later}}
<
INTEGER I, RNDINT
Line 979 ⟶ 1,644:
ENDIF
RETURN
END</
{{works with|Fortran|66 and earlier}}
Line 987 ⟶ 1,652:
The RANDU routine is so notorious that latter-day compilers can supply their own RANDU (using a better method), and further, disregard a user-supplied RANDU routine so it may have to be called RANDUU or some other name!
<syntaxhighlight lang="fortran">
SUBROUTINE RANDU(IX,IY,YFL)
Copied from the IBM1130 Scientific Subroutines Package (1130-CM-02X): Programmer's Manual, page 60.
Line 1,019 ⟶ 1,684:
20 CONTINUE
END
</syntaxhighlight>
Output, converted to along the line:
0 13 4 19 1 7 2 12 4 7 14 11 6 4 0 9 5 12 16 19 18 2 0 13 2 7 10
Line 1,025 ⟶ 1,690:
=={{header|FreeBASIC}}==
<
Dim i As Integer
Line 1,040 ⟶ 1,705:
Print
Sleep</
Sample output
Line 1,050 ⟶ 1,715:
</pre>
=={{header|
<syntaxhighlight lang="frink">while true
{
a = random[0,19]
print["$a "]
if a == 10
break
b = random[0,19]
}</syntaxhighlight>
{{out}}
<pre>
</pre>
=={{header|FutureBasic}}==
<syntaxhighlight lang="futurebasic">include "NSLog.incl"
long num
do
num = rnd(20) - 1
NSLog(@"%ld",num)
until ( num == 10 )
HandleEvents</syntaxhighlight>
=={{header|Gambas}}==
<
Dim iRand As Integer
Line 1,099 ⟶ 1,751:
Until iRand = 10
End</syntaxhighlight> =={{header|Gambas}}==
'''[https://gambas-playground.proko.eu/?gist=65d2287312298a938e7e8eea8899e38b Click this link to run this code]'''
<
Dim byNo As Byte
Line 1,114 ⟶ 1,764:
Loop
End</
Output:
<pre>
Line 1,121 ⟶ 1,771:
=={{header|GAP}}==
<
a := Random(0, 19);
Print(a);
Line 1,137 ⟶ 1,787:
# 5 10
# 1 16
# 10</
=={{header|GDScript}}==
{{works with|Godot|4.0.1}}
{{trans|11l}}
<syntaxhighlight lang="gdscript">
extends MainLoop
func _process(_delta: float) -> bool:
randomize()
while true:
var a: int = randi_range(0, 19)
print(a)
if a == 10:
break
var b: int = randi_range(0, 19)
print(b)
return true # Exit
</syntaxhighlight>
=={{header|GML}}==
<
{
a = floor(random(19))
Line 1,149 ⟶ 1,821:
show_message(string(a))
}
</syntaxhighlight>
=={{header|Go}}==
<
import "fmt"
Line 1,169 ⟶ 1,841:
fmt.Println(b)
}
}</
=={{header|Groovy}}==
<
while (true) {
Line 1,180 ⟶ 1,852:
print ' '
println random.nextInt(20)
}</
=={{header|GW-BASIC}}==
<
20 WHILE NUM <> 10
30 NUM = INT(RND * 20)
40 PRINT NUM
50 WEND</
=={{header|Harbour}}==
<
LOCAL n
Line 1,202 ⟶ 1,874:
ENDDO
RETURN</
=={{header|Haskell}}==
<
import System.Random
Line 1,213 ⟶ 1,885:
unless (r==k) $ do
print =<< randomRIO (0,n)
loopBreak n k</
Use:
<syntaxhighlight lang
=={{header|Haxe}}==
<syntaxhighlight lang="haxe">class Program {
static public function main():Void {
while(true) {
var a = Std.random(20);
Sys.println(a);
if (a == 10)
break;
var b = Std.random(20);
Sys.println(b);
}
}
}</syntaxhighlight>
=={{header|hexiscript}}==
<syntaxhighlight lang="hexiscript">while true
let r rand 20
println r
if r = 10
break
endif
println rand 20
endwhile</syntaxhighlight>
=={{header|HicEst}}==
<
a = INT( RAN(10, 10) )
WRITE(name) a
Line 1,226 ⟶ 1,922:
ENDDO
10
END</
=={{header|HolyC}}==
<
while (1) {
a = RandU16 % 20;
Print("%d\n", a);
if (a ==
b = RandU16 % 20;
Print("%d\n", b);
}
</syntaxhighlight>
=={{header|Icon}} and {{header|Unicon}}==
<
while 10 ~= writes(?20-1) do write(", ",?20-1)
end</
Notes:
* For any positive integer i, ?i produces a value j where 1 <= j <= i
* Although this can be written with a break (e.g. repeat expression & break), there is no need to actually use one. (And it's ugly).
* Programmers new to Icon/Unicon need to understand that just about everything returns values including comparison operators, I/O functions like write/writes.
* This program will perform similarly but not identically under Icon and Unicon because the random operator ?i behaves differently. While both produce pseudo-random numbers a different generator is used. Also, the sequence produced by Icon begins with the same seed value and is repeatable whereas the sequence produced by Unicon does not. One way to force Icon to use different random sequences on each call would be to add the line <
=={{Header|Insitux}}==
<syntaxhighlight lang="insitux">
(while true
(print (let x (rand-int 0 20)))
(when (= x 10) (break)))
</syntaxhighlight>
=={{header|Io}}==
<
a := Random value(0,20) floor
write(a)
Line 1,259 ⟶ 1,963:
b := Random value(0,20) floor
writeln(" ",b)
)</
=={{header|J}}==
In recent versions of J, [[j:Vocabulary/zcapco|Z:]] can be used to provide early termination from a [[j:Vocabulary/fcap|fold]]. For example:
<syntaxhighlight lang=J> ]F.(( _2 Z: 10&= [ echo)@(?@20))''
15
6
5
10
]F.(( _2 Z: 10&= [ echo)@(?@20))''
14
9
3
8
19
14
5
13
8
1
19
2
10
</syntaxhighlight>
But other mechanisms are also supported:
<syntaxhighlight lang="j">loopexample=: {{
while. do.
echo k=. ?20
if. 10=k do. return. end.
echo ?20
end.
}}</syntaxhighlight>
Note that <code>break.</code> or <code>goto_FOO.</code> could have been used in place of <code>return.</code>
<syntaxhighlight lang="j">loopexample2=: verb define
while. do.
echo k=. ?20
if. 10=k do. break. end.
echo ?20
end.
)</syntaxhighlight>
<syntaxhighlight lang="j">loopexample3=: {{
while. do.
echo k=. ?20
if. 10=k do. goto_done. end.
echo ?20
end.
label_done.
}}</syntaxhighlight>
=={{header|Jakt}}==
The random number generation is slightly biased, but negligible for the purpose of the task.
<syntaxhighlight lang="jakt">
fn random(mut random_source: File = File::open_for_reading("/dev/urandom")) throws -> u64 {
mut buffer = [0u8; 4]
random_source.read(buffer)
mut result = 0u64
for byte in buffer {
result <<= 8
result += byte as! u64
}
return result
}
fn main() {
while true {
let n = random() % 20
println("{}", n)
if n == 10 {
break
}
println("{}", random() % 20)
}
}
</syntaxhighlight>
=={{header|Java}}==
<
Random rand = new Random();
Line 1,282 ⟶ 2,058:
int b = rand.nextInt(20);
System.out.println(b);
}</
=={{header|JavaScript}}==
<
var a = Math.floor(Math.random() * 20);
print(a);
Line 1,292 ⟶ 2,068:
a = Math.floor(Math.random() * 20);
print(a);
}</
The <code>print()</code> function is available in the [[Rhino]] JavaScript shell.
Line 1,300 ⟶ 2,076:
In a functional idiom of JavaScript, we might instead write something like:
<
var nFirst = Math.floor(Math.random() * 20);
Line 1,312 ⟶ 2,088:
return streamTillInitialTen();
})();</
Obtaining runs like:
Line 1,353 ⟶ 2,129:
Though returning a value composes better, and costs less IO traffic, than firing off side-effects from a moving thread:
<
(function streamTillInitialTen() {
var nFirst = Math.floor(Math.random() * 20);
Line 1,366 ⟶ 2,142:
);
})().join('\n')
);</
Sample result:
Line 1,394 ⟶ 2,170:
Currently, jq does not have a built-in random-number generator, so here we borrow one of the linear congruential generators defined at https://rosettacode.org/wiki/Linear_congruential_generator -
<
# from the Microsoft C Runtime.
# Input: [ count, state, rand ]
Line 1,409 ⟶ 2,185:
# Generate random integers from 0 to (n-1):
def rand(n): n * (rand_Microsoft(17) / 32768) | trunc;</
'''"take"'''
<
label $done
| foreach s as $n (null; $n; if $n | cond | not then break $done else . end);</
'''"count"'''
Since the PRNG used here is deterministic, we'll just count the number of integers generated:
<
'''Example'''
Line 1,428 ⟶ 2,204:
=={{header|Julia}}==
<syntaxhighlight lang="julia">
while true
n = rand(0:19)
Line 1,439 ⟶ 2,215:
@printf "%4d\n" n
end
</syntaxhighlight>
{{out}}
<pre>
Line 1,458 ⟶ 2,234:
=={{header|Kotlin}}==
<syntaxhighlight lang="kotlin">import kotlin.random.Random
fun main(
while (true) {
val a =
println(a)
if (a == 10) break
println(
}
}</
A more compact version:
<syntaxhighlight lang="kotlin">fun main() {
while ((0..19).random().also { println(it) } != 10)
println((0..19).random())
}</syntaxhighlight>
=={{header|Lambdatalk}}==
<syntaxhighlight lang="scheme">
{def loops_break
{lambda {:n}
{if {= :n 10}
then :n -> end of loop
else :n {loops_break {round {* 20 {random}}}}}}}
-> loops_break
{loops_break 0}
-> 0 16 8 5 9 17 9 18 1 18 1 1 12 13 15 1 10 -> end of loop
</syntaxhighlight>
=={{header|Lang}}==
<syntaxhighlight lang="lang">
loop {
$a = fn.randRange(20)
fn.printf(%2d, $a)
if($a === 10) {
fn.println()
con.break
}
$b = fn.randRange(20)
fn.printf(\s- %2d%n, $b)
}
</syntaxhighlight>
=={{header|Lang5}}==
<
=={{header|langur}}==
<syntaxhighlight lang="langur">for {
val .i = random 0..19
write .i, " "
if .i == 10 { writeln(); break }
}</syntaxhighlight>
{{out}}
<pre>13 18 14 8 0 5 17 13 9 13 6 5 13 16 6 9 11 18 10</pre>
=={{header|Lasso}}==
<
while(#x != 10) => {^
#x = integer_random(19,0)
Line 1,481 ⟶ 2,302:
#x == 10 ? loop_abort
', '+integer_random(19,0)+'\r'
^}</
=={{header|Liberty BASIC}}==
The task specifies a "number".
<
num=rnd(1)*20
print num
Line 1,491 ⟶ 2,312:
print rnd(1)*20
wend
</
<
num=int(rnd(1)*20)
print num
Line 1,498 ⟶ 2,319:
print int(rnd(1)*20)
wend
</syntaxhighlight>
=={{header|Lingo}}==
<
n = random(20)-1
put n
if n = 10 then exit repeat
put random(20)-1
end repeat</
=={{header|Lisaac}}==
<
+ name := TEST_LOOP_BREAK;
Line 1,529 ⟶ 2,350:
'\n'.print;
}
);</
=={{header|LiveCode}}==
<
repeat forever
put random(20) - 1 into tRand
Line 1,540 ⟶ 2,361:
end repeat
end loopForeverRandom
</syntaxhighlight>
=={{header|Lua}}==
<
k = math.random(19)
print(k)
if k == 10 then break end
print(math.random(19)
until false</
=={{header|M2000 Interpreter}}==
We use block of module to loop. Break also can be used, but breaks nested blocks (without crossing modules/functions). Using break in second Checkit module we break three blocks.
<syntaxhighlight lang="m2000 interpreter">
Module Checkit {
M=Random(0, 19)
Print M
If M=10 then Continue ' because loop flag is false, continue act as Exit
Print Random(0, 19)
loop
}
Checkit
Module Checkit {
do {
do {
{
M=Random(0, 19)
Print M
If M=10 then Break
Print Random(0, 19)
loop
}
Print "no print this"
} always
Print "no print this"
} always
Print "print ok"
}
Checkit
</syntaxhighlight>
=={{header|M4}}==
<
define(`setRand',
`define(`randSeed',ifelse(eval($1<10000),1,`eval(20000-$1)',`$1'))')dnl
Line 1,562 ⟶ 2,414:
loopbreak')')dnl
dnl
loopbreak</
{{out}}
Line 1,574 ⟶ 2,426:
=={{header|Maple}}==
<
do
n := r();
Line 1,582 ⟶ 2,434:
end if;
printf( "%d\n", r() );
end do:</
=={{header|Mathematica}}/{{header|Wolfram Language}}==
<
Print[RandomInteger[{0,19}]
]</
=={{header|Maxima}}==
<
block([n],
Line 1,625 ⟶ 2,477:
> x: 2;
> exit;
2</
=={{header|MAXScript}}==
<syntaxhighlight lang="maxscript">
while true do
(
Line 1,637 ⟶ 2,489:
format ("B: % \n") b
)
</syntaxhighlight>
=={{header|min}}==
{{works with|min|0.19.6}}
<syntaxhighlight lang="min">randomize
(19 random puts 10 ==) (19 random puts!) () () linrec</syntaxhighlight>
=={{header|МК-61/52}}==
<syntaxhighlight lang="text">СЧ 2 0 * П0
1 0 - [x] x#0 18
СЧ 2 0 * П1
БП 00 ИП0 С/П</
=={{header|Modula-3}}==
<
IMPORT IO, Fmt, Random;
Line 1,662 ⟶ 2,519:
END;
END;
END Break.</
=={{header|MOO}}==
<
a = random(20) - 1;
player:tell(a);
Line 1,673 ⟶ 2,530:
b = random(20) - 1;
player:tell(b);
endwhile</
=={{header|MUMPS}}==
<
NEW A,B
SET A=""
Line 1,690 ⟶ 2,547:
NEW A,B
FOR SET A=$RANDOM(20) WRITE !,A QUIT:A=10 SET B=$RANDOM(20) WRITE ?6,B
KILL A,B QUIT</
{{out}}
<pre>USER>D BREAKLOOP^ROSETTA
Line 1,713 ⟶ 2,570:
15 13
10</pre>
=={{header|Neko}}==
<syntaxhighlight lang="actionscript">/**
Loops/Break in Neko
Tectonics:
nekoc loops-break.neko
neko loops-break
*/
var random_new = $loader.loadprim("std@random_new", 0);
var random_int = $loader.loadprim("std@random_int", 2);
var random = random_new();
while true {
var r = random_int(random, 20);
$print(r, " ");
if r == 10 break;
r = random_int(random, 20);
$print(r, " ");
}
$print("\n");</syntaxhighlight>
{{out}}
<pre>prompt$ nekoc loops-break.neko
prompt$ neko loops-break
0 8 17 12 4 18 7 6 19 11 13 6 12 7 6 6 6 18 14 7 18 10 15 6 9 5 4 14 10</pre>
=={{header|Nemerle}}==
{{trans|C#}}
<
using System.Console;
using Nemerle.Imperative;
Line 1,734 ⟶ 2,620:
}
}
}</
=={{header|NetRexx}}==
<
options replace format comments java crossref savelog symbols nobinary
Line 1,753 ⟶ 2,639:
end lb
say
</syntaxhighlight>
=={{header|NewLISP}}==
<
(println (rand 20)))</
=={{header|Nim}}==
{{trans|Python}}
<
while true:
let a = random(
echo a
if a == 10:
break
let b = random(
echo b</
=={{header|NS-HUBASIC}}==
<syntaxhighlight lang="ns-hubasic">10 I=RND(20)
20 PRINT I
30 IF I=10 THEN STOP
40 PRINT RND(20)
50 GOTO 10</syntaxhighlight>
=={{header|Nu}}==
<syntaxhighlight lang="nu">
while true {
let a = random int 0..19
print $a
if $a == 10 {break}
print (random int 0..19)
}
</syntaxhighlight>
=={{header|Oberon-2}}==
Works with oo2c Version 2
<
MODULE LoopBreak;
IMPORT
Line 1,795 ⟶ 2,698:
Do
END LoopBreak.
</syntaxhighlight>
=={{header|Objeck}}==
<
while(true) {
a := (Float->Random() * 20.0)->As(Int);
Line 1,808 ⟶ 2,711:
a->PrintLine();
}
</syntaxhighlight>
=={{header|OCaml}}==
<
- : unit = ()
Line 1,828 ⟶ 2,731:
13
10
Exception: Pervasives.Exit.</
=={{header|Octave}}==
<
a = floor(unifrnd(0,20, 1));
disp(a)
Line 1,839 ⟶ 2,742:
b = floor(unifrnd(0,20, 1));
disp(b)
endwhile</
=={{header|Oforth}}==
<
19 rand dup print ":" print
10 == ifTrue: [ break ]
19 rand print " " print
]</
=={{header|Ol}}==
<syntaxhighlight lang="scheme">
(import (otus random!))
(call/cc (lambda (break)
(let loop ()
(if (= (rand! 20) 10)
(break #t))
(print (rand! 20))
(loop))))
</syntaxhighlight>
=={{header|ooRexx}}==
<
* Three Ways to leave a Loop
* ooRexx added the possibility to leave an outer loop
Line 1,893 ⟶ 2,808:
End
Else
Say 'Leave label-name is probably not supported in' v</
{{out}}
<pre>i1=1
Line 1,920 ⟶ 2,835:
=={{header|Oz}}==
We can implement this either with recursion or with a special type of the for-loop. Both can be considered idiomatic.
<
R = {OS.rand} mod 20
in
Line 1,927 ⟶ 2,842:
else {Show {OS.rand} mod 20}
end
end</
=={{header|PARI/GP}}==
<
t=random(20);
print(t);
if(t==10, break);
print(random(20))
)</
=={{header|Pascal}}==
Line 1,941 ⟶ 2,856:
=={{header|Perl}}==
<
my $a = int(rand(20));
print "$a\n";
Line 1,949 ⟶ 2,864:
my $b = int(rand(20));
print "$b\n";
}</
=={{header|Phix}}==
{{libheader|Phix/basics}}
{{Trans|Euphoria}}
The rand() function returns a random integer from 1 to the integer provided.
<!--<syntaxhighlight lang="phix">-->
<span style="color: #004080;">integer</span> <span style="color: #000000;">i</span>
<span style="color: #008080;">while</span> <span style="color: #000000;">1</span> <span style="color: #008080;">do</span>
<span style="color: #000000;">i</span> <span style="color: #0000FF;">=</span> <span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">20</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"%g "</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #000000;">i</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">if</span> <span style="color: #000000;">i</span><span style="color: #0000FF;">=</span><span style="color: #000000;">10</span> <span style="color: #008080;">then</span> <span style="color: #008080;">exit</span> <span style="color: #008080;">end</span> <span style="color: #008080;">if</span>
<span style="color: #7060A8;">printf</span><span style="color: #0000FF;">(</span><span style="color: #000000;">1</span><span style="color: #0000FF;">,</span> <span style="color: #008000;">"%g\n"</span><span style="color: #0000FF;">,</span> <span style="color: #0000FF;">{</span><span style="color: #7060A8;">rand</span><span style="color: #0000FF;">(</span><span style="color: #000000;">20</span><span style="color: #0000FF;">)-</span><span style="color: #000000;">1</span><span style="color: #0000FF;">})</span>
<span style="color: #008080;">end</span> <span style="color: #008080;">while</span>
<!--</syntaxhighlight>-->
{{out}}
<pre>
Line 1,976 ⟶ 2,888:
10
</pre>
=={{header|Phixmonti}}==
<syntaxhighlight lang="Phixmonti">/# Rosetta Code problem: https://rosettacode.org/wiki/Loops/Break
by Galileo, 11/2022 #/
include ..\Utilitys.pmt
def ran rand * int enddef
true while
20 ran
dup print "\t" print
10 == if false else 20 ran ? true endif
endwhile</syntaxhighlight>
{{out}}
<pre>12 8
12 10
5 7
10
=== Press any key to exit ===</pre>
=={{header|PHP}}==
<
$a = rand(0,19);
echo "$a\n";
Line 1,985 ⟶ 2,917:
$b = rand(0,19);
echo "$b\n";
}</
=={{header|PicoLisp}}==
Literally:
<
(loop
(println (setq R (rand 1 19)))
(T (= 10 R))
(println (rand 1 19)) ) )</
Shorter:
<
(println (rand 1 19)) )</
=={{header|Pike}}==
<
while(1){
int a = random(20);
Line 2,009 ⟶ 2,941:
write(b + "\n");
}
}</
=={{header|PL/I}}==
<syntaxhighlight lang="pl/i">
do forever;
k = trunc(random()*20);
Line 2,020 ⟶ 2,952:
put skip list (k);
end;
</syntaxhighlight>
=={{header|Plain English}}==
<syntaxhighlight lang="plainenglish">To run:
Start up.
Demonstrate breaking.
Wait for the escape key.
Shut down.
To demonstrate breaking:
Pick a number between 0 and 19.
Write the number to the console.
If the number is 10, break.
Pick another number between 0 and 19.
Write the other number to the console.
Repeat.
To write a number to the console:
Convert the number to a string.
Write the string to the console.</syntaxhighlight>
=={{header|PostScript}}==
<
{
rand 20 mod % generate number between 0 and 19
dup = % print it
10 eq { exit } if % exit if 10
} loop</
=={{header|PowerShell}}==
<
for () {
$n = $r.Next(20)
Line 2,039 ⟶ 2,990:
}
Write-Host $r.Next(20)
}</
=={{header|PureBasic}}==
<
Repeat
Line 2,058 ⟶ 3,009:
Input()
CloseConsole()
EndIf</
=={{header|Python}}==
<
while True:
Line 2,069 ⟶ 3,020:
break
b = randrange(20)
print(b)</
=={{header|QB64}}==
''CBTJD'': 2020/03/14
<syntaxhighlight lang="qbasic">RANDOMIZE TIMER
DO
n = INT(RND * 20)
PRINT n,
IF n = 10 THEN
EXIT DO
ELSE
n = INT(RND * 20)
PRINT n
END IF
LOOP UNTIL 0</syntaxhighlight>
=={{header|Qi}}==
<syntaxhighlight lang="qi">
(define loop -> (if (= 10 (PRINT (random 20)))
true
(do (PRINT (random 20))
(loop))))
(loop)
</syntaxhighlight>
=={{header|Quackery}}==
<syntaxhighlight lang="quackery">[ 20 random
dup echo sp
10 = if done
20 random echo cr
again ]</syntaxhighlight>
{{Out}}
<pre>16 9
9 14
11 16
14 13
14 17
16 19
13 11
10 </pre>
=={{header|R}}==
{{works with|R|2.8.1}}
<
repeat
{
Line 2,084 ⟶ 3,078:
result2 <- sample0to19()
cat(result1, result2, "\n")
}</
=={{header|Racket}}==
<
#lang racket
(let loop ()
Line 2,105 ⟶ 3,090:
(displayln (random 20))
(loop)))
</syntaxhighlight>
=={{header|Raku}}==
(formerly Perl 6)
{{works with|Rakudo|#21 "Seattle"}}
<syntaxhighlight lang="raku" line>loop {
say my $n = (0..19).pick;
last if $n == 10;
say (0..19).pick;
}</syntaxhighlight>
=={{header|REBOL}}==
<
Title: "Loop/Break"
URL: http://rosettacode.org/wiki/Loop/Break
]
Line 2,125 ⟶ 3,117:
print rejoin [" " r20]
]
print ""</
{{out}}
Line 2,134 ⟶ 3,126:
3 14
10</pre>
=={{header|Red}}==
{{trans|REBOL}}
<syntaxhighlight lang="rebol">Red [
Title: "Loops/Break"
URL: http://rosettacode.org/wiki/Loops/Break
]
random/seed 2 ; Make repeatable. Delete line for 'true' randomness.
r20: does [(random 20) - 1]
forever [
prin x: r20
if 10 = x [break]
print rejoin [" " r20]
]
print ""</syntaxhighlight>
{{out}}
<pre>
2 15
0 0
1 11
6 14
4 14
10
</pre>
=={{header|Retro}}==
<
A couple of helper functions to make the rest of the
code more readable.
Line 2,158 ⟶ 3,177:
[ rand dup . 10 <> [ [ rand . ] ifTrue ] sip ] while
</syntaxhighlight>
=={{header|REXX}}==
<
/*REXX's RANDOM BIF returns an integer.*/
do forever /*perform loop until da cows come home.*/
a=random(19) /*same as: random(0, 19) */
Line 2,169 ⟶ 3,188:
b=random(19) /*same as: random(0, 19) */
say right(b, 5) /*show B right─justified, column 2.*/
end /*forever*/ /* [↑] CHAROUT , xxx writes to term.*/
/*stick a fork in it, we're all done. */</
{{out|output}}
Line 2,229 ⟶ 3,248:
=={{header|Ring}}==
<
while true
a = random(20)
Line 2,235 ⟶ 3,254:
if a = 10 exit ok
end
</syntaxhighlight>
=={{header|RPL}}==
RPL does not have any <code>BREAK</code> command. Flags are of great help to exit loops:
≪ 1 CF
'''WHILE''' 1 FC? '''REPEAT'''
RAND 20 * IP
DUP 1 DISP
'''IF''' 10 == '''THEN''' 1 SF '''ELSE'''
RAND 20 * IP
2 DISP '''END'''
'''END'''
≫
The error handling mechanism provides another way to break a loop:
≪ '''IFERR'''
'''WHILE''' 1 '''REPEAT'''
RAND 20 * IP DUP 1 DISP
'''IF''' 10 == '''THEN''' 0 DUP / '''END'''
RAND 20 * IP 2 DISP
'''END'''
'''THEN''' DROP2 '''END'''
≫
=={{header|Ruby}}==
<
a = rand(20)
print a
Line 2,247 ⟶ 3,287:
b = rand(20)
puts "\t#{b}"
end</
or
<
print a = rand(20)
puts or break if a == 10
puts "\t#{rand(20)}"
end</
{{out}}
Line 2,272 ⟶ 3,312:
=={{header|Rust}}==
{{libheader|rand}}
<
extern crate rand;
use rand
fn main() {
let mut rng = thread_rng();
loop {
let num =
if num == 10 {
println!("{}", num);
break;
}
println!("{}", rng.gen_range(0, 20));
}
}</syntaxhighlight>
=={{header|SAS}}==
<
do while(1);
n=floor(uniform(0)*20);
Line 2,295 ⟶ 3,336:
if n=10 then leave; /* 'leave' to break a loop */
end;
run;</
=={{header|Sather}}==
<
class RANDOM is
attr seed:INT;
Line 2,326 ⟶ 3,367:
end;
end;
end;</
=={{header|Scala}}==
<
import util.control.Breaks.{breakable, break}
Line 2,348 ⟶ 3,389:
4
10
</syntaxhighlight>
=={{header|Scheme}}==
<
(let loop ((first (random 20)))
(print first)
Line 2,358 ⟶ 3,399:
(print (random 20))
(loop (random 20)))))
</syntaxhighlight>
Or by using call/cc to break out:
<
(call/cc
(lambda (break)
Line 2,371 ⟶ 3,412:
(print (random 20))
(loop (random 20)))))
</syntaxhighlight>
=={{header|Scilab}}==
{{works with|Scilab|5.5.1}}
<syntaxhighlight lang="text">while %T
a=int(rand()*20) // [0..19]
printf("%2d ",a)
Line 2,382 ⟶ 3,423:
printf("%2d\n",b)
end
printf("\n")</
{{out}}
<pre style="height:20ex">
Line 2,394 ⟶ 3,435:
10
</pre>
=={{header|Seed7}}==
Seed7 has no goto statement and hidden gotos like break- and continue-statements are also omitted.
But this is not a problem. All programs with break-statements can be rewritten as structured programs without break.
Usually structured programs have better readability. If you are used to it writing programs without goto (and break) is easy.
The example below shows how easy a break can be avoided in this exercise. The loop ends, if the first random number
is 10. The second random number does never terminate the loop.
<syntaxhighlight lang="seed7">$ include "seed7_05.s7i";
const proc: main is func
local
var integer: number is 0;
begin
repeat
number := rand(0, 19);
writeln(number);
if number <> 10 then
writeln(rand(0, 19));
end if;
until number = 10;
end func;</syntaxhighlight>
=={{header|Sidef}}==
<
loop {
say (var n = lim.rand.int);
n == 10 && break;
say lim.rand.int;
}</
=={{header|Simula}}==
{{works with|SIMULA-67}}
<
begin
integer num,seed;
Line 2,416 ⟶ 3,479:
end;
lab:
end</
{{out}}
<pre>
Line 2,424 ⟶ 3,487:
10
</pre>
=={{header|Smalltalk}}==
{{works with|Smalltalk/X}}
<
|
Stdout print:
(done := (
Stdout print:' '; print:
].
done
] whileFalse</
alternative:
<syntaxhighlight lang="smalltalk">[:exit |
|first|
Line 2,448 ⟶ 3,508:
first == 10 ifTrue:[ exit value:nil ].
Stdout print:' '; printCR: (Random nextIntegerBetween:0 and:19).
] loopWithExit.</
or shorter (because <tt>ifTrue:</tt> sends #value to its arg):
<syntaxhighlight lang="smalltalk">[:exit |
|first|
Stdout printCR: (first := Random nextIntegerBetween:0 and:19).
first == 10 ifTrue:exit.
Stdout print:' '; printCR: (Random nextIntegerBetween:0 and:19).
] loopWithExit.</syntaxhighlight>
=={{header|Snabel}}==
Uses a ranged random generator as iterator.
<
let: rnd 19 random;
Line 2,460 ⟶ 3,528:
@rnd pop str say
} for
</syntaxhighlight>
=={{header|SNOBOL4}}==
Most Snobols lack a built-in rand( ) function. Kludgy "Linux-only" implementation:
<
while &ALPHABET random @rand
output = rand = rand - (rand / 20) * 20
eq(rand,10) :f(while)
end</
Or using a library function:
<
-include 'random.sno'
loop ne(output = convert(rand(20)'integer'),10) :s(loop)
end</
=={{header|Spin}}==
{{works with|BST/BSTC}}
{{works with|FastSpin/FlexSpin}}
{{works with|HomeSpun}}
{{works with|OpenSpin}}
<syntaxhighlight lang="spin">con
_clkmode = xtal1 + pll16x
_clkfreq = 80_000_000
obj
ser : "FullDuplexSerial.spin"
pub main | r, s
ser.start(31, 30, 0, 115200)
s := 1337 ' PRNG seed
repeat
r := ||?s // 20
ser.dec(r)
ser.tx(32)
if r == 10
quit
r := ||?s // 20
ser.dec(r)
ser.tx(32)
waitcnt(_clkfreq + cnt)
ser.stop
cogstop(0)</syntaxhighlight>
{{out}}
<pre>
8 13 1 7 19 1 15 16 9 6 5 9 1 15 5 0 6 3 9 19 8 9 10
</pre>
=={{header|SparForte}}==
As a structured script.
<syntaxhighlight lang="ada">#!/usr/local/bin/spar
pragma annotate( summary, "loopsbreak" )
@( description, "Show a loop which prints random numbers (each number newly" )
@( description, "generated each loop) from 0 to 19 (inclusive). If a number is" )
@( description, "10, stop the loop after printing it, and do not generate any" )
@( description, "further numbers. Otherwise, generate and print a second random" )
@( description, "number before restarting the loop. If the number 10 is never" )
@( description, "generated as the first number in a loop, loop forever. " )
@( category, "tutorials" )
@( author, "Ken O. Burtch" )
@( see_also, "http://rosettacode.org/wiki/Loops/Break" );
pragma license( unrestricted );
pragma software_model( nonstandard );
pragma restriction( no_external_commands );
procedure arraysloop is
a : positive;
b : positive;
begin
loop
a := numerics.rnd( 20 );
put_line( strings.image( a ) );
exit when a = 10;
b := numerics.rnd( 20 );
put_line( strings.image( b ) );
end loop;
end arraysloop;</syntaxhighlight>
=={{header|SPL}}==
Direct approach:
<
n = #.rnd(20)
#.output(n)
Line 2,486 ⟶ 3,620:
n = #.rnd(20)
#.output(n)
<</
With reusable code:
<
:1
n = #.rnd(20)
Line 2,495 ⟶ 3,629:
<< n=10
1 <->
<</
=={{header|SQL PL}}==
{{works with|Db2 LUW}} version 9.7 or higher.
With SQL PL:
<syntaxhighlight lang="sql pl">
--#SET TERMINATOR @
SET SERVEROUTPUT ON@
BEGIN
DECLARE VAL INTEGER;
LOOP: WHILE (TRUE = TRUE) DO
SET VAL = INTEGER(RAND() * 20);
CALL DBMS_OUTPUT.PUT_LINE(VAL);
IF (VAL = 10) THEN
LEAVE LOOP;
END IF;
SET VAL = INTEGER(RAND() * 20);
CALL DBMS_OUTPUT.PUT_LINE(VAL);
END WHILE LOOP;
END @
</syntaxhighlight>
Output:
<pre>
db2 -td@
db2 => SET SERVEROUTPUT ON@
DB20000I The SET SERVEROUTPUT command completed successfully.
db2 => BEGIN
...
db2 (cont.) => END @
DB20000I The SQL command completed successfully.
4
16
9
1
10
</pre>
Since V11.1, the builtin module can be used instead of RAND, like this:
<syntaxhighlight lang="sql pl">
SET VAL = CALL DBMS_RANDOM.VALUE(0,20);
</syntaxhighlight>
=={{header|Stata}}==
<
local n=runiformint(0,19)
display `n'
if `n'==10 continue, break
display runiformint(0,19)
}</
=== Mata ===
<syntaxhighlight lang="stata">for (; 1; ) {
printf("%f\n",n=runiformint(1,1,0,19))
if (n==10) break
printf("%f\n",runiformint(1,1,0,19))
}</syntaxhighlight>
=={{header|Suneido}}==
<
{
Print(i = Random(20))
Line 2,513 ⟶ 3,696:
Print(i = Random(20))
}
</syntaxhighlight>
=={{header|Swift}}==
<
{
let a = Int(arc4random()) % (20)
Line 2,527 ⟶ 3,710:
print("b: \(b)")
}
</
<pre>
a: 2 b: 7
Line 2,536 ⟶ 3,719:
=={{header|Tcl}}==
<
set a [expr int(20*rand())]
puts $a
Line 2,544 ⟶ 3,727:
set b [expr int(20*rand())]
puts $b
}</
=={{header|TI-89 BASIC}}==
<
Loop
rand(20)-1 → x
Line 2,556 ⟶ 3,739:
EndIf
Output 64, 50, rand(20)-1 © paint text to the right on same line
EndLoop</
=={{header|TorqueScript}}==
<syntaxhighlight lang="torque">for(%a = 0; %a > -1; %a++)
{
%number = getRandom(0, 19);
if(%number == 10)
break;
}</syntaxhighlight>
=={{header|Transact-SQL}}==
<syntaxhighlight lang="transact-sql">
DECLARE @i INT;
WHILE 1=1
Line 2,569 ⟶ 3,761:
PRINT ABS(CHECKSUM(NewId())) % 20;
END;
</syntaxhighlight>
=={{header|TUSCRIPT}}==
<
$$ MODE TUSCRIPT
LOOP
Line 2,594 ⟶ 3,777:
IF (10==a,b) STOP
ENDLOOP
</syntaxhighlight>
{{out}}
<pre>
Line 2,608 ⟶ 3,791:
=={{header|uBasic/4tH}}==
<syntaxhighlight lang="text">Do
n = RND(20)
Print n
Until n = 10
Print RND(20)
Loop</
=={{header|UNIX Shell}}==
This script gets random numbers from jot(1).
Line 2,620 ⟶ 3,804:
{{works with|Bourne Shell}}
{{libheader|jot}}
<
a=`jot -w %d -r 1 0 20` || exit $?
echo $a
Line 2,626 ⟶ 3,810:
b=`jot -w %d -r 1 0 20` || exit $?
echo $b
done</
Korn Shells have a RANDOM parameter.
Line 2,632 ⟶ 3,816:
{{works with|Bash}}
{{works with|pdksh|5.2.14}}
<
echo $((a=RANDOM%20))
[ $a -eq 10 ] && break
echo $((b=RANDOM%20))
done</
=={{header|Ursa}}==
{{trans|Python}}
<
decl int a b
while true
Line 2,650 ⟶ 3,834:
set b (r.getint 19)
out b endl console
end while</
=={{header|VBA}}==
<syntaxhighlight lang="vb">Public Sub LoopsBreak()
Dim value As Integer
Randomize
Do While True
value = Int(20 * Rnd)
Debug.Print value
If value = 10 Then Exit Do
Debug.Print Int(20 * Rnd)
Loop
End Sub</syntaxhighlight>
=={{header|VBScript}}==
Based on BASIC version. Demonstrates breaking out of Do/Loop and For/Next (Exit is good for getting out of functions and subs as well).
<
Do
Line 2,671 ⟶ 3,867:
b = Int(Rnd * 20)
WScript.Echo vbNullString, b
Next</
=={{header|Visual Basic .NET}}==
{{trans|C#}}
<syntaxhighlight lang="vbnet">Module Program
Sub Main()
' Initialize with seed 0 to get deterministic output (may vary across .NET versions, though).
Dim rand As New Random(0)
Do
Dim first = rand.Next(20) ' Upper bound is exclusive.
Console.Write(first & " ")
If first = 10 Then Exit Do
Dim second = rand.Next(20)
Console.Write(second & " ")
Loop
End Sub
End Module</syntaxhighlight>
{{out}}
<pre>14 16 15 11 4 11 18 8 19 5 5 9 12 9 19 0 17 19 13 6 16 16 19 0 13 10 18 13 10 </pre>
=={{header|V (Vlang)}}==
<syntaxhighlight lang="v (vlang)">import rand
import rand.seed
fn main() {
rand.seed(seed.time_seed_array(2))
for {
a := rand.intn(20)?
println(a)
if a == 10 {
break
}
b := rand.intn(20)?
println(b)
}
}</syntaxhighlight>
=={{header|Wren}}==
<syntaxhighlight lang="wren">import "random" for Random
var r = Random.new()
while (true) {
var n = r.int(20)
System.print(n)
if (n == 10) break
System.print(r.int(20))
} </syntaxhighlight>
{{out}}
A (mercifully short) sample run:
<pre>
1
0
13
16
2
0
10
</pre>
=={{header|XBasic}}==
{{works with|Windows XBasic}}
<syntaxhighlight lang="xbasic">
PROGRAM "loopbreak"
IMPORT "xst" ' for XstGetSystemTime
DECLARE FUNCTION Entry()
' Pseudo-random number generator
' Based on the rand, srand functions from Kernighan & Ritchie's book
' 'The C Programming Language'
DECLARE FUNCTION Rand()
DECLARE FUNCTION SRand(seed%%)
FUNCTION Entry()
XstGetSystemTime (@msec)
SRand(INT(msec) MOD 32768)
DO
a%% = Rand() MOD 20
PRINT FORMAT$("##", a%%);
IF a%% = 10 THEN EXIT DO
b%% = Rand() MOD 20
PRINT FORMAT$(" ##", b%%)
LOOP
PRINT
END FUNCTION
' Return pseudo-random integer on 0..32767
FUNCTION Rand()
#next&& = #next&& * 1103515245 + 12345
END FUNCTION USHORT(#next&& / 65536) MOD 32768
' Set seed for Rand()
FUNCTION SRand(seed%%)
#next&& = seed%%
END FUNCTION
END PROGRAM
</syntaxhighlight>
{{out}}
<pre>
17 3
3 8
9 7
18 5
4 0
9 16
0 19
5 18
12 16
1 1
10
</pre>
=={{header|XBS}}==
<syntaxhighlight lang="xbs">while(true){
set n:number = math.random(0,19);
log(`first: {n}`);
if(n==10){stop}
n = math.random(0,19);
log(`second: {n}`);
}</syntaxhighlight>
{{out}}
<pre>
first: 0
second: 13
first: 11
second: 10
first: 16
second: 3
first: 8
second: 19
first: 7
second: 10
first: 10
</pre>
=={{header|XPL0}}==
<
int N;
loop [N:= Ran(20);
Line 2,682 ⟶ 4,017:
IntOut(0, Ran(20));
CrLf(0);
]</
{{out}}
Line 2,695 ⟶ 4,030:
10
</pre>
=={{header|Yabasic}}==
<syntaxhighlight lang="yabasic">do
i = int(ran(19))
print i using "##";
print " ";
if i = 10 then break : fi
i = int(ran(19))
print i using "##", " ";
loop
print
end</syntaxhighlight>
=={{header|Zig}}==
<syntaxhighlight lang="zig">const std = @import("std");
pub fn main() !void {
const RndGen = std.rand.DefaultPrng;
var rnd = RndGen.init(42);
// possible improvement: make rng fair
var rand_num1: u5 = undefined;
var rand_num2: u5 = undefined;
while (true) {
rand_num1 = rnd.random().int(u5) % 20;
try std.io.getStdOut().writer().print("{d}\n", .{rand_num1});
if (rand_num1 == 10)
break;
rand_num2 = rnd.random().int(u5) % 20;
try std.io.getStdOut().writer().print("{d}\n", .{rand_num2});
}
}</syntaxhighlight>
=={{header|zkl}}==
<
if (n==10){ println(); break; } (0).random().println();
}</
{{out}}
<pre>
|