Miten (vakio) taulukko alustetaan?
Taulukon alustus?
6
695
Vastaukset
- Delphiguru
vakiotaulukko alustetaan näin:
Esimerkkitaulukossa on siis 39 alkiota, indeksit ovat tässä 0..38
const
CC = 39;
VakioTaulukkoA : Array[0..CC-1] of Integer = (
50, 40, 27, 36, 34, 24, 21, 4, 31, 24, 22, 25, 29, 36, 10, 13, 10, 42, 150,
31, 12, 8, 66, 52, 5, 48, 12, 14, 3, 9, 1, 4, 7, 3, 3, 3, 2, 14, 4
); - PisteP
Joissakin tapauksissa myös aliohjelmaa FillChar on käytetty.
- -d2006-
Vakioita EI normaalisti tulisi koskaan muuttaa,
eikä niitä voi edes muuttaa, vakiot määritellään ohjelman/metodin yms. Alustuksessa, tuo mainitsemasi FillChar kyllä toimii mikä kääntäjään on erikseen asetettu että sallitaan vakioiden ajonaikainen muokkaus, mutta sitä ei voi alkajille edes suositella.
Alla lainaus delphin ohjeesta.
"Controls whether typed constants can be modified or not. When enabled (equivalent to {$J }), typed constants can be modified, and are in essence initialized variables. When disabled (equivalent to {$J-}), typed constants are truly constant, and any attempt to modify a typed constant causes the compiler to report an error. Writable consts refers to the use of a typed const as a variable modifiable at runtime.
Old source code that uses writable typed constants must be compiled with this option enabled, but for new applications it is recommended that you use initialized variables and compile your code with the option disabled."
- lisäkysymys
Miten tuo alustus tehdään kun joku taulukko halutaan alkuarvottaa tietyillä arvoilla?
- Delphiguru
unit Esimerkki;
interface
const
CC = 39;
var
VakioTaulukkoA : Array[0..CC-1] of Integer;
implementation
initialization
{} FillChar(VakioTaulukkoA, SizeOf(VakioTaulukkoA), 0);
// em. nollan tilalle voi laittaa minkä tahansa muunkin tavuksi (Byte) tulkittavan arvon, esim: $80 mikä tarkoittaa 80h = 128.
finalization
end.
HUOM: huomasithan, että tässä taulukko VakioTaulukkoA ei ole enää const vaan var eli normaali muuttuja.
Tuo, että kyseessä on BYTE, niin tarkoittaa juuri sitä, että jos laitat:
FillChar(VakioTaulukkoA, SizeOf(VakioTaulukkoA), $80);
niin silloin yhden Integer -tyyppisen alkion arvoksi tulee $80808080 = -2139062144 - WantSomeMore
Jos tavu ei riitä alkuarvoksi niin voit aina seuraavalla yksinkertaisella tavalla alustaa taulukon haluamallasi (tyypin rajoissa) olevalla arvolla.
Esim.
var
tau : array[1..10] of Cardinal;
Index : Integer;
begin
// Alustetaan taulukko suurimmalla mahdollisella 32 (etumerkittömällä) bitin arvolla
for Index := Low(Tau) to High(Tau) do
tau[Index] := INFINITE;
Tuo Low/High ihan vaan esimerkin kannalta kun joskus ovat käteviä dynaamisissa ohjelmissa..
Ketjusta on poistettu 0 sääntöjenvastaista viestiä.
Luetuimmat keskustelut
Sä olet epävakaa
tai ainakin yrität onnistuneesti vaikuttaa siltä. Ei sun kanssa uskalla ruveta yhtään mihinkään, menis hommat ojasta all462085Mieti miten paljon yritin
Löytää yhteyttä kanssasi uudelleen sen väärinymmärryksen jälkeen. Koen etten tullut puoleltasi hyvin kohdelluksi mies😔571829- 361534
Yksi viesti häneltä ja ottaisin takaisin
Mutta ei sitä tule. Ja ehkä parempi niin, tein jo valintani. En saanut häneltä tarpeeksi, kaikki muu meni minun edelle j331489- 781238
- 631142
Keskisarjan puheet
Onko kansanedustajan sopivaa puhua tuollai vai pitäisikkö potkia pois eduskunnasta?193993- 58963
- 49923
- 24904