Sign in Join
Wiki copytemporary

Array/fi: what changed

Revision 1 to 2. Removed lines have a minus sign; added lines have a plus sign.

OldNewLine
1-Taulukko on rakenteellisen [data tyypin](</index.php?title=data_type&action=edit&redlink=1> "data type \(page does not exist\)") käsite.Se ryhmittelee saman tyyppisiä elementtejä. Ryhmä tarjoaa satunnaisen pääsyn jokaiseen sen elementtiin tai komponenttiin, lineaarisella indeksillä.
2-
3-Taulukkoa tarkoittava sana `array` on [[Reserved word/fi|varattu sana]]. Sana array on varattu sana. Se esiintyy aina yhdessä sanan [[Of/fi|`of`]] kanssa.
4-
5-## Contents
1+Taulukko on rakenteellisen [[data type|data tyypin]] käsite.Se ryhmittelee saman tyyppisiä elementtejä. Ryhmä tarjoaa satunnaisen pääsyn jokaiseen sen elementtiin tai komponenttiin, lineaarisella indeksillä.
62
7- * 1 Käsite
8- * 2 Käyttö
9- * 2.1 Pituus
10- * 2.1.1 Staattinen taulukko
11- * 2.1.2 Dynaamiset taulukot
12- * 2.2 Elementtien osoittaminen
13- * 3 Sovellukset
14- * 4 Katso myös
3+Taulukkoa tarkoittava sana `array` on [[Reserved word/fi|varattu sana]]. Sana array on varattu sana. Se esiintyy aina yhdessä sanan [[Of/fi|of]] kanssa.
154
165## Käsite
176
18-Taulukko eli `array` on rajoitettu ja järjestetty elementtiyhdistelmä, joilla kaikilla on sama tietotyyppi, jota kutsutaan "perustyypiksi". Sillä on ainakin yksi erillinen, rajattu ulottuvuus, jossa luetellaan peräkkäin kaikki sen elementit. Kukin elementti voidaan yksilöidä yksilöllisesti yhdellä tai useammalla skalaariarvolla, joita kutsutaan indekseiksi, näiden ulottuvuuksien mukaisesti.
7+Taulukko eli `array` on rajoitettu ja järjestetty elementtiyhdistelmä, joilla kaikilla on sama tietotyyppi, jota kutsutaan "perustyypiksi". Sillä on ainakin yksi erillinen, rajattu ulottuvuus, jossa luetellaan peräkkäin kaikki sen elementit. Kukin elementti voidaan yksilöidä yksilöllisesti yhdellä tai useammalla skalaariarvolla, joita kutsutaan indekseiksi, näiden ulottuvuuksien mukaisesti.
198
20-Yksiulotteinen taulukko (`array`) muistuttaa **n-tuple** a, kuten matematiikasta tiedetään, mutta sillä on rajoitus olla homogeeninen (kaikki elementit pitää olla saman tyyppisiä). Kaikkien mahdollisten arvojen, joita tällainen ryhmä voi sisältää, on valikoima homogeeninen peruskartaninen tuote, joka on perustyyppi.
9+Yksiulotteinen taulukko (`array`) muistuttaa **n-tuple**a, kuten matematiikasta tiedetään, mutta sillä on rajoitus olla homogeeninen (kaikki elementit pitää olla saman tyyppisiä). Kaikkien mahdollisten arvojen, joita tällainen ryhmä voi sisältää, on valikoima homogeeninen peruskartaninen tuote, joka on perustyyppi.
2110
22-Kaksiulotteinen taulukko muistuttaa matemaattista konseptia nimeltä matriisi, paitsi homogeenisuusrajoituksella.
11+Kaksiulotteinen taulukko muistuttaa matemaattista konseptia nimeltä matriisi, paitsi homogeenisuusrajoituksella.
2312
2413## Käyttö
2514
2615### Pituus
2716
28-Alun perin Pascal:ssa oli vain kiinteän pituuden mukainen taulukko ([[Standard Pascal/fi|Standard Pascal]]). Kuinka monesta elementistä taulukko koostui, oli tiedettävä [[Compile time/fi|käännösaikana]]. Koska tämä osoittautui suureksi rajoitukseksi ja puhumattakaan muutoksista tietokoneiden laitteistoissa, sen jälkeen on perusteltua ottaa askel eteenpäin, vaihtelevan pituinen taulukko esiteltiin.
17+Alun perin Pascal:ssa oli vain kiinteän pituuden mukainen taulukko ([[Standard Pascal/fi|Standard Pascal]]). Kuinka monesta elementistä taulukko koostui, oli tiedettävä [[Compile time/fi|käännösaikana]]. Koska tämä osoittautui suureksi rajoitukseksi ja puhumattakaan muutoksista tietokoneiden laitteistoissa, sen jälkeen on perusteltua ottaa askel eteenpäin, vaihtelevan pituinen taulukko esiteltiin.
2918
30-[[Extended Pascal]] määritteli tähän käsitteen "schemata". [[Delphi/fi|Delphi]] esitteli “dynamic arrays”. Vuonna 2018 [FPC](</index.php?title=FPC/fi&action=edit&redlink=1> "FPC/fi \(page does not exist\)") tukee viimeksi mainittuja vain pituudeltaan vaihtelevia taulukkoja, kun taas "schemata" -tuki on vasta suunnitteluvaiheessa.
19+[[Extended Pascal]] määritteli tähän käsitteen "schemata". [[Delphi/fi|Delphi]] esitteli “dynamic arrays”. Vuonna 2018 [[FPC/fi|FPC]] tukee viimeksi mainittuja vain pituudeltaan vaihtelevia taulukkoja, kun taas "schemata" -tuki on vasta suunnitteluvaiheessa.
3120
32-Riippuen siitä, onko taulukon tarkoitus pystyä muuttamaan sen kokoa, sen määritelmä vaihtelee, mutta vain marginaalisesti. Yksiulotteinen staattinen taulukko tyypin määritelmä näyttää tältä:
33-```
21+Riippuen siitä, onko taulukon tarkoitus pystyä muuttamaan sen kokoa, sen määritelmä vaihtelee, mutta vain marginaalisesti. Yksiulotteinen staattinen taulukko tyypin määritelmä näyttää tältä:
22+
23+``` pascal
3424array[indexType] of baseType
3525```
3626
37-Dynaamisen taulukkotyypin määritelmä on yksinkertaisesti vapautettu ulottuvuuden määrityksestä:
38-```
27+Dynaamisen taulukkotyypin määritelmä on yksinkertaisesti vapautettu ulottuvuuden määrityksestä:
28+
29+``` pascal
3930array of baseType
4031```
4132
4233#### Staattinen taulukko
4334
44-Staattisissa taulukoissa kaikki mitta-alueet tunnetaan etukäteen. Kaikkien ulottuvuuksien on oltava peräkkäisiä. Seuraava koodi näyttää voimassa olevat taulukon määritykset, jotka kaikki ovat staattisia.
45-```
35+Staattisissa taulukoissa kaikki mitta-alueet tunnetaan etukäteen. Kaikkien ulottuvuuksien on oltava peräkkäisiä. Seuraava koodi näyttää voimassa olevat taulukon määritykset, jotka kaikki ovat staattisia.
36+
37+``` pascal
4638program staticArrayDemo(input, output, stderr);
39+
40+type
41+ // specifying ordinal types as index directly
4742
48- type
49- // specifying ordinal types as index directly
50-
51- /// allows selection of a character
52- /// based on a Boolean value
53- characterChoice = array[boolean] of UCS4char;
54-
55- // enumerations
56-
57- /// enumerates Cartesian axes
58- spaceAxis = (xAxis, yAxis, zAxis);
59- /// a point in three-dimensional Euclidean space
60- locus = array[spaceAxis] of valReal;
61- /// a point in a two-dimensional Euclidean plane
62- point = array[xAxis..yAxis] of valReal;
63-
64- // integer subranges
65-
66- level = array[-24..24] of longint;
67- box = array[-1..1, -1..1, -1..1] of boolean;
68- transformationMatrix = array[0..1, 0..1] of valReal;
69- begin
70- end.
43+ /// allows selection of a character
44+ /// based on a Boolean value
45+ characterChoice = array[boolean] of UCS4char;
46+
47+ // enumerations
48+
49+ /// enumerates Cartesian axes
50+ spaceAxis = (xAxis, yAxis, zAxis);
51+ /// a point in three-dimensional Euclidean space
52+ locus = array[spaceAxis] of valReal;
53+ /// a point in a two-dimensional Euclidean plane
54+ point = array[xAxis..yAxis] of valReal;
55+
56+ // integer subranges
57+
58+ level = array[-24..24] of longint;
59+ box = array[-1..1, -1..1, -1..1] of boolean;
60+ transformationMatrix = array[0..1, 0..1] of valReal;
61+begin
62+end.
7163```
7264
73-Koska kaikkien taulukon elementtien täytyy olla osoitettavissa, on olemassa elementtien maksimiraja, jota taulukko voi pitää. Jokaisen taulukon koon ([[SizeOf/fi|`sizeOf`]]) on oltava pienempi kuin [`ptrInt`](<https://www.freepascal.org/docs-html/rtl/system/ptrint.html>)n maksimiarvo.
65+Koska kaikkien taulukon elementtien täytyy olla osoitettavissa, on olemassa elementtien maksimiraja, jota taulukko voi pitää. Jokaisen taulukon koon ([[SizeOf/fi|sizeOf]]) on oltava pienempi kuin [`ptrInt`](https://www.freepascal.org/docs-html/rtl/system/ptrint.html)n maksimiarvo.
7466
7567#### Dynaamiset taulukot
7668
77-[[Dynamic array/fi|Dynaaminen taulukko]] on lähestymistapa, jolla voittaa etukäteen kaikkien ulottuvuuksien tuntemisen rajoitukset. Katso lisätietoja sen omilta sivuilta.
69+[[Dynamic array/fi|Dynaaminen taulukko]] on lähestymistapa, jolla voittaa etukäteen kaikkien ulottuvuuksien tuntemisen rajoitukset. Katso lisätietoja sen omilta sivuilta.
7870
7971### Elementtien osoittaminen
8072
81-Taulukon yksittäinen elementti on osoitettu nimeämällä taulukon muuttujan tunniste seuraten kelvoitelukujen sisältämää kelvollista indeksiä joka on hakasulkujen sisällä.
82-```
73+Taulukon yksittäinen elementti on osoitettu nimeämällä taulukon muuttujan tunniste seuraten kelvoitelukujen sisältämää kelvollista indeksiä joka on hakasulkujen sisällä.
74+
75+``` pascal
8376program arrayAddressDemo(input, output, stderr);
84- var
85- msg: array[0..2] of char;
86- begin
87- msg[0] := 'H';
88- msg[1] := 'i';
89- msg[2] := '!';
90- writeLn(msg);
91- end.
77+var
78+ msg: array[0..2] of char;
79+begin
80+ msg[0] := 'H';
81+ msg[1] := 'i';
82+ msg[2] := '!';
83+ writeLn(msg);
84+end.
9285```
9386
94-Moniulotteisten taulukoiden elementtejä voidaan käsitellä kahdella tavalla: joko [[Comma/fi|pilkulla]] erotettavilla indekseillä:
95-```
87+Moniulotteisten taulukoiden elementtejä voidaan käsitellä kahdella tavalla: joko [[Comma/fi|pilkulla]] erotettavilla indekseillä:
88+
89+``` pascal
9690arrayVariable[firstDimensionIndex, secondDimensionIndex, thirdDimensionIndex]
9791```
9892
99-Tai sijoittamalla indeksejä omiin hakasulkeisiin:
100-```
93+Tai sijoittamalla indeksejä omiin hakasulkeisiin:
94+
95+``` pascal
10196arrayVariable[firstDimensionIndex][secondDimensionIndex][thirdDimensionIndex]
10297```
10398
104-Kolmas syntaksellisesti kelvollinen vaihtoehto olisi sekoittaa molemmat tyylit, mutta sitä pidetään huonona tyylinä, ehkä jos ei ole merkkejä ryhmähakemistoille (esim. `x`, `y` ja `z`-koordinaatit verrattuna muihin indekseihin) on OK. Siitä huolimatta vain ensimmäinen mainittu merkintä on voimassa, kun määritetään taulukon tyyppejä.
99+Kolmas syntaksellisesti kelvollinen vaihtoehto olisi sekoittaa molemmat tyylit, mutta sitä pidetään huonona tyylinä, ehkä jos ei ole merkkejä ryhmähakemistoille (esim. `x`, `y` ja `z`-koordinaatit verrattuna muihin indekseihin) on OK. Siitä huolimatta vain ensimmäinen mainittu merkintä on voimassa, kun määritetään taulukon tyyppejä.
105100
106-Huomaa, että on erittäin tärkeää määritellä indeksejä määritetyssä järjestyksessä kunkin ulottuvuuden alueella. Mieti seuraavaa ohjelmaa. Se kääntyy, mutta epäonnistuu ajon aikana `{$rangeChecks on}`:
107-```
101+Huomaa, että on erittäin tärkeää määritellä indeksejä määritetyssä järjestyksessä kunkin ulottuvuuden alueella. Mieti seuraavaa ohjelmaa. Se kääntyy, mutta epäonnistuu ajon aikana `{$rangeChecks on}`:
102+
103+``` pascal
108104program arrayAddressOrderDemo(input, output, stderr);
109- {$rangeChecks on}
110- var
111- i: integer;
112- f: array[0..1, 0..3] of boolean;
105+{$rangeChecks on}
106+var
107+ i: integer;
108+ f: array[0..1, 0..3] of boolean;
109+begin
110+ for i := 0 to 7 do
113111 begin
114- for i := 0 to 7 do
115- begin
116- f[0, i] := true;
117- end;
118- end.
112+ f[0, i] := true;
113+ end;
114+end.
119115```
120116
121-Vaikka ohjelma todellakin iteroidaan jokaisen taulukon elementin yli, se ei tee sitä suunnitellulla tavalla, mutta hyödyntää sitä, että taulukon sisäinen muistin rakenne, on vain jatkuva muistilohko. Tämä on huonoa tyyliä. Korkean tason kielen ohjelmoijan ei tarvitse huolehtia tietyistä muistin asetteluista. Luola: Tällä tavoin voidaan muokata muita muuttujia. Joka tapauksessa esiintyy [[runtime error/fi|ajonaikainen virhe]], nimittäin ”RTE 216 general protection fault”, jos yritetään päästä muistiin, joka ei kuulu ohjelmoijan toimivaltaan.
122-
123-Kun taulukoiden arvoja luetaan niin ettei tarvita sen indeksiä niin voidaan [[for-in loop|`for … in` luupilla]] (silmukalla) käydä taulukko läpi.
117+Vaikka ohjelma todellakin iteroidaan jokaisen taulukon elementin yli, se ei tee sitä suunnitellulla tavalla, mutta hyödyntää sitä, että taulukon sisäinen muistin rakenne, on vain jatkuva muistilohko. Tämä on huonoa tyyliä. Korkean tason kielen ohjelmoijan ei tarvitse huolehtia tietyistä muistin asetteluista. Luola: Tällä tavoin voidaan muokata muita muuttujia. Joka tapauksessa esiintyy [[runtime error/fi|ajonaikainen virhe]], nimittäin ”RTE 216 general protection fault”, jos yritetään päästä muistiin, joka ei kuulu ohjelmoijan toimivaltaan.
124118
125-
119+Kun taulukoiden arvoja luetaan niin ettei tarvita sen indeksiä niin voidaan [[for-in loop|for … in luupilla]] (silmukalla) käydä taulukko läpi.
126120
127121## Sovellukset
128122
129-Katso esimerkiksi:
123+Katso esimerkiksi:
130124
131- * [[Array sort|array sort]]
132- * [[15-puzzle/fi|15.peli]] tai [[Peg Solitaire tutorial/fi|Peg]]:n pelilaudan tilat tallennetaan taulukkona
125+- [[Array sort|array sort]]
126+- [[15-puzzle/fi|15.peli]] tai [[Peg Solitaire tutorial/fi|Peg]]:n pelilaudan tilat tallennetaan taulukkona
133127
134-Oletus [RTL](</index.php?title=RTL/fi&action=edit&redlink=1> "RTL/fi \(page does not exist\)"): n system käännösyksikön funktio [`system.slice`](<https://www.freepascal.org/docs-html/rtl/system/slice.html>) palauttaa taulukon alkuosan, joka on samanlainen kuin Rubyn notation a`arrayVariable[0, n]`. Lisäksi on [`system.arrayStringToPPchar`](<https://www.freepascal.org/docs-html/rtl/system/arraystringtoppchar.html>). Useimmat RTL:n matematiikkayksikön [tilastolliset rutiinit](</index.php?title=Functions_for_descriptive_statistics/fi&action=edit&redlink=1> "Functions for descriptive statistics/fi \(page does not exist\)") hyväksyvät taulukon parametreiksi niinkuin jotkut muutkin rutiinit.
128+Oletus [[RTL/fi|RTL]]: n system käännösyksikön funktio [`system.slice`](https://www.freepascal.org/docs-html/rtl/system/slice.html) palauttaa taulukon alkuosan, joka on samanlainen kuin Rubyn notation a`arrayVariable[0, n]`. Lisäksi on [`system.arrayStringToPPchar`](https://www.freepascal.org/docs-html/rtl/system/arraystringtoppchar.html). Useimmat RTL:n matematiikkayksikön [[Functions for descriptive statistics/fi|tilastolliset rutiinit]] hyväksyvät taulukon parametreiksi niinkuin jotkut muutkin rutiinit.
135129
136130## Katso myös
137131
138- * [[Type information]]
139- * Opas: [1-dimensional arrays](</index.php?title=Basic_Pascal_Tutorial/Chapter_5/1-dimensional_arrays/fi&action=edit&redlink=1> "Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/fi \(page does not exist\)")
140- * Opas: [multidimensional arrays](</index.php?title=Basic_Pascal_Tutorial/Chapter_5/Multidimensional_arrays/fi&action=edit&redlink=1> "Basic Pascal Tutorial/Chapter 5/Multidimensional arrays/fi \(page does not exist\)")
141- * [[Example: Multidimensional dynamic array|example: multidimensional dynamic array]]
142- * [[Why Pascal is Not My Favorite Programming Language|Why Pascal is not my favorite programming language § “the size of an array is part of its type”]]
143- * [[Defensive programming techniques|defensive programming techniques]]
144- * [[Vectorization|vectorization]]
145- * [`matrix` unit](<https://www.freepascal.org/docs-html/rtl/matrix/index.html>)
146-
147-
148-
149-Navikointipalkki: datatyypit Yksinkertaiset datatyypit | [[Boolean/fi|`boolean`]] [[Byte/fi|`byte`]] [`cardinal`](</index.php?title=Cardinal/fi&action=edit&redlink=1> "Cardinal/fi \(page does not exist\)") [`char`](</index.php?title=Char/fi&action=edit&redlink=1> "Char/fi \(page does not exist\)") [[Currency/fi|`currency`]] [[Double/fi|`double`]] [`dword`](</index.php?title=DWord/fi&action=edit&redlink=1> "DWord/fi \(page does not exist\)") [`extended`](</index.php?title=Extended/fi&action=edit&redlink=1> "Extended/fi \(page does not exist\)") [`int8`](</index.php?title=Int8/fi&action=edit&redlink=1> "Int8/fi \(page does not exist\)") [`int16`](</index.php?title=Int16/fi&action=edit&redlink=1> "Int16/fi \(page does not exist\)") [`int32`](</index.php?title=Int32/fi&action=edit&redlink=1> "Int32/fi \(page does not exist\)") [`int64`](</index.php?title=Int64/fi&action=edit&redlink=1> "Int64/fi \(page does not exist\)") [[Integer/fi|`integer`]] [[Longint/fi|`longint`]] [`real`](</index.php?title=Real/fi&action=edit&redlink=1> "Real/fi \(page does not exist\)") [[Shortint/fi|`shortint`]] [[Single/fi|`single`]] [`smallint`](</index.php?title=Smallint/fi&action=edit&redlink=1> "Smallint/fi \(page does not exist\)") [[Pointer/fi|`pointer`]] [`qword`](</index.php?title=QWord/fi&action=edit&redlink=1> "QWord/fi \(page does not exist\)") [[Word/fi|`word`]]
150----|---
151-Monimutkaiset datatyypit | `array` [`class`](</index.php?title=Class/fi&action=edit&redlink=1> "Class/fi \(page does not exist\)") [`object`](</index.php?title=Object/fi&action=edit&redlink=1> "Object/fi \(page does not exist\)") [[Record/fi|`record`]] [[Set/fi|`set`]] [`string`](</index.php?title=String/fi&action=edit&redlink=1> "String/fi \(page does not exist\)") [`shortstring`](</index.php?title=Shortstring/fi&action=edit&redlink=1> "Shortstring/fi \(page does not exist\)")
152-
153-
154-
155-****
132+- [[Type information]]
133+- Opas: [[Basic Pascal Tutorial/Chapter 5/1-dimensional arrays/fi|1-dimensional arrays]]
134+- Opas: [[Basic Pascal Tutorial/Chapter 5/Multidimensional arrays/fi|multidimensional arrays]]
135+- [[Example: Multidimensional dynamic array|example: multidimensional dynamic array]]
136+- [[Why Pascal is Not My Favorite Programming Language|Why Pascal is not my favorite programming language § “the size of an array is part of its type”]]
137+- [[Defensive programming techniques|defensive programming techniques]]
138+- [[Vectorization|vectorization]]
139+- [`matrix` unit](https://www.freepascal.org/docs-html/rtl/matrix/index.html)
156140
157141---
158-*From the Free Pascal wiki, page "Array/fi", as the Internet Archive kept it on 2025-03-25. 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).*
142+*From the Free Pascal wiki, page "Array/fi", as it stood on 2023-01-25 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