Sign in Join
Wiki copytemporary

Break/fi

Deutsch · English · Español · Français · Suomi · Русский

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ä).

pascal
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

Lähteet

1
compare remarks in the reference manual § “The For..to/downto..do statement” and § “reserved words”


From the Free Pascal wiki, page "Break/fi", as it stood on 2022-08-06 after a change by Kai Burghardt, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's Licensing page. If you have concerns about this material, message the admin.

Revision 2, last changed by WikiArchive .

Talk about this page

Nobody has opened a bench for this page yet. Sign in to open one.