Matrixgegevenstypen in Delphi

Met arrays kunnen we naar een reeks variabelen met dezelfde naam verwijzen en een nummer (een index) gebruiken om afzonderlijke elementen in die serie op te roepen. Arrays hebben zowel boven- als ondergrenzen en de elementen van de array zijn aaneengesloten binnen die grenzen.

Elementen van de array zijn waarden van hetzelfde type (tekenreeks, geheel getal, record, aangepast object).

In Delphi zijn er twee soorten arrays: een array met een vaste grootte die altijd dezelfde grootte blijft - een statische array - en een dynamische array waarvan de grootte tijdens runtime kan veranderen.

Statische arrays

Stel dat we een programma schrijven waarmee een gebruiker aan het begin van elke dag een aantal waarden (bijvoorbeeld het aantal afspraken) kan invoeren. We zouden ervoor kiezen om de informatie in een lijst op te slaan. We zouden deze lijst kunnen noemen afspraken, en elk nummer kan worden opgeslagen als Afspraken [1], Afspraken [2], enzovoort.

Om de lijst te gebruiken, moeten we deze eerst declareren. Bijvoorbeeld:

 var Afspraken: rangschikking[0… 6] van Geheel getal; 

declareert een variabele met de naam Afspraken die een eendimensionale matrix (vector) van 7 gehele waarden bevat. Gegeven deze verklaring geeft Afspraken [3] de vierde gehele waarde in Afspraken aan. Het nummer tussen haakjes wordt de index genoemd.

Als we een statische array maken maar geen waarden toewijzen aan alle elementen, bevatten de ongebruikte elementen willekeurige gegevens; ze zijn als niet-geïnitialiseerde variabelen. De volgende code kan worden gebruikt om alle elementen in de array Afspraken op 0 te zetten.

 voor k: = 0 naar 6 Doen Afspraken [k]: = 0; 

Soms moeten we gerelateerde informatie in een array bijhouden. Als u bijvoorbeeld elke pixel op uw computerscherm wilt bijhouden, moet u de X- en Y-coördinaten raadplegen met een veelzijdig array om de waarden op te slaan.

Met Delphi kunnen we arrays met meerdere dimensies declareren. De volgende instructie verklaart bijvoorbeeld een tweedimensionale reeks van 7 bij 24:

 var DayHour: rangschikking[1 ... 7, 1 ... 24] van Real; 

Om het aantal elementen in een multidimensionale array te berekenen, vermenigvuldigt u het aantal elementen in elke index. De variabele DayHour, hierboven aangegeven, houdt 168 (7 * 24) elementen opzij, in 7 rijen en 24 kolommen. Om de waarde uit de cel in de derde rij en de zevende kolom op te halen, gebruiken we: DayHour [3,7] of DayHour [3] [7]. De volgende code kan worden gebruikt om alle elementen in de DayHour-array op 0 te zetten.

 voor i: = 1 tot 7 doen voor j: = 1 tot 24 doen DayHour [i, j]: = 0; 

Dynamische arrays

Je weet misschien niet precies hoe groot je een array moet maken. Misschien wilt u de mogelijkheid hebben om de grootte van de array tijdens runtime wijzigen. Een dynamische array verklaart het type, maar niet de grootte. De werkelijke grootte van een dynamische array kan tijdens runtime worden gewijzigd met behulp van de SetLength-procedure.

 var Studenten: reeks van tekenreeksen; 

maakt een eendimensionale dynamische reeks strings. De verklaring kent geen geheugen toe voor studenten. We roepen de SetLength-procedure aan om de array in het geheugen te maken. Bijvoorbeeld, gezien de bovenstaande verklaring,

 SetLength (studenten, 14); 

kent een reeks van 14 strings toe, geïndexeerd van 0 tot 13. Dynamische arrays zijn altijd geheel geïndexeerd, altijd beginnend van 0 tot één minder dan hun grootte in elementen.

Gebruik de volgende code om een ​​tweedimensionale dynamische array te maken:

 var Matrix: array van array van Dubbele; beginnen SetLength (Matrix, 10, 20) einde; 

die ruimte toewijst voor een tweedimensionale, 10 bij 20 reeks dubbele waarden met dubbele drijvende komma.

Om de geheugenruimte van een dynamische array te verwijderen, wijst u nul toe aan de arrayvariabele, zoals:

 Matrix: = nul; 

Heel vaak weet uw programma tijdens het compileren niet hoeveel elementen nodig zijn; dat nummer zal pas bekend zijn na runtime. Met dynamische arrays kunt u slechts zoveel opslag toewijzen als op een bepaald moment nodig is. Met andere woorden, de grootte van dynamische arrays kan tijdens runtime worden gewijzigd, wat een van de belangrijkste voordelen van dynamische arrays is.

In het volgende voorbeeld wordt een array met gehele waarden gemaakt en wordt vervolgens de functie Kopiëren aangeroepen om de array te verkleinen.

 var Vector: reeks van Geheel getal; k: geheel getal; beginnen SetLength (Vector, 10); voor k: = Laag (Vector) naar High (Vector) Doen Vector [k]: = i * 10;… // nu hebben we meer ruimte nodig  SetLength (Vector, 20); // hier kan een vectorarray maximaal 20 elementen bevatten // (er zijn er al 10)einde; 

De functie SetLength maakt een grotere (of kleinere) array en kopieert de bestaande waarden naar de nieuwe array. De functies Laag en Hoog zorgen ervoor dat u toegang hebt tot elk array-element zonder terug te kijken in uw code voor de juiste onderste en bovenste indexwaarden.