Difference between revisions of "Break/fi"

From Free Pascal wiki
Jump to navigationJump to search
(Created page with "{{Break}} = Break = <syntaxhighlight lang="pascal" enclose="none">Break</syntaxhighlight> rutiini tosiasiallisesti tuhoaa silmukan (loopin). Sen ensisijaisena sovel...")
 
 
Line 3: Line 3:
 
= Break =
 
= Break =
  
<syntaxhighlight lang="pascal" enclose="none">Break</syntaxhighlight> rutiini tosiasiallisesti tuhoaa [[Loop|silmukan (loopin)]].
+
<syntaxhighlight lang="pascal" inline>Break</syntaxhighlight> rutiini tosiasiallisesti tuhoaa [[Loop|silmukan (loopin)]].
 
Sen ensisijaisena sovelluksena on poistua silmukasta ennen suunniteltua loppua.
 
Sen ensisijaisena sovelluksena on poistua silmukasta ennen suunniteltua loppua.
  
<syntaxhighlight lang="pascal" enclose="none">Break</syntaxhighlight> rutiinilla on erityinen merkitys silmukasta poistumisesta, voidaan kirjoittaa ''vain'' silmukoissa (loopeissa).
+
<syntaxhighlight lang="pascal" inline>Break</syntaxhighlight> 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 {{Doc|package=RTL|unit=system|identifier=break|text=<syntaxhighlight lang="pascal" enclose="none">system.break</syntaxhighlight>}} milloin tahansa.
+
Se ei ole varattu sana¹, joten sitä voi käyttää, tällöin siihen päästään kirjoittamalla {{Doc|package=RTL|unit=system|identifier=break|text=<syntaxhighlight lang="pascal" inline>system.break</syntaxhighlight>}} milloin tahansa.
  
 
== Collatzin konjektuuri ==
 
== Collatzin konjektuuri ==
  
 
Esimerkki: Seuraava ohjelma käsittelee [https://fi.wikipedia.org/wiki/Collatzin_konjektuuri Collatzin konjektuuria (Collatz problem)].
 
Esimerkki: Seuraava ohjelma käsittelee [https://fi.wikipedia.org/wiki/Collatzin_konjektuuri Collatzin konjektuuria (Collatz problem)].
[[For|<syntaxhighlight lang="pascal" enclose="none">For</syntaxhighlight>-silmukka]] aliohjelmassa <syntaxhighlight lang="pascal" enclose="none">collatzIterative</syntaxhighlight> käyttää <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>:ä
+
[[For|<syntaxhighlight lang="pascal" inline>For</syntaxhighlight>-silmukka]] aliohjelmassa <syntaxhighlight lang="pascal" inline>collatzIterative</syntaxhighlight> käyttää <syntaxhighlight lang="pascal" inline>break</syntaxhighlight>:ä
 
a) tarkistamaan lopetustilan Collatz-ongelman mukaan,  
 
a) tarkistamaan lopetustilan Collatz-ongelman mukaan,  
 
b) keskeyttää ennen kuin tietotyypin rajat ylittyvät ja  
 
b) keskeyttää ennen kuin tietotyypin rajat ylittyvät ja  
c) Samalla kun käytetään edelleen  <syntaxhighlight lang="pascal" enclose="none">for</syntaxhighlight> -rakennetta (muuttuu automaattisesti [[Inc|lisäten]] muuttujaa määrätyn alueen sisällä).
+
c) Samalla kun käytetään edelleen  <syntaxhighlight lang="pascal" inline>for</syntaxhighlight> -rakennetta (muuttuu automaattisesti [[Inc|lisäten]] muuttujaa määrätyn alueen sisällä).
  
 
<!-- leave the ifThen expanded, for those who aren't quite familiar with the math unit -->
 
<!-- leave the ifThen expanded, for those who aren't quite familiar with the math unit -->
Line 65: Line 65:
 
</syntaxhighlight>
 
</syntaxhighlight>
  
<syntaxhighlight lang="pascal" enclose="none">for</syntaxhighlight>-silmukan valitseminen yhdessä <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>:n kanssa on riittävä, koska Collatzin olettamus olettaa, että kuvattu toiminto lopulta päättyy <syntaxhighlight lang="pascal" enclose="none">1</syntaxhighlight>: n, mutta ei kerro sitä varmasti.  
+
<syntaxhighlight lang="pascal" inline>for</syntaxhighlight>-silmukan valitseminen yhdessä <syntaxhighlight lang="pascal" inline>break</syntaxhighlight>:n kanssa on riittävä, koska Collatzin olettamus olettaa, että kuvattu toiminto lopulta päättyy <syntaxhighlight lang="pascal" inline>1</syntaxhighlight>: n, mutta ei kerro sitä varmasti.  
Siksi - matemaattisesti - käyttämällä ehtoa <syntaxhighlight lang="pascal" enclose="none">while n <> 1 do</syntaxhighlight> ei ota huomioon olosuhteita, että ongelma on oletus, mutta ehdottaa, että se päätetään lopulta johtaa <syntaxhighlight lang="pascal" enclose="none">n = 1</syntaxhighlight>.
+
Siksi - matemaattisesti - käyttämällä ehtoa <syntaxhighlight lang="pascal" inline>while n <> 1 do</syntaxhighlight> ei ota huomioon olosuhteita, että ongelma on oletus, mutta ehdottaa, että se päätetään lopulta johtaa <syntaxhighlight lang="pascal" inline>n = 1</syntaxhighlight>.
  
  
 
== Muut huomiot ==
 
== Muut huomiot ==
  
Kuitenkin <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>:n käyttö on yleensä huonoa tyyliä, koska se "siirtyy" silmukan ehtoon.  
+
Kuitenkin <syntaxhighlight lang="pascal" inline>break</syntaxhighlight>:n käyttö on yleensä huonoa tyyliä, koska se "siirtyy" silmukan ehtoon.  
Ohjelmoijan täytyy tietää, että silmukan lohkossa jossa on <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight> määritellään kaikki keskeytysolosuhteet.
+
Ohjelmoijan täytyy tietää, että silmukan lohkossa jossa on <syntaxhighlight lang="pascal" inline>break</syntaxhighlight> määritellään kaikki keskeytysolosuhteet.
  
[[GNU Pascal]]:n käsikirjan mukaan <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight> on [[Borland Pascal]]:n laajennus, kun taas [[Mac Pascal]]:ssa se oli <syntaxhighlight lang="pascal" enclose="none">leave</syntaxhighlight>.
+
[[GNU Pascal]]:n käsikirjan mukaan <syntaxhighlight lang="pascal" inline>break</syntaxhighlight> on [[Borland Pascal]]:n laajennus, kun taas [[Mac Pascal]]:ssa se oli <syntaxhighlight lang="pascal" inline>leave</syntaxhighlight>.
[[FPC]]:n [[Mode_MacPas|{$mode macpas}]] tietää ainoastaan <syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>:n.
+
[[FPC]]:n [[Mode_MacPas|{$mode macpas}]] tietää ainoastaan <syntaxhighlight lang="pascal" inline>break</syntaxhighlight>:n.
  
 
== Katso myös ==
 
== Katso myös ==
* {{Doc|package=RTL|unit=system|identifier=break|text=<syntaxhighlight lang="pascal" enclose="none">break</syntaxhighlight>}} in the <syntaxhighlight lang="pascal" enclose="none">system</syntaxhighlight> unit
+
* {{Doc|package=RTL|unit=system|identifier=break|text=<syntaxhighlight lang="pascal" inline>break</syntaxhighlight>}} in the <syntaxhighlight lang="pascal" inline>system</syntaxhighlight> unit
* [[Exit|<syntaxhighlight lang="pascal" enclose="none">exit</syntaxhighlight>]] to return from routines
+
* [[Exit|<syntaxhighlight lang="pascal" inline>exit</syntaxhighlight>]] to return from routines
* [[Continue|<syntaxhighlight lang="pascal" enclose="none">continue</syntaxhighlight>]] ohittaa jäljellä olevan iteroinnin
+
* [[Continue|<syntaxhighlight lang="pascal" inline>continue</syntaxhighlight>]] ohittaa jäljellä olevan iteroinnin
* [[Goto|<syntaxhighlight lang="pascal" enclose="none">goto</syntaxhighlight>]]<!-- an equally disfavored statement as “break” -->
+
* [[Goto|<syntaxhighlight lang="pascal" inline>goto</syntaxhighlight>]]<!-- an equally disfavored statement as “break” -->
  
 
<small>
 
<small>
Line 87: Line 87:
 
== Lähteet ==
 
== Lähteet ==
 
; 1
 
; 1
: compare remarks in [https://www.freepascal.org/docs-html/ref/refsu58.html the reference manual § “The <syntaxhighlight lang="pascal" enclose="none">For..to</syntaxhighlight>/<syntaxhighlight lang="pascal" enclose="none">downto..do</syntaxhighlight> statement”] and [https://www.freepascal.org/docs-html/ref/refsu3.html § “reserved words”]
+
: compare remarks in [https://www.freepascal.org/docs-html/ref/refsu58.html the reference manual § “The <syntaxhighlight lang="pascal" inline>For..to</syntaxhighlight>/<syntaxhighlight lang="pascal" inline>downto..do</syntaxhighlight> statement”] and [https://www.freepascal.org/docs-html/ref/refsu3.html § “reserved words”]
 
</small>
 
</small>

Latest revision as of 16:16, 6 August 2022

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

 1program collatz(input, output, stderr);
 2
 3procedure collatzIterative(n: qword);
 4var
 5	i: qword;
 6begin
 7	for i := 0 to high(i) do
 8	begin
 9		writeLn('step ', i:20, ': ', n);
10		
11		// Collatz conjecture: sequence ends with 1
12		if (n = 1) or (n > (high(n) / 3 - 1)) then
13		begin
14			// leave loop, as next value may get out of range
15			break;
16		end;
17		
18		// n := ifThen(odd(n), 3 * n + 1, n div 2);
19		if odd(n) then
20		// n is odd
21		begin
22			n := 3 * n + 1;
23		end
24		// n is even
25		else
26		begin
27			n := n div 2;
28		end;
29	end;
30end;
31
32var
33	n: longword;
34begin
35	readLn(n);
36	
37	if n < 1 then
38	begin
39		writeLn(stderr, 'not a positive integer');
40		halt(1);
41	end;
42	
43	collatzIterative(n);
44end.

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”