Sign in Join
Wiki copytemporary

^/fi: what changed

Revision 4 to 5. Removed lines have a minus sign; added lines have a plus sign.

Title: ;/fi ^/fi

OldNewLine
1-<div style="float:left; margin: 0 25px 20px 0; padding:50px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">
1+<div style="float:right; margin: 0 25px 20px 0; padding:40px; font-size:500%; font-family: Georgia; background-color: #f9f9f9; border: 2px solid #777777;">
22
3-;
3+^
44
55</div>
66
7-Puolipisteen [[ASCII/fi|ASCII]] tai unicode arvo on 59 ([[Hexadecimal/fi|Heksadesimaalisena]] \$3B).
8-
9-**Puolipistettä**, ***;*** käytetään erottamaan lauseita (toisin kuin jossain muissa ohjelmointikielissä, jossaa sitä käytetään lauseen lopettamiseen ). Sitä on pakko käyttää useimmissa lauseissa, vapaaehtoisesti joissakin lauseissa ja sen käyttö on kiellettyä tietyssä lauseissa.
10-
11-(Jotta selitettäisiin käyttö, jossa Pascalin avainsanoja viitataan tämän artikkelin tekstissä, ne on kirjoitettu isoilla kirjaimina. Ohjelmalistaukset käyttävät pieniä kirjaimia.)
7+[[ASCII/fi|ASCII:ssa]] merkkikoodi `94` desimaalisena (tai [[Hexadecimal/fi|heksadesimaalisena]] `5E`) on määritelty `^` (circumflex-aksentti) merkiksi.
128
13-Puolipiste on yleensä pakollinen ja sitä tarvitaan jokaisen lauseen jälkeen. Paikat, joissa se on valinnainen, ovat
9+Jokaista tietotyyppiä varten voidaan osoittaa dataa [[Pointer/fi|osoittimen tyypillä (pointer)]] operaattorin `^` avulla joka on [[Data type/fi|tietotyypin]] edessä.
1410
15-- ennen [[End|END]] lausetta
16-- ennen ohjelman [[Program|PROGRAM]] tai käännösyksikön [[Unit/fi|UNIT]] päättymispistettä
11+\
1712
18-Paikat joissa puolipiste on kielletty, ovat
13+``` pascal
14+program pointerDemo(input, output, stderr);
1915
20-- Ennen [[Begin|BEGIN]]-lausetta, joka kokoaa yhdistelmälauseen
21-- Ennen välittömästi [[Else|ELSE]]-lausetta, joka kuuluu sisäkkäiseen IF-lauseseen
16+type
17+ listItem = record
18+ payload: integer;
19+ // next _points_ _to_ a list item
20+ next: ^listItem;
21+ end;
2222
23-Se on yleensä kielletty ennen ELSE-lausetta [[If/fi|IF]] lauseessa tai [[Case/fi|CASE]] lauseessa. Jos kyseessä on kuitenkin sisäkkäinen IF-lause, sitä voidaan vaatia ennen ELSE-lausetta, jos ELSE:ä käytetään johonkin muuhun IF-lausekkeeseen aikaisemmin ohjelmassa ja varsinainen IF ei ole päättynyt ELSE-lauseeseen. Tätä tarkastellaan jäljempänä.
23+var
24+ start: ^listItem;
2425
25-## If lause ja puolipiste
26+begin
27+ new(start);
28+ if not assigned(start) then
29+ begin
30+ writeLn(stderr, 'obtaining memory for start failed');
31+ halt(1);
32+ end;
33+```
2634
27-Puolipiste on kielletty ennen ELSE lauseketta, joka koskee välittömästi IF-lausetta, jotta kääntäjä voi tietää, missä IF-lauseke päättyy. Esimerkiksi
35+Osoitinta (`pointer`) voidaan seurata, jos se on liitetty lisäämällä [[Identifier/fi|tunnisteeseen]] `^`. Sen sijaan, että muistin osoite olisi käsillä, niin nähdään sen osoittaman muistin sisältö. Jos kyseessä on tyypitetty osoitin (typed pointer), kyseisen tyypin toiminnot ja syntaksit ovat voimassa, esim. [[Becomes/fi|saa arvokseen]] seuraavassa esimerkissä.
2836
2937``` pascal
30-
31- (*0001*) if continuance then
32- (*0002*) if separated then
33- (*0003*) Condition(a)
34- (*0004*) else
35- (*0005*) if combined then
36- (*0006*) Condition(b)
37- (*0007*) else
38- (*0008*) Condition(c);
39- (*0009*) Calculate_fee;
38+ // _de-reference_ the pointer, i.e. follow it
39+ start^.payload := 7;
40+
41+ dispose(start);
42+end.
4043```
4144
42-Tässä esimerkissä puolipiste on kielletty rivillä 3 (muussa tapauksessa ELSE rivillä 4 sovellettaisiin IF: lauseeseen rivillä 1).
43-
44-Jos rivien 1 ja 2 välissä olisi BEGIN-rivi ja rivin 8 jälkeen END-rivi, niin puolipiste olisi kielletty rivillä 1.
45-
46-Koska rivillä 6 ei ole puolipistettä niin ELSE-arvo rivillä 7 koskee IF: tä rivillä 5. Jos rivi 6 päättyisi puolipisteeseen, niin ELSE rivillä 7 olisikin voimassa IF:n rivillä 1 kanssa (ELSE rivillä 4 koskee IF: tä rivillä 2). Näin puolipiste on tässä yhteydessä kielletty saadakseen tämän tuloksen.
47-
48-Kuitenkin jos halutaan että ELSE-osa koskee riviä 1 niin puolipiste olisi pakollinen rivillä 6, joka "sulkee" IF:n rivillä 5.
45+Pyrkimys seurata [[Nil/fi|nil]] osoitinta aiheuttaa kuitenkin [[runtime error/fi|ajonaikaisen virheen]] (RTE 216 “general protection fault”). Tilanne on, että ehto, `not assigned(start)` rivillä 15, on tarkoitus saada kiinni.
4946
50-Jos rivin 1 yläpuolella oli IF-lause niin puolipiste rivillä 8 sulkee IF-lausekkeen rivillä 1 ja jos ELSE sijoitettaisiin rivin 8 jälkeen niin se ei koske IF-lauseketta rivillä 1.
47+## Katso myös
5148
52-Usein on suositeltavaa liittää kaikki lauseet IF-lauseen sisällä BEGIN / END-lohkolla, jos saattaa olla kysymys siitä, mihin ELSE-arvoon sovelletaan mitäkin IF lausetta sisäkkäisten IF-lausekkeiden joukossa.
49+- [[$pointerMath/fi|{$pointerMath off}]] ei salli osoittimien käyttöä aritmeettisissa lausekkeissa
50+- [[$typedAddress/fi|{$typedAddress on}]] yhdessä [[@|@-osoiteoperaattorin kanssa]]
51+- [[$modeSwitch/fi|{$modeSwitch autoDeref-}]]
5352
5453---
55-*From the Free Pascal wiki, page ";/fi", as it stood on 2020-02-01 after a change by GAN, 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](/wiki-contact).*
54+*From the Free Pascal wiki, page "^/fi", as it stood on 2023-02-18 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](/wiki-contact).*

Back to history