Break/fi
│
Deutsch (de) │
English (en) │
español (es) │
suomi (fi) │
français (fr) │
русский (ru) │
Break
Break
rutiini tosiasiallisesti tuhoaa silmukan (loopin).
Sen ensisijaisena sovelluksena on poistua silmukasta ennen suunniteltua loppua.
Break
rutiinilla on erityinen merkitys silmukasta poistumisesta, voidaan kirjoittaa vain silmukoissa (loopeissa).
Se ei ole varattu sana¹, joten sitä voi käyttää, tällöin siihen päästään kirjoittamalla system.break
milloin tahansa.
Collatzin konjektuuri
Esimerkki: Seuraava ohjelma käsittelee Collatzin konjektuuria (Collatz problem).
For
-silmukka aliohjelmassa collatzIterative
käyttää break
:ä
a) tarkistamaan lopetustilan Collatz-ongelman mukaan,
b) keskeyttää ennen kuin tietotyypin rajat ylittyvät ja
c) Samalla kun käytetään edelleen for
-rakennetta (muuttuu automaattisesti lisäten muuttujaa määrätyn alueen sisällä).
program collatz(input, output, stderr);
procedure collatzIterative(n: qword);
var
i: qword;
begin
for i := 0 to high(i) do
begin
writeLn('step ', i:20, ': ', n);
// Collatz conjecture: sequence ends with 1
if (n = 1) or (n > (high(n) / 3 - 1)) then
begin
// leave loop, as next value may get out of range
break;
end;
// n := ifThen(odd(n), 3 * n + 1, n div 2);
if odd(n) then
// n is odd
begin
n := 3 * n + 1;
end
// n is even
else
begin
n := n div 2;
end;
end;
end;
var
n: longword;
begin
readLn(n);
if n < 1 then
begin
writeLn(stderr, 'not a positive integer');
halt(1);
end;
collatzIterative(n);
end.
for
-silmukan valitseminen yhdessä break
:n kanssa on riittävä, koska Collatzin olettamus olettaa, että kuvattu toiminto lopulta päättyy 1
: n, mutta ei kerro sitä varmasti.
Siksi - matemaattisesti - käyttämällä ehtoa while n <> 1 do
ei ota huomioon olosuhteita, että ongelma on oletus, mutta ehdottaa, että se päätetään lopulta johtaa n = 1
.
Muut huomiot
Kuitenkin break
:n käyttö on yleensä huonoa tyyliä, koska se "siirtyy" silmukan ehtoon.
Ohjelmoijan täytyy tietää, että silmukan lohkossa jossa on break
määritellään kaikki keskeytysolosuhteet.
GNU Pascal:n käsikirjan mukaan break
on Borland Pascal:n laajennus, kun taas Mac Pascal:ssa se oli leave
.
FPC:n {$mode macpas} tietää ainoastaan break
:n.
Katso myös
break
in thesystem
unitexit
to return from routinescontinue
ohittaa jäljellä olevan iteroinningoto
Lähteet
- 1
- compare remarks in the reference manual § “The
For..to
/downto..do
statement” and § “reserved words”