Οι πίνακες μας επιτρέπουν να αναφερθούμε σε μια σειρά μεταβλητών με το ίδιο όνομα και να χρησιμοποιήσουμε έναν αριθμό (δείκτη) για να καλέσουμε μεμονωμένα στοιχεία σε αυτή τη σειρά. Οι πίνακες έχουν και τα άνω και τα κάτω όρια και τα στοιχεία της συστοιχίας είναι συνεχόμενα εντός αυτών των ορίων.
Τα στοιχεία του πίνακα είναι τιμές που είναι όλες του ίδιου τύπου (συμβολοσειρά, ακέραιος αριθμός, εγγραφή, προσαρμοσμένο αντικείμενο).
Στους Δελφούς, υπάρχουν δύο τύποι συστοιχιών: ένας πίνακας σταθερού μεγέθους ο οποίος παραμένει πάντα το ίδιο μέγεθος - ένας στατικός πίνακας - και ένας δυναμικός πίνακας του οποίου το μέγεθος μπορεί να αλλάξει κατά το χρόνο εκτέλεσης.
Στατικές συστοιχίες
Ας υποθέσουμε ότι γράφουμε ένα πρόγραμμα που επιτρέπει στον χρήστη να εισαγάγει ορισμένες αξίες (π.χ. τον αριθμό των ραντεβού) στην αρχή κάθε ημέρας. Θα επιλέξαμε να αποθηκεύσουμε τις πληροφορίες σε μια λίστα. Θα μπορούσαμε να καλέσουμε αυτή τη λίστα Εφόδια, και κάθε αριθμός μπορεί να αποθηκευτεί ως Ραντεβού [1], Ραντεβού [2] κ.ο.κ.
Για να χρησιμοποιήσουμε τη λίστα, πρέπει πρώτα να την δηλώσουμε. Για παράδειγμα:
var Συναντήσεις: πίνακας [0..6] του Ακατηγορίας.
δηλώνει μια μεταβλητή που ονομάζεται "Συνεδριάσεις" ("Συνεδριάσεις") που περιέχει ένα μονοδιάστατο πίνακα (διανυσματικό) 7 ακέραιων τιμών. Δεδομένης αυτής της δήλωσης, τα ραντεβού [3] υποδηλώνουν την τέταρτη τιμή ακέραιων αριθμών στις συναντήσεις. Ο αριθμός στις αγκύλες ονομάζεται ευρετήριο.
Αν δημιουργήσουμε ένα static array αλλά δεν αποδίδουν τιμές σε όλα τα στοιχεία του, τα αχρησιμοποίητα στοιχεία περιέχουν τυχαία δεδομένα. είναι σαν τις μη αρχικές μεταβλητές. Ο ακόλουθος κώδικας μπορεί να χρησιμοποιηθεί για τη ρύθμιση όλων των στοιχείων στη συστοιχία Συνεδριάσεων σε 0.
για k: = 0 έως 6 κάνουμε Ραντεβού [k]: = 0;
Μερικές φορές πρέπει να παρακολουθούμε τις σχετικές πληροφορίες σε μια συστοιχία. Για παράδειγμα, για να παρακολουθείτε κάθε εικονοστοιχείο στην οθόνη του υπολογιστή σας, πρέπει να ανατρέξετε στις συντεταγμένες Χ και Υ χρησιμοποιώντας ένα πολυδιάστατο για να αποθηκεύσετε τις τιμές.
Με τους Δελφούς, μπορούμε να δηλώσουμε συστοιχίες πολλαπλών διαστάσεων. Για παράδειγμα, η ακόλουθη δήλωση δηλώνει μια δισδιάστατη συστοιχία 7 από 24:
var DayHour: πίνακας [1..7, 1..24] του Real;
Για να υπολογίσετε τον αριθμό των στοιχείων σε μια πολυδιάστατη διάταξη, πολλαπλασιάστε τον αριθμό των στοιχείων σε κάθε ευρετήριο. Η μεταβλητή DayHour, που δηλώνεται παραπάνω, αφαιρεί 168 (7 * 24) στοιχεία, σε 7 σειρές και 24 στήλες. Για να ανακτήσουμε την τιμή από το κελί στην τρίτη και την έβδομη στήλη θα χρησιμοποιήσουμε: DayHour [3,7] ή DayHour [3] [7]. Ο ακόλουθος κώδικας μπορεί να χρησιμοποιηθεί για να ορίσει όλα τα στοιχεία στον πίνακα DayHour στο 0.
για i: = 1 έως 7 κάνει
για j: = 1 έως 24 κάνει
Ημέρα [i, j]: = 0;
Δυναμικοί πίνακες
Μπορεί να μην γνωρίζετε ακριβώς πόσο μεγάλη είναι η δημιουργία ενός πίνακα. Μπορεί να θέλετε να έχετε τη δυνατότητα αλλαγή του μεγέθους του πίνακα κατά το χρόνο εκτέλεσης. Μια δυναμική συστοιχία δηλώνει τον τύπο της, αλλά όχι το μέγεθός της. Το πραγματικό μέγεθος ενός δυναμικού πίνακα μπορεί να αλλάξει κατά τη διάρκεια εκτέλεσης με τη χρήση του SetLength διαδικασία.
var Σπουδαστές: σειρά συμβολοσειρών.
δημιουργεί ένα μονοδιάστατο δυναμικό πίνακα συστοιχιών. Η δήλωση δεν διαθέτει μνήμη για τους Φοιτητές. Για να δημιουργήσουμε τη συστοιχία στη μνήμη, καλούμε τη διαδικασία SetLength. Για παράδειγμα, δεδομένης της ανωτέρω δήλωσης,
SetLength (Φοιτητές, 14);
διαθέτει μια συστοιχία 14 συμβολοσειρών, με ευρετήριο 0 έως 13. Οι δυναμικές συστοιχίες είναι πάντοτε με ευρετήριο με ακέραια στοιχεία, πάντα ξεκινώντας από 0 έως ένα μικρότερο από το μέγεθός τους σε στοιχεία.
Για να δημιουργήσετε έναν δισδιάστατο δυναμικό πίνακα, χρησιμοποιήστε τον ακόλουθο κώδικα:
var Matrix: σειρά συστοιχιών του Double;
ξεκινήσει
SetLength (μήτρα, 10, 20)
τέλος;
που διαθέτει χώρο για μια δισδιάστατη συστοιχία 10 με 20 τιμών διπλού κινητού σημείου.
Για να καταργήσετε ένα χώρο μνήμης δυναμικής διάταξης, αντιστοιχίστε μηδενική στη μεταβλητή πίνακα, όπως:
Matrix: = μηδέν.
Πολύ συχνά, το πρόγραμμά σας δεν γνωρίζει κατά το χρόνο συλλογής πόσα στοιχεία θα χρειαστούν. ο αριθμός αυτός δεν θα είναι γνωστός μέχρι την εκτέλεση. Με δυναμικές συστοιχίες, μπορείτε να διαθέσετε μόνο το ίδιο αποθηκευτικό χώρο που απαιτείται σε μια δεδομένη στιγμή. Με άλλα λόγια, το μέγεθος των δυναμικών συστοιχιών μπορεί να αλλάξει κατά το χρόνο εκτέλεσης, το οποίο είναι ένα από τα βασικά πλεονεκτήματα των δυναμικών συστοιχιών.
Το επόμενο παράδειγμα δημιουργεί μια σειρά από ακέραιες τιμές και στη συνέχεια καλεί τη λειτουργία αντιγραφής για να αλλάξει το μέγεθος του πίνακα.
var
Vector: σειρά Integer;
k: ακέραιο;
ξεκινήσει
SetLength (Vector, 10).
για k: = Χαμηλή (Vector) έως υψηλή (Vector) κάνει
Διανύσματος [k]: = i * 10;
...
// τώρα χρειαζόμαστε περισσότερο χώρο
SetLength (Vector, 20).
// εδώ, η συστοιχία Vector μπορεί να χωρέσει μέχρι και 20 στοιχεία // (έχει ήδη 10 από αυτά) τέλος.
Η συνάρτηση SetLength δημιουργεί ένα μεγαλύτερο (ή μικρότερο) πίνακα και αντιγράφει τις υπάρχουσες τιμές στο νέα συστοιχία. Οι λειτουργίες Χαμηλή και Υψηλή εξασφαλίζουν την πρόσβαση σε κάθε στοιχείο πίνακα χωρίς να κοιτάξουμε πίσω στον κώδικα σας για τις σωστές κατώτερες και ανώτερες τιμές ευρετηρίου.