Κλασματικός τύπος δεδομένων pascal. Turbo Pascal. Τύποι δεδομένων

Οποιαδήποτε δεδομένα - σταθερές, μεταβλητές, τιμές συναρτήσεων - χαρακτηρίζονται στο Pascal από έναν τύπο δεδομένων.

Ας ορίσουμε την έννοια Τύπος δεδομένων. Όπως είναι ήδη γνωστό, όλα τα αντικείμενα του προγράμματος (μεταβλητές, σταθερές κ.λπ.) πρέπει να περιγράφονται.

Οι περιγραφές ενημερώνουν τον μεταφραστή, πρώτον, για την ύπαρξη των μεταβλητών και άλλων αντικειμένων που χρησιμοποιούνται και, δεύτερον, υποδεικνύουν τις ιδιότητες αυτών των αντικειμένων. Για παράδειγμα, μια περιγραφή μιας μεταβλητής της οποίας η τιμή είναι αριθμός υποδεικνύει τις ιδιότητες των αριθμών. Τυπικά, οι αριθμοί μπορεί να είναι ακέραιοι και πραγματικοί (κλασματικοί). Στο Pascal, όπως και σε άλλες γλώσσες προγραμματισμού, οι αριθμοί χωρίζονται σε δύο τύπους: ολόκληρος(δεσμευμένη λέξη ακέραιος) και πραγματικός(δεσμευμένη λέξη αληθινή).

Ο διαχωρισμός των ακεραίων σε έναν ξεχωριστό τύπο εξηγείται από το γεγονός ότι σε έναν υπολογιστή, οι ακέραιοι και οι πραγματικοί αριθμοί αντιπροσωπεύονται διαφορετικά: ένας ακέραιος αριθμός μπορεί να αναπαρασταθεί με απόλυτη ακρίβεια, αλλά ένας πραγματικός αριθμός έχει αναπόφευκτα κάποιο πεπερασμένο σφάλμα, το οποίο καθορίζεται από τις ιδιότητες του μεταφραστή.

Για παράδειγμα, έστω ότι η μεταβλητή x είναι τύπου real και η τιμή της είναι ίση με ένα: x=1 . Η αντίστοιχη τιμή στη μνήμη του υπολογιστή μπορεί να είναι 0,999999999, 1,000000001 ή 1,000000000. Αλλά αν η μεταβλητή x δηλωθεί ως μεταβλητή ακέραιου τύπου, τότε η μονάδα στον υπολογιστή θα αναπαρασταθεί με απόλυτη ακρίβεια και η μεταβλητή x δεν θα μπορεί να λάβει πραγματικές (κλασματικές) τιμές - τελικά, περιγράφηκε ως μια μεταβλητή ακέραιου τύπου.

Άρα ο τύπος δεδομένων ορίζει:

  • εσωτερική αναπαράσταση δεδομένων στη μνήμη του υπολογιστή.
  • το σύνολο των τιμών που μπορούν να λάβουν ποσότητες αυτού του τύπου.
  • λειτουργίες που μπορούν να εκτελεστούν σε τιμές αυτού του τύπου.

Η εισαγωγή τύπων δεδομένων είναι μια από τις βασικές έννοιες της γλώσσας Pascal, η οποία είναι ότι κατά την εκτέλεση μιας πράξης αντιστοίχισης μιας μεταβλητής στην τιμή μιας έκφρασης, η μεταβλητή και η έκφραση πρέπει να είναι του ίδιου τύπου. Αυτός ο έλεγχος εκτελείται από τον μεταγλωττιστή, ο οποίος απλοποιεί σημαντικά την αναζήτηση σφαλμάτων και οδηγεί σε αυξημένη αξιοπιστία του προγράμματος.

Οι πολλοί τύποι δεδομένων της γλώσσας Turbo Pascal μπορούν να χωριστούν σε δύο ομάδες:

  • τυπικοί (προκαθορισμένοι) τύποι ;
  • τύποι που καθορίζονται από το χρήστη (τύποι που καθορίζονται από το χρήστη) .

Οι τυπικοί τύποι Turbo Pascal περιλαμβάνουν:

  • ακέραιος τύπος – ακέραιος;
  • πραγματικός τύπος – πραγματικός;
  • τύπος χαρακτήρα – char;
  • boolean τύπος – boolean;
  • τύπος συμβολοσειράς – string ;
  • τύπος δείκτη – δείκτης;
  • τύπος κειμένου – κείμενο .

Οι προσαρμοσμένοι τύποι δεδομένων είναι διάφοροι συνδυασμοί τυπικών τύπων.

Οι προσαρμοσμένοι τύποι περιλαμβάνουν:

  • απαριθμημένος τύπος?
  • τύπος διαστήματος?
  • τύπος δείκτη?
  • δομημένοι τύποι?
  • διαδικαστικό είδος.

Σχόλιο. Μια άλλη ταξινόμηση των τύπων δεδομένων είναι δυνατή, σύμφωνα με την οποία οι τύποι χωρίζονται σε απλούς και σύνθετους.

Οι απλοί τύποι περιλαμβάνουν: ακέραιο τύπο, πραγματικό τύπο, τύπο χαρακτήρων, λογικό τύπο, απαριθμημένο τύπο και τύπο διαστήματος.

Ένας πολύπλοκος τύπος είναι διάφοροι συνδυασμοί απλών τύπων (πίνακες, εγγραφές, σύνολα, αρχεία κ.λπ.)

Τυπικοί τύποι

Ο τυπικός τύπος δεδομένων ορίζεται από την ίδια τη γλώσσα Pascal. Όταν χρησιμοποιείτε τυπικούς τύπους σε ένα πρόγραμμα, αρκεί να υποδείξετε τις υποενότητες των απαιτούμενων τύπων (const, var) και στη συνέχεια να περιγράψετε τις σταθερές και τις μεταβλητές που χρησιμοποιούνται στο πρόγραμμα. Δεν χρειάζεται να χρησιμοποιήσετε την υποενότητα Τύπος.

Για παράδειγμα, εάν το πρόγραμμα χρησιμοποιεί μόνο μεταβλητές:

i,j – ακέραιος αριθμός (ακέραιοι).

x,y - πραγματικό (πραγματικό);

t,s - char (χαρακτήρας);

a,b – boolean (λογικό),

τότε χρειάζεται μόνο μια υποενότητα μεταβλητών - Var. Επομένως, στο περιγραφικό μέρος του προγράμματος, οι δηλώσεις μεταβλητών γράφονται ως εξής:

Ακέραιοι τύποι

Δεδομένα αυτού του τύπου μπορούν να δέχονται μόνο ακέραιες τιμές. Σε έναν υπολογιστή, οι τιμές ενός ακέραιου τύπου αναπαρίστανται με απόλυτη ακρίβεια. Εάν η μεταβλητή είναι αρνητική, τότε πρέπει να προηγείται το σύμβολο «–» εάν η μεταβλητή είναι θετική, τότε το πρόσημο «+» μπορεί να παραλειφθεί. Αυτός ο τύπος είναι απαραίτητος στην περίπτωση που κάποια ποσότητα δεν μπορεί να αναπαρασταθεί περίπου ως πραγματικός αριθμός. Για παράδειγμα, ο αριθμός των ανθρώπων, των ζώων κ.λπ.

Παραδείγματα γραφής ακεραίων τιμών: 17, 0, 44789, -4, -127.

Το εύρος διακύμανσης δεδομένων ενός ακέραιου τύπου καθορίζεται από πέντε τυπικούς τύπους ακεραίων και παρουσιάζεται στον πίνακα:

Τύπος Εύρος Μέγεθος σε byte
Shortint -128...+128 1
Ακέραιος αριθμός -32768...32767 2
Longint -2147483648...2147483647 4
Ψηφιόλεξη 0...255 1
Λέξη 0...65535 2

Οι δύο τελευταίοι τύποι αντιπροσωπεύουν μόνο θετικούς αριθμούς και οι τρεις πρώτοι αντιπροσωπεύουν θετικούς και αρνητικούς αριθμούς.

Στο κείμενο του προγράμματος ή κατά την εισαγωγή δεδομένων ακέραιου τύπου, γράφονται οι τιμές χωρίς υποδιαστολή . Πραγματικές τιμές μεταβλητών δεν πρέπει να υπερβαίνει τις επιτρεπόμενες τιμές τον τύπο (Shortint, Integer, Longint, Byte, Word) που χρησιμοποιήθηκε για την περιγραφή της μεταβλητής. Πιθανές υπερβάσεις κατά τους υπολογισμούς δεν ελέγχονται με κανέναν τρόπο, γεγονός που θα οδηγήσει σε λανθασμένη λειτουργία του προγράμματος.

Ένα παράδειγμα χρήσης μιας ακέραιας μεταβλητής

Var a:ακέραιος; β:λέξη; c:byte; Έναρξη a:=300; (α εκχωρείται η τιμή 300) b:=300; (b ορίστηκε σε 300) c:=200; (το c έχει οριστεί σε 200) a:=b+c; (το a έχει οριστεί σε 500) c:=b; (Σφάλμα! Η μεταβλητή c μπορεί να λάβει μόνο τιμές 255. Εδώ η μεταβλητή c ορίζεται σε 500, κάτι που θα προκαλέσει υπερχείλιση του αποτελέσματος.) Τέλος.

Πραγματικοί τύποι

Οι τιμές των πραγματικών τύπων αντιπροσωπεύονται κατά προσέγγιση σε έναν υπολογιστή. Το εύρος διακύμανσης δεδομένων πραγματικού τύπου καθορίζεται από πέντε τυπικούς τύπους: πραγματικός (Πραγματικός), μονής ακρίβειας (Μοναδικός), διπλής ακρίβειας (Διπλή), εκτεταμένης ακρίβειας (Εκτεταμένη), σύνθετος (Comp) και παρουσιάζεται στον πίνακα:

Τύπος Εύρος Αριθμός σημαντικών αριθμών Μέγεθος σε byte
Πραγματικός 2.9E-39...1.7E+38 11-12 6
Μονόκλινο 1.5E-45...3.4E+38 >7-8 4
Διπλό 5E-324...1.7E+308 15-16 8
Επεκτάθηκε 3.4E-4951...1.1E+4932 19-20 10
Comp -2Ε+63+1...+2Ε+63-1 19-20 8

Οι πραγματικοί αριθμοί μπορούν να αναπαρασταθούν σε δύο μορφές: σταθερού σημείου και κινητής υποδιαστολής.

Η μορφή για τη σύνταξη ενός αριθμού σταθερού σημείου είναι η ίδια με τη συνήθη μαθηματική σημείωση για έναν δεκαδικό αριθμό με ένα κλασματικό μέρος. Το κλασματικό τμήμα διαχωρίζεται από ολόκληρο το τμήμα χρησιμοποιώντας μια κουκκίδα, για παράδειγμα

34.5, -4.0, 77.001, 100.56

Η μορφή σημειογραφίας κινητής υποδιαστολής χρησιμοποιείται όταν γράφετε πολύ μεγάλους ή πολύ μικρούς αριθμούς. Σε αυτή τη μορφή, ο αριθμός πριν από το "E" πολλαπλασιάζεται με τον αριθμό 10 στη δύναμη μετά το "E".

1Ε-4 1*10-4
3,4574E+3 3.4574*10+3
4,51Ε+1 4.51*10+1

Παραδείγματα αριθμών κινητής υποδιαστολής:

Αριθμός Ηχογράφηση σε Pascal
0,0001 1Ε-4
3457,4 34574Ε-1
45,1 451Ε-1
40000 4Ε+4
124 0,124E+3
124 1.24E+2
124 12.4E+1
124 1240Ε-1
124 12400Ε-2

Ο πίνακας από τις 5 έως τις 9 γραμμές δείχνει μια εγγραφή του ίδιου αριθμού 124. Με την αλλαγή της θέσης της υποδιαστολής στη μάντισσα (το σημείο "επιπλέει", εξ ου και το όνομα "καταγραφή ενός αριθμού κινητής υποδιαστολής") και ταυτόχρονα αλλάζοντας την τιμή παραγγελίας, μπορείτε να επιλέξετε τους καταλληλότερους αριθμούς εγγραφής.

Ένα παράδειγμα περιγραφής μεταβλητών πραγματικού τύπου.

Τύπος χαρακτήρα

Οι τιμές χαρακτήρων είναι χαρακτήρες που μπορούν να πληκτρολογηθούν σε ένα πληκτρολόγιο υπολογιστή. Αυτό σας επιτρέπει να παρουσιάσετε κείμενο στο πρόγραμμα και να εκτελέσετε διάφορες λειτουργίες σε αυτό: εισαγωγή, διαγραφή μεμονωμένων γραμμάτων και λέξεων, μορφή κ.λπ.

Ένας τύπος χαρακτήρα ορίζεται από τη δεσμευμένη λέξη Char και έχει σχεδιαστεί για την αποθήκευση ενός μεμονωμένου χαρακτήρα. Τα δεδομένα χαρακτήρων καταλαμβάνουν ένα byte στη μνήμη.

Μορφή συμβολικής δήλωσης μεταβλητής:

<имя переменной>: Χαρ;

Κατά τον καθορισμό της τιμής μιας μεταβλητής χαρακτήρων, ο χαρακτήρας γράφεται με απόστροφο. Επιπλέον, μπορείτε να καθορίσετε τον απαιτούμενο χαρακτήρα καθορίζοντας απευθείας την αριθμητική τιμή του κωδικού ASCII. Σε αυτήν την περίπτωση, πρέπει να προηγηθεί ο αριθμός που υποδεικνύει τον κωδικό ASCII του απαιτούμενου χαρακτήρα με ένα σύμβολο #.

Ένα παράδειγμα χρήσης μεταβλητών τύπου χαρακτήρων:

Var c:char; (το c είναι μια μεταβλητή τύπου χαρακτήρων) Αρχή c:='A'; (στη μεταβλητή c εκχωρείται ο χαρακτήρας 'A') c:=#65; (στη μεταβλητή c εκχωρείται επίσης ο χαρακτήρας A. Ο κωδικός ASCII της είναι 65) c:=’5’; (στη μεταβλητή c εκχωρείται το σύμβολο 5, Τέλος. Εδώ το 5 δεν είναι πλέον αριθμός)

Τύπος Boolean

Ο λογικός τύπος δεδομένων ονομάζεται Boolean από τον Άγγλο μαθηματικό George Boole, τον δημιουργό του πεδίου των μαθηματικών - μαθηματική λογική.

Μορφή για τη δήλωση μιας μεταβλητής τύπου Boole:

<имя переменной>: boolean;

Τα δεδομένα αυτού του τύπου μπορούν να λάβουν μόνο δύο τιμές:

  • Αλήθεια αλήθεια;
  • Το ψέμα είναι ψέμα.

Τα λογικά δεδομένα χρησιμοποιούνται ευρέως για τον έλεγχο της εγκυρότητας ορισμένων συνθηκών και για τη σύγκριση ποσοτήτων. Το αποτέλεσμα μπορεί να είναι αληθές ή ψευδές.

Για τη σύγκριση δεδομένων, παρέχονται οι ακόλουθες σχεσιακές πράξεις:

Ένα παράδειγμα χρήσης σχεσιακών πράξεων:

σχέση 5>3, αποτέλεσμα αληθές.

σχέση 5=3, αποτέλεσμα ψευδές.

Ένα παράδειγμα χρήσης μεταβλητών τύπου Boole.

Var a,b:boolean; (τα a,b είναι μεταβλητές λογικού τύπου) Ξεκινήστε a:=True; (στη μεταβλητή a εκχωρείται η τιμή "true") b:=false; (η μεταβλητή b έχει οριστεί σε false) Τέλος.

Σταθερές

Ακέραιοι, πραγματικοί αριθμοί, χαρακτήρες, συμβολοσειρές χαρακτήρων και λογικές σταθερές μπορούν να χρησιμοποιηθούν ως σταθερές.

Μια σταθερά πρέπει να δηλωθεί στο περιγραφικό της μέρος χρησιμοποιώντας τη δεσμευμένη λέξη const.

Μορφή σταθερής δήλωσης

Κωνστ<имя константы>= <значение>;

Εάν ένα πρόγραμμα χρησιμοποιεί πολλές σταθερές, επιτρέπεται μόνο μία λέξη-κλειδί Const και η περιγραφή κάθε σταθεράς τελειώνει με ένα ερωτηματικό. Ένα σταθερό μπλοκ τελειώνει με τη δήλωση μιας άλλης ενότητας ή τη δήλωση ενός μπλοκ εκτελέσιμων δηλώσεων.

Const (δήλωση σταθερής τομής) έτος=2003; (σταθερά ακέραιου τύπου, γιατί δεν υπάρχει υποδιαστολή στην εγγραφή) χρόνος=14.05; (σταθερά πραγματικού τύπου) N=24; (σταθερά ακέραιου τύπου, επειδή δεν υπάρχει υποδιαστολή στη σημειογραφία) P=3,14; (σταθερά πραγματικού τύπου) A=true; (Boolean σταθερά) str1='7'; (σταθερά τύπου χαρακτήρα) str2=’A’; (σταθερά τύπου χαρακτήρα) str3=’Turbo’; (Σταθερά τύπου συμβολοσειράς) Var (δήλωση τμήματος μεταβλητής) X,y:ακέραιος; (μεταβλητές ακέραιου τύπου)

Προσαρμοσμένοι τύποι

Από το σύνολο των τύπων χρηστών, θα εξετάσουμε μόνο

  • απαριθμημένος τύπος?
  • τύπος διαστήματος.

Θα χρειαστούμε αυτούς τους δύο τύπους όταν μελετάμε πίνακες.

Τύπος Enum

Ένας απαριθμημένος τύπος δεδομένων περιγράφει νέους τύπους δεδομένων των οποίων οι τιμές καθορίζονται από τον προγραμματιστή. Ένας απαριθμημένος τύπος καθορίζεται από μια απαρίθμηση των τιμών που μπορεί να λάβει. Κάθε τιμή ονομάζεται από κάποιο αναγνωριστικό και βρίσκεται σε μια λίστα που περιβάλλεται από παρενθέσεις. Ένας τύπος απαρίθμησης είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη, επομένως η δήλωση τύπου του ξεκινά με τη δεσμευμένη λέξη TYPE.

Μορφή τύπου Enum:

<имя типа>= (σταθερά1, σταθερά2,..., σταθεράΝ);

Οπου
σταθερά1 , σταθερά2 ,..., σταθερά N – ένα διατεταγμένο σύνολο τιμών αναγνωριστικού που αντιμετωπίζονται ως σταθερές.

Ένα παράδειγμα περιγραφής απαριθμημένου τύπου:

Τύπος μπάλα=(ένα, δύο, τρία, τέσσερα, πέντε); var t:ball;

Εδώ μπάλα είναι το όνομα του απαριθμημένου τύπου. ένα, δύο, τρία, τέσσερα, πέντε – σταθερές. Το t είναι μια μεταβλητή που μπορεί να πάρει οποιαδήποτε σταθερή τιμή.

Σε έναν απαριθμημένο τύπο, μια σταθερά είναι ένα αναγνωριστικό, επομένως δεν αναφέρεται και δεν μπορεί να είναι αριθμός. Έτσι, σε έναν απαριθμημένο τύπο, μια σταθερά είναι ένα ειδικό είδος σταθεράς που δεν μπορεί να είναι:

  • σταθερές αριθμητικού τύπου: 1, 2, 3, 4, κ.λπ.
  • σταθερές τύπου χαρακτήρων: "a", "s", "1", "3", κ.λπ.
  • σταθερές τύπου συμβολοσειράς: "πρώτη", "δεύτερη" κ.λπ.

Επιπλέον, οι αριθμητικές πράξεις και οι τυπικές διαδικασίες εισόδου και εξόδου Read and Write δεν ισχύουν για τιμές αυτού του τύπου.

Ένα παράδειγμα χρήσης απαριθμημένων μεταβλητών:

Τύπος ημερών = (Δευτέρα, Τρίτη, Τετάρτη, Πέμπτη, Παρασκευή, Σάββατο, Κυριακή); Var ημέρα: ημέρες; ξεκινώ αν ημέρα = Κυριακή, τότε γράφω (‘Σήμερα είναι Κυριακή!’); Τέλος.

Τα στοιχεία που περιλαμβάνονται στον ορισμό ενός απαριθμημένου τύπου θεωρείται ότι ταξινομούνται με τη σειρά με την οποία απαριθμούνται. Η αρίθμηση ξεκινά από το μηδέν. Επομένως, στο παράδειγμα που δίνεται, οι ημέρες της εβδομάδας έχουν τους ακόλουθους σειριακούς αριθμούς

Για να προσδιοριστεί προγραμματικά ο τακτικός αριθμός, χρησιμοποιείται η συνάρτηση Ord().

Στο παράδειγμά μας, οι αριθμοί ακολουθίας είναι ίσοι:

Παραγγελία(Δευτέρα) = 0;

Παραγγελία (Σάββατο) = 5;

Παραγγελία (Κυριακή) = 6.

Τύπος διαστήματος

Εάν μια μεταβλητή δεν δέχεται όλες τις τιμές του τύπου της, αλλά μόνο τις τιμές που περιέχονται σε ένα συγκεκριμένο εύρος, τότε αυτός ο τύπος δεδομένων ονομάζεται τύπος διαστήματος. Ο τύπος διαστήματος ονομάζεται συχνά περιορισμένος τύπος και τύπος εύρους. Ένας τύπος διαστήματος ορίζεται από τα όρια των τιμών του:

<минимальное значение>..<максимальное значение>

  • δύο χαρακτήρες ".." αντιμετωπίζονται ως ένας χαρακτήρας, επομένως δεν επιτρέπονται κενά μεταξύ τους.
  • το αριστερό περίγραμμα του εύρους δεν πρέπει να υπερβαίνει το δεξί του όριο.

Ο τύπος διαστήματος είναι ένας τύπος δεδομένων που ορίζεται από το χρήστη, επομένως η δήλωση τύπου του ξεκινά με τη λέξη συνάρτησης TYPE.

Ένα παράδειγμα περιγραφής τύπου διαστήματος:

Τύπος ψηφίο = 1..10; μήνας = 1..31; lat = 'A'..'Z';

Τύποι δεδομένων γλώσσας Pascal: ταξινόμηση και περιγραφές. Αριθμητικοί και τακτικοί τύποι δεδομένων, ενέργειες με αυτούς. Αριθμητικές εκφράσεις: συναρτήσεις, πράξεις και σειρά ενεργειών. Συμβατότητα τύπων δεδομένων και μετατροπές.

Οι μεταγλωττιστές Pascal απαιτούν να παρέχονται πληροφορίες σχετικά με την ποσότητα της μνήμης που απαιτείται για την εκτέλεση ενός προγράμματος πριν από την εκτέλεσή του. Για να το κάνετε αυτό, στην ενότητα περιγραφή μεταβλητής ( var) πρέπει να αναφέρετε όλες τις μεταβλητές που χρησιμοποιούνται στο πρόγραμμα. Επιπλέον, πρέπει επίσης να πείτε στον μεταγλωττιστή πόση μνήμη θα καταλάβει καθεμία από αυτές τις μεταβλητές. Θα ήταν επίσης ωραίο να συμφωνήσουμε εκ των προτέρων για τις διάφορες πράξεις που ισχύουν για ορισμένες μεταβλητές...

Όλα αυτά μπορούν να κοινοποιηθούν στο πρόγραμμα υποδεικνύοντας απλώς τον τύπο της μελλοντικής μεταβλητής. Έχοντας πληροφορίες για τον τύπο μιας μεταβλητής, ο μεταγλωττιστής «καταλαβαίνει» πόσα byte πρέπει να διατεθούν για αυτήν, ποιες ενέργειες μπορούν να εκτελεστούν με αυτήν και σε ποιες κατασκευές μπορεί να συμμετάσχει.

Για τη διευκόλυνση των προγραμματιστών, το Pascal διαθέτει πολλούς τυπικούς τύπους δεδομένων, καθώς και τη δυνατότητα δημιουργίας νέων τύπων.

Όταν κατασκευάζουμε νέους τύπους δεδομένων με βάση τα υπάρχοντα (τυπικά ή ορίζονται ξανά από τον ίδιο τον προγραμματιστή), πρέπει να θυμόμαστε ότι κάθε κτίριο πρέπει να χτίζεται σε καλή βάση. Επομένως, τώρα θα μιλήσουμε για αυτό το «θεμέλιο».

Με βάση βασικούς τύπους δεδομένωνκατασκευάζονται όλοι οι άλλοι τύποι της γλώσσας Pascal, οι οποίοι ονομάζονται: κατασκευάστηκε.

Η διαίρεση σε βασικούς και κατασκευασμένους τύπους δεδομένων στο Pascal φαίνεται στον πίνακα:

Οι τύποι δεδομένων που έχουν κατασκευαστεί από προγραμματιστή περιγράφονται στην ενότητα τύποςσύμφωνα με το ακόλουθο πρότυπο:

τύπος<имя_типа> = <описание_типа>;

Για παράδειγμα:

τύπου Lat_Bukvy = "a" .. "z", "A" .. "Z";

Οι βασικοί τύποι δεδομένων είναι τυπικοί, επομένως δεν χρειάζεται να τους περιγράψετε στην ενότητα τύπος. Ωστόσο, εάν είναι επιθυμητό, ​​αυτό μπορεί επίσης να γίνει, για παράδειγμα, δίνοντας μεγάλους ορισμούς σύντομα ονόματα. Ας πούμε εισάγοντας έναν νέο τύπο δεδομένων

τύπος Int = Ακέραιος;

Μπορείτε να συντομεύσετε λίγο το κείμενο του προγράμματος.

Οι τυπικοί κατασκευασμένοι τύποι επίσης δεν χρειάζεται να περιγραφούν στην ενότητα τύπος. Ωστόσο, σε ορισμένες περιπτώσεις αυτό πρέπει ακόμα να γίνει λόγω συντακτικών απαιτήσεων. Για παράδειγμα, σε λίστα παραμέτρων διαδικασίεςή λειτουργίεςΔεν μπορούν να χρησιμοποιηθούν κατασκευαστές τύπου (βλ διάλεξη 8).

Τακτικοί τύποι δεδομένων

Μεταξύ των βασικών τύπων δεδομένων, οι πιο αξιοσημείωτοι είναι τακτικούς τύπους. Αυτό το όνομα μπορεί να δικαιολογηθεί με δύο τρόπους:

Τυπικές ρουτίνες αυτή η διαδικασία τακτικούς τύπους δεδομένων

Μόνο για ποσότητες τακτικούς τύπουςΚαθορίζονται οι ακόλουθες λειτουργίες και διαδικασίες:

  1. Λειτουργία Διατ(Χ)επιστρέφει τον τακτικό αριθμό της τιμής της μεταβλητής x (σε σχέση με τον τύπο στον οποίο ανήκει η μεταβλητή x).
  2. Λειτουργία Pred(Χ)επιστρέφει την τιμή που προηγείται του x (δεν ισχύει για το πρώτο στοιχείο του τύπου).
  3. Λειτουργία Succ(Χ)επιστρέφει την τιμή που ακολουθεί το x (δεν ισχύει για το τελευταίο στοιχείο του τύπου).
  4. Διαδικασία Inc(Χ)επιστρέφει την τιμή που ακολουθεί το x (για αριθμητικών τύπων δεδομένωναυτό είναι ισοδύναμο με τον τελεστή x:= x + 1).
  5. Διαδικασία Inc(x, k)επιστρέφει την kth τιμή μετά το x (για αριθμητικών τύπων δεδομένωναυτό είναι ισοδύναμο με τον τελεστή x:= x + k).
  6. Διαδικασία Δεκ(Χ)επιστρέφει την τιμή που προηγείται του x (για αριθμητικών τύπων δεδομένωναυτό είναι ισοδύναμο με τον τελεστή x:= x - 1).
  7. Διαδικασία Δεκ(x, k)επιστρέφει την τιμή k–e που προηγείται του x (για αριθμητικών τύπων δεδομένωναυτό ισοδυναμεί με τον τελεστή x:= x - k).

Με την πρώτη ματιά, φαίνεται σαν το αποτέλεσμα της εφαρμογής της διαδικασίας Inc(Χ)συμπίπτει πλήρως με το αποτέλεσμα της εφαρμογής της συνάρτησης Succ(Χ). Ωστόσο, η διαφορά μεταξύ τους εμφανίζεται στα όρια του επιτρεπόμενου εύρους. Λειτουργία Succ(Χ)δεν ισχύει για το μέγιστο στοιχείο ενός τύπου, αλλά εδώ είναι η διαδικασία Inc(Χ)δεν θα παράγει κανένα σφάλμα, αλλά, ενεργώντας σύμφωνα με τους κανόνες της προσθήκης μηχανής, θα προσθέσει την επόμενη μονάδα στον αριθμό στοιχείου. Ο αριθμός, φυσικά, θα ξεπεράσει το εύρος και, λόγω περικοπής, θα μετατραπεί στον αριθμό της ελάχιστης τιμής του εύρους. Αποδεικνύεται ότι οι διαδικασίες Inc() Και Δεκ() αντιλαμβάνονται οποιονδήποτε τακτικό τύπο σαν να είναι «κλειστός σε δακτύλιο»: αμέσως μετά την τελευταία τιμή έρχεται ξανά η πρώτη τιμή.

Ας εξηγήσουμε όλα όσα ειπώθηκαν με ένα παράδειγμα. Για τύπο δεδομένων

τύπος Δεκαέξι = 0 .. 15 ;

Προσπαθώντας να προσθέσετε 1 στον αριθμό 15 θα έχετε το ακόλουθο αποτέλεσμα:

1 1 1 1 1 1 0 0 0 0

Η αρχική μονάδα θα κοπεί και επομένως αποδεικνύεται ότι Inc(15)=0 .

Παρόμοια κατάσταση στο κατώτερο όριο του επιτρεπόμενου εύρους ενός αυθαίρετου τακτικού τύπου δεδομένων παρατηρείται για τη διαδικασία Δεκ(Χ)και λειτουργίες Pred(Χ):

Τύποι δεδομένων που σχετίζονται με τακτικός

Ας περιγράψουμε τώρα τακτικούς τύπους δεδομένωνλεπτομερώς.

  1. Τύπος Boolean Booleanέχει δύο τιμές: False και True, και ισχύουν οι ακόλουθες ισότητες:
  2. Σε τύπο χαρακτήρα Απανθρακώνωπεριλαμβάνει 256 χαρακτήρες εκτεταμένος πίνακας ASCII(για παράδειγμα, "a", "b", "i", "7", "#"). Ο αριθμός χαρακτήρα που επιστρέφεται από τη συνάρτηση Διατ() , ταιριάζει με τον αριθμό αυτού του συμβόλου μέσα πίνακας ASCII.
  3. Ακέραιοι τύποι δεδομένωνΑς το βάλουμε σε έναν πίνακα:
  4. ΚαταχωρίσιμοΟι τύποι δεδομένων καθορίζονται στην ενότητα τύποςαναφέροντας ρητά τα στοιχεία τους. Για παράδειγμα:

    τύπος Εβδομάδα = (κυριος, Δευτ., Τρι, Τετ., Πε., Παρ, Σαβ); 0 1 2 3 4 5 6

    Θυμηθείτε ότι για αυτόν τον τύπο δεδομένων:

  5. Τύποι δεδομένων διαστήματοςκαθορίζονται μόνο από τα όρια του εύρους τους. Για παράδειγμα:

    τύπος Μήνας = 1 .. 12 ;
    Budni = Δευτ.. Παρ;

  6. Ο προγραμματιστής μπορεί να δημιουργήσει τους δικούς του τύπους δεδομένων, οι οποίοι είναι ένας συνδυασμός πολλών τυπικών τύπων. Για παράδειγμα:

    type Valid_For_Identifiers = "a" .. "z" , "A" .. "Z" , "_" , "0" .. "9" ;

Αυτός ο τύπος συνίσταται στον συνδυασμό πολλών διαστημάτων και σε αυτήν την περίπτωση η σειρά των λατινικών γραμμάτων αλλάζει: εάν στον τυπικό τύπο

Όταν περιγράφετε μια μεταβλητή, πρέπει να αναφέρετε τον τύπο της. Ο τύπος μιας μεταβλητής περιγράφει το σύνολο των τιμών που μπορεί να λάβει και τις ενέργειες που μπορούν να εκτελεστούν σε αυτό. Μια δήλωση τύπου καθορίζει ένα αναγνωριστικό που αντιπροσωπεύει τον τύπο.

Οι απλοί τύποι χωρίζονται σε τυπικούς (τακτικούς) και απαριθμητικούς (περιορισμένους).

Τυπικοί τύποι

Το Turbo Pascal έχει τέσσερις ενσωματωμένους τυπικούς τύπους: ακέραιος, πραγματικός, boolean και char.

Ακέραιος τύπος (ακέραιος)

Το Turbo Pascal έχει πέντε ενσωματωμένους τύπους ακεραίων: shortint, integer, longint, byte και word. Κάθε τύπος υποδηλώνει ένα συγκεκριμένο υποσύνολο ακεραίων, όπως φαίνεται στον παρακάτω Πίνακα.

Ενσωματωμένοι ακέραιοι τύποι.

Εύρος

Μορφή

8 υπογεγραμμένα bit

16 υπογεγραμμένα bit

2147483648 +2147483647

32 bit υπογεγραμμένο

8 bit χωρίς υπογραφή

16 bit χωρίς υπογραφή

Οι αριθμητικές πράξεις σε τελεστές ακέραιου τύπου εκτελούνται σύμφωνα με τους ακόλουθους κανόνες:

  1. Ένας ακέραιος τύπος σταθεράς είναι ένας ενσωματωμένος ακέραιος τύπος με το μικρότερο εύρος που περιλαμβάνει την τιμή αυτής της ακέραιας σταθεράς.
  2. Στην περίπτωση μιας δυαδικής πράξης (μια πράξη που χρησιμοποιεί δύο τελεστές), και οι δύο τελεστές μετατρέπονται στον κοινό τους τύπο πριν εκτελεστεί η πράξη σε αυτούς. Ο κοινός τύπος είναι ο ενσωματωμένος ακέραιος τύπος, με το μικρότερο εύρος που περιλαμβάνει όλες τις πιθανές τιμές και των δύο τύπων. Για παράδειγμα, ο κοινός τύπος για έναν ακέραιο και έναν ακέραιο μήκους byte είναι ακέραιος και ο κοινός τύπος για έναν ακέραιο και έναν ακέραιο αριθμό μήκους λέξης είναι μεγάλος ακέραιος. Η δράση εκτελείται σύμφωνα με την ακρίβεια του γενικού τύπου και ο τύπος του αποτελέσματος είναι ο γενικός τύπος.
  3. Η έκφραση στη δεξιά πλευρά του τελεστή εκχώρησης αξιολογείται ανεξάρτητα από το μέγεθος της μεταβλητής στα αριστερά.

Πράξεις που εκτελούνται σε ακέραιους αριθμούς:

"+" - προσθήκη

"-" - αφαίρεση

"*" - πολλαπλασιασμός

SQR - τετραγωνισμός

DIV - απορρίπτει το κλασματικό μέρος μετά τη διαίρεση

MOD - λήψη του ακέραιου υπολοίπου μετά τη διαίρεση

ABS - αριθμητική μονάδα

RANDOM(X) - λαμβάνοντας έναν τυχαίο αριθμό από το 0 έως το X

Α:=100 ; b:=60 ; a DIV b αποτέλεσμα - 1 a MOD b αποτέλεσμα - 40

Οι μεταβλητές ακέραιου τύπου περιγράφονται ως εξής:

var variable list: type;

Για παράδειγμα: var а,р,n:ακέραιος;

Πραγματικός τύπος (πραγματικός)

Ο πραγματικός τύπος είναι ένα υποσύνολο πραγματικών αριθμών που μπορούν να αναπαρασταθούν σε μορφή κινητής υποδιαστολής με σταθερό αριθμό ψηφίων. Η εγγραφή μιας τιμής σε μορφή κινητής υποδιαστολής περιλαμβάνει συνήθως τρεις τιμές - m, b και e - έτσι ώστε m*b e, όπου b είναι πάντα 10 και m και e είναι ακέραιες τιμές στο πραγματικό εύρος. Αυτές οι τιμές των m και e καθορίζουν περαιτέρω το εύρος και την ακρίβεια του πραγματικού τύπου.

Υπάρχουν πέντε τύποι πραγματικών τύπων: πραγματικός, μονός, διπλός, exnende, συγκριτικός. Οι πραγματικοί τύποι διαφέρουν ως προς το εύρος και την ακρίβεια των τιμών που σχετίζονται με αυτούς

Εύρος και δεκαδικά ψηφία για πραγματικούς τύπους

Εύρος

Αριθμοί

2,9x10E-39 έως 1,7x10E 38

1,5x10E-45 έως 3,4x10E 38

5,0x10E-324 έως 1,7x10E 308

3,4x10E-493 έως 1,1x10E 403

2E 63 έως 2E 63

Πράξεις που εκτελούνται σε πραγματικούς αριθμούς:

  • Όλες οι πράξεις ισχύουν για ακέραιους αριθμούς.
  • Το SQRT(x) είναι η τετραγωνική ρίζα του x.
  • SIN(X), COS(X), ARCTAN(X).
  • Το LN(X) είναι ο φυσικός λογάριθμος.
  • EXP(X) είναι ο εκθέτης του X (e x).
  • EXP(X*LN(A)) - εκθετικότητα (A x).
  • Τύπος συναρτήσεων μετατροπής:
    • TRUNC(X) - απορρίπτει το κλασματικό μέρος.
    • ROUND(X) - στρογγυλοποίηση.
  • Μερικοί κανόνες αριθμητικών πράξεων:
    • Εάν μια αριθμητική πράξη περιέχει αριθμούς τύπου πραγματικού και ακέραιου, τότε το αποτέλεσμα θα είναι τύπου πραγματικός.
    • Όλα τα συστατικά της έκφρασης γράφονται σε μία γραμμή.
    • Χρησιμοποιούνται μόνο παρενθέσεις.
    • Δεν μπορείτε να βάλετε δύο αριθμητικά σημάδια στη σειρά.

Οι μεταβλητές πραγματικού τύπου περιγράφονται ως εξής:

var variable list: type;

Για παράδειγμα:

var d,g,k:real ;

Τύπος χαρακτήρα (χαρακτήρας)

Ο τύπος χαρακτήρων είναι οποιοσδήποτε χαρακτήρας περικλείεται σε απόστροφα. Για να αναπαραστήσετε μια απόστροφο ως μεταβλητή χαρακτήρων, πρέπει να την περικλείσετε σε μια απόστροφο: ''''.

Κάθε χαρακτήρας έχει τον δικό του κωδικό και αριθμό. Οι αύξοντες αριθμοί των ψηφίων 0,1..9 ταξινομούνται με αύξουσα σειρά. Οι αύξοντες αριθμοί των γραμμάτων ταξινομούνται επίσης σε αύξουσα σειρά, αλλά δεν διαδέχονται απαραίτητα ο ένας τον άλλον.

Τα ακόλουθα σημάδια σύγκρισης ισχύουν για δεδομένα χαρακτήρων:

> , < , >=, <=, <> .

Για παράδειγμα: «Α»< ‘W’

Συναρτήσεις που ισχύουν για μεταβλητές χαρακτήρων:

  1. ORD(X) - καθορίζει τον αύξοντα αριθμό του συμβόλου X. ord (‘a’) =97 ;
  2. CHR(X) - προσδιορίζει έναν χαρακτήρα με αριθμό. chr(97) =’a’;
  3. PRED(X) - επιστρέφει τον χαρακτήρα που προηγείται του χαρακτήρα X pred ('B') ='A'.
  4. SUCC(X) - επιστρέφει τον χαρακτήρα που ακολουθεί τον χαρακτήρα X succ ('A') ='B'.

Τύπος Enum

Ένας απαριθμημένος τύπος δεδομένων ονομάζεται έτσι επειδή καθορίζεται ως λίστα σταθερών με αυστηρά καθορισμένη σειρά και σε αυστηρά καθορισμένη ποσότητα. Ένας απαριθμημένος τύπος αποτελείται από μια λίστα σταθερών. Οι μεταβλητές αυτού του τύπου μπορούν να λάβουν την τιμή οποιασδήποτε από αυτές τις σταθερές. Η περιγραφή του τύπου απαρίθμησης μοιάζει με αυτό:

Τύπος<имя типа>=(λίστα σταθερών) ; Var<имя переменной>:<имя типа>;

Οπου<список констант>- αυτός είναι ένας ειδικός τύπος σταθερών, που καθορίζονται χωρίζονται με κόμμα και έχουν τον δικό τους σειριακό αριθμό, ξεκινώντας από το 0.

Για παράδειγμα:

τύπος κατεύθυνση=(βόρειος, νότος, δυτικός, ανατολικός) ; month=(Ιούνιος, Ιούλιος, Αύγουστος, Ιανουάριος) ; χωρητικότητα=(κουβάς, βαρέλι, κάνιστρο, δεξαμενή) ; var rotation:direction; αναχώρηση:μήνας; όγκος: χωρητικότητα; var turn: (βόρεια, νότια, δυτικά, ανατολικά) ; αναχώρηση: (Ιούνιος, Ιούλιος, Αύγουστος, Ιανουάριος) ; όγκος: (κουβάς, βαρέλι, κάνιστρο, δεξαμενή).

Μπορείτε να εκτελέσετε τους ακόλουθους τελεστές ανάθεσης:

Περιστροφή:=νότος; αναχώρηση:=Αύγουστος; όγκος:=δεξαμενή;

αλλά δεν μπορείτε να κάνετε μικτές εργασίες:

Αναχώρηση:=νότος; τόμος:=Αύγουστος;

Οι ακόλουθες συναρτήσεις ισχύουν για μεταβλητές απαριθμημένου τύπου:

1. ORD - αύξων αριθμός

2. PRED - προηγούμενο στοιχείο

3. SUCC - επόμενο στοιχείο.

PRED (βαρέλι) = κουβάς; SUCC (νότια) =δυτική; ORD (Ιούλιος) =1 ;

Οι μεταβλητές ενός απαριθμημένου τύπου μπορούν να συγκριθούν επειδή είναι ταξινομημένες και αριθμημένες. Οι εκφράσεις λοιπόν: βόρεια< юг, июнь < январь имеют значения TRUE, а юг>δυτικά και δεξαμενή<бочка значение FАLSE.

Περιορισμένος τύπος

Εάν μια μεταβλητή δεν δέχεται όλες τις τιμές του τύπου της, αλλά μόνο εντός ενός συγκεκριμένου εύρους, τότε μπορεί να θεωρηθεί μεταβλητή περιορισμένου τύπου. Κάθε περιορισμένος τύπος ορίζεται επιβάλλοντας έναν περιορισμό στους βασικούς τύπους.

Περιγράφεται ως εξής:

ΤΥΠΟΣ<имя типа>=constant1 ..constant2

Σε αυτή την περίπτωση, πρέπει να τηρούνται οι ακόλουθοι κανόνες:

  1. Και οι δύο οριοθετημένες σταθερές πρέπει να είναι του ίδιου τύπου.
  2. Οποιοσδήποτε απλός τύπος εκτός από το πραγματικό μπορεί να χρησιμοποιηθεί ως βασικός τύπος.
  3. Η αρχική τιμή κατά τον ορισμό ενός περιορισμένου τύπου δεν πρέπει να είναι μεγαλύτερη από την τελική τιμή.
δείκτης τύπου =0 ..63 ; letter=’a’..’z’; var char1,char2:γράμμα; a,g:index ;

Μπορείτε να το περιγράψετε αμέσως στην ενότητα περιγραφής μεταβλητής:

var a,g:0 ..63 ; char1,char2:'a'..'z'.

Ομοσπονδιακή Υπηρεσία για την Εκπαίδευση

Εκθεση ΙΔΕΩΝ

"ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΕ PASCAL"

1. Τύποι δεδομένων

Οποιαδήποτε δεδομένα, δηλ. Οι σταθερές, οι μεταβλητές, οι ιδιότητες, οι τιμές συναρτήσεων ή οι εκφράσεις χαρακτηρίζονται από τους τύπους τους. Ένας τύπος ορίζει το σύνολο των έγκυρων τιμών που μπορεί να έχει ένα αντικείμενο, καθώς και το σύνολο των έγκυρων πράξεων που μπορούν να εφαρμοστούν σε αυτό. Επιπλέον, ο τύπος καθορίζει επίσης τη μορφή της εσωτερικής αναπαράστασης των δεδομένων στη μνήμη του υπολογιστή.

Γενικά, η γλώσσα Object Pascal χαρακτηρίζεται από μια διακλαδισμένη δομή τύπων δεδομένων (Εικ. 1.1). Η γλώσσα παρέχει έναν μηχανισμό για τη δημιουργία νέων τύπων, χάρη στον οποίο ο συνολικός αριθμός των τύπων που χρησιμοποιούνται σε ένα πρόγραμμα μπορεί να είναι όσο μεγάλος επιθυμείτε.

Τα δεδομένα που επεξεργάζονται στο πρόγραμμα χωρίζονται σε μεταβλητές, σταθερές και κυριολεκτικά:

Σταθερές αντιπροσωπεύουν δεδομένα των οποίων οι τιμές ορίζονται στην ενότητα σταθερής δήλωσης και δεν αλλάζουν κατά την εκτέλεση του προγράμματος.

Μεταβλητές δηλώνονται στην ενότητα δήλωσης μεταβλητής, αλλά σε αντίθεση με τις σταθερές, λαμβάνουν τις τιμές τους κατά την εκτέλεση του προγράμματος και αυτές οι τιμές μπορούν να αλλάξουν. Οι σταθερές και οι μεταβλητές μπορούν να αναφέρονται ονομαστικά.

Κατά γράμμα δεν έχει αναγνωριστικό και αντιπροσωπεύεται απευθείας από την τιμή στο κείμενο του προγράμματος.

Τύποςορίζει το σύνολο των τιμών που μπορούν να λάβουν τα στοιχεία δεδομένων και το σύνολο των λειτουργιών που επιτρέπονται σε αυτά.

Αυτό και τα τέσσερα επόμενα κεφάλαια παρέχουν λεπτομερείς περιγραφές για κάθε τύπο.

1.1 Απλοί τύποι

Οι απλοί τύποι περιλαμβάνουν τύπους τακτικού, πραγματικού και ημερομηνίας.

Τακτικοί τύποιδιαφέρουν στο ότι καθένα από αυτά έχει έναν πεπερασμένο αριθμό πιθανών τιμών. Αυτές οι τιμές μπορούν να ταξινομηθούν με συγκεκριμένο τρόπο (εξ ου και το όνομα των τύπων) και, επομένως, καθεμία από αυτές μπορεί να συσχετιστεί με κάποιον ακέραιο αριθμό - τον τακτικό αριθμό της τιμής.

Πραγματικοί τύποι, αυστηρά μιλώντας, έχουν επίσης έναν πεπερασμένο αριθμό τιμών, ο οποίος καθορίζεται από τη μορφή της εσωτερικής αναπαράστασης ενός πραγματικού αριθμού. Ωστόσο, ο αριθμός των πιθανών τιμών των πραγματικών τύπων είναι τόσο μεγάλος που δεν είναι δυνατόν να συσχετιστεί ένας ακέραιος αριθμός (ο αριθμός του) με καθένα από αυτούς.

Τύπος ημερομηνίας-ώραςσχεδιασμένο για αποθήκευση ημερομηνίας και ώρας. Στην πραγματικότητα, χρησιμοποιεί την πραγματική μορφή για αυτούς τους σκοπούς.

1.1.1 Τακτικοί τύποι

Οι τακτικοί τύποι περιλαμβάνουν (βλ. Εικόνα 1.1) τύπους ακέραιων, λογικών, χαρακτήρων, απαριθμημένων και εύρους. Η συνάρτηση Ord(x) μπορεί να εφαρμοστεί σε οποιαδήποτε από αυτές, η οποία επιστρέφει τον τακτικό αριθμό της τιμής της παράστασης X.


Ρύζι. 1.1 - Δομή τύπου δεδομένων

Για ολόκληροςτύπους, η συνάρτηση ord(x) επιστρέφει την τιμή του ίδιου του x, δηλαδή Ord(X) = x για x που ανήκει σε οποιοδήποτε ολόκληροςτύπος. Εφαρμογή της σειράς (x) σε λογικός , συμβολικό και απαριθμήσιμοτύπους δίνει έναν θετικό ακέραιο στην περιοχή 0 έως 1 ( boolean τύπου), από 0 έως 255 ( συμβολικός), από 0 έως 65535 ( αναρίθμητος). Εύρος τύπουδιατηρεί όλες τις ιδιότητες του βασικού τακτικού τύπου, επομένως το αποτέλεσμα της εφαρμογής της συνάρτησης ord(x) σε αυτόν εξαρτάται από τις ιδιότητες αυτού του τύπου.

Μπορείτε επίσης να εφαρμόσετε συναρτήσεις σε τακτικούς τύπους:

pred(x)- επιστρέφει την προηγούμενη τιμή του τακτικού τύπου (η τιμή που αντιστοιχεί στον τακτικό αριθμό ord(x) -1, δηλαδή ord(pred(x)) = ord(x) - 1;

succ(x)- επιστρέφει την επόμενη τιμή του τακτικού τύπου, που αντιστοιχεί στον τακτικό αριθμό ord(x) +1, δηλαδή ord(Succ(x)) = ord(x) + 1.

Για παράδειγμα, εάν ένα πρόγραμμα ορίζει μια μεταβλητή

τότε η συνάρτηση PRED(c) θα επιστρέψει τον χαρακτήρα "4", και η συνάρτηση SUCC(c) θα επιστρέψει τον χαρακτήρα "6".

Εάν φανταστούμε οποιονδήποτε τακτικό τύπο ως ένα διατεταγμένο σύνολο τιμών που αυξάνεται από αριστερά προς τα δεξιά και καταλαμβάνει ένα συγκεκριμένο τμήμα στον άξονα αριθμών, τότε η συνάρτηση pred(x) δεν ορίζεται για το αριστερό άκρο και η succ (x) είναι δεν έχει οριστεί για το δεξί άκρο αυτού του τμήματος.

Ακέραιοι τύποι . Το εύρος των πιθανών τιμών των ακέραιων τύπων εξαρτάται από την εσωτερική τους αναπαράσταση, η οποία μπορεί να είναι ένα, δύο, τέσσερα ή οκτώ byte. Στον πίνακα Το 1.1 δείχνει τα ονόματα των ακέραιων τύπων, το μήκος της εσωτερικής τους αναπαράστασης σε byte και το εύρος των πιθανών τιμών.

Πίνακας 1.1 - Ακέραιοι τύποι

Ονομα Μήκος, byte Εύρος τιμών
Καρδινάλιος 4 0. .. 2 147 483 647
Ψηφιόλεξη 1 0...255
Shortint 1 -128...+127
Smallint 2 -32 768...+32 767
Λέξη 2 0...65 535
Ακέραιος αριθμός 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
LongWord 4 0. . .4 294 967 295

Τύποι LongWordΚαι Int64παρουσιάστηκαν για πρώτη φορά στην έκδοση 4, και οι τύποι SmallintΚαι Καρδινάλιοςδεν είναι διαθέσιμο στους Δελφούς 1. Πληκτρολογήστε ακέραιος αριθμόςγια αυτήν την έκδοση χρειάζεται 2 byte και έχει εύρος τιμών από -32768 έως +32767, δηλαδή το ίδιο με Smallint .

Όταν χρησιμοποιείτε διαδικασίες και συναρτήσεις με ακέραιες παραμέτρους, θα πρέπει να καθοδηγηθείτε από την «φωλιοποίηση» των τύπων, π.χ. όπου μπορεί να χρησιμοποιηθεί λέξη, επιτρέπεται η χρήση Ψηφιόλεξη(αλλά όχι το αντίστροφο), στο Longint«μπαίνει» Smallint, το οποίο με τη σειρά του περιλαμβάνει Shortint .

Ο κατάλογος των διαδικασιών και των συναρτήσεων που ισχύουν για ακέραιους τύπους δίνεται στον πίνακα. 1.2. Τα γράμματα b, s, w, i, l δηλώνουν εκφράσεις των παρακάτω τύπων: Ψηφιόλεξη , Shortint, Word, Integer και Longint ,

Το x είναι μια έκφραση οποιουδήποτε από αυτούς τους τύπους. τα γράμματα vb, vs, vw, vi, vl, vx δηλώνουν μεταβλητές των αντίστοιχων τύπων. Μια προαιρετική παράμετρος υποδεικνύεται σε αγκύλες.

Πίνακας 1.2 - Τυπικές διαδικασίες και λειτουργίες που ισχύουν για ολόκληρους τύπους

Εφεση Τύπος αποτελέσματος Δράση
κοιλιακοί (x) Χ Επιστρέφει την ενότητα x
chr(b) Απανθρακώνω Επιστρέφει έναν χαρακτήρα από τον κωδικό του
dec(vx[,i]) - Μειώνει την τιμή του vx κατά i και ελλείψει i - κατά 1
inc(vx[,i]) - Αυξάνει την τιμή του vx κατά i και ελλείψει i - κατά 1
Γεια σου Ψηφιόλεξη Επιστρέφει το υψηλότερο τόξο του επιχειρήματος
Γεια (εγώ) Ιδιο Επιστρέφει το τρίτο byte
Lo(i) Επιστρέφει το χαμηλό byte του ορίσματος
Χαμηλός) Ιδιο
περίεργο(l) Boolean Επιστρέφει True εάν το όρισμα είναι περιττός αριθμός
Τυχαίο(w) Το ίδιο με την παράμετρο Επιστρέφει έναν ψευδοτυχαίο αριθμό ομοιόμορφα κατανεμημένο στο εύρος 0...(w-l)
sqr(x) Χ Επιστρέφει το τετράγωνο του επιχειρήματος
swap(i) Ακέραιος αριθμός Ανταλλάσσει byte με μια λέξη
swap(w) Λέξη Ιδιο

Όταν λειτουργούμε με ακέραιους αριθμούς, ο τύπος αποτελέσματος θα αντιστοιχεί στον τύπο των τελεστών και εάν οι τελεστές είναι διαφορετικών ακέραιων τύπων, ο γενικός τύπος που περιλαμβάνει και τους δύο τελεστές. Για παράδειγμα, όταν λειτουργεί με σύντομοΚαι λέξηο κοινός τύπος θα είναι ακέραιος αριθμός. Στην προεπιλεγμένη ρύθμιση, ο μεταγλωττιστής Delphi δεν παράγει κώδικα για να ελέγξει εάν μια τιμή είναι εκτός εύρους, κάτι που μπορεί να οδηγήσει σε παρεξηγήσεις.

Boolean τύποι . Οι λογικοί τύποι περιλαμβάνουν Boolean, ByteBool, Bool, wordBoolΚαι LongBool. Στο τυπικό Pascal, ορίζεται μόνο ο τύπος Boolean, άλλοι λογικοί τύποι εισάγονται στο Object Pascal για συμβατότητα με Windows: τύπους BooleanΚαι ByteBoolτο καθένα καταλαμβάνει ένα byte, BoolΚαι WordBool- 2 byte το καθένα, LongBool- 4 byte. Οι τιμές Boole μπορεί να είναι μία από τις προ-δηλωμένες σταθερές False ή True.

Δεδομένου ότι ο τύπος Boolean είναι ένας τακτικός τύπος, μπορεί να χρησιμοποιηθεί σε μια δήλωση βρόχου ενός μετρήσιμου τύπου. Στους Δελφούς 32 για Booleanέννοια

Ord (True) = +1, ενώ για άλλους τύπους ( Bool, WordBoolκαι τα λοιπά.)

Ord(True) = -1, επομένως αυτού του είδους οι τελεστές πρέπει να χρησιμοποιούνται με προσοχή! Για παράδειγμα, για την έκδοση Delphi 6, η εκτελέσιμη δήλωση showMessage(" --- ") στον ακόλουθο βρόχο Γιαδεν θα εκτελεστεί ποτέ:

για L:= False to True do

ShowMessage("--);

Αν αντικαταστήσουμε την παράμετρο βρόχου τύπου L στο προηγούμενο παράδειγμα με Boolean, ο βρόχος θα τρέξει και το μήνυμα θα εμφανιστεί στην οθόνη δύο φορές. [Για τις εκδόσεις Delphi 1 και 2 ord (True) =+1 για οποιονδήποτε τύπο boolean.]

Τύπος χαρακτήρα . Η τιμή ενός τύπου χαρακτήρα είναι το σύνολο όλων των χαρακτήρων του υπολογιστή. Σε κάθε χαρακτήρα εκχωρείται ένας ακέραιος αριθμός στην περιοχή 0...255. Αυτός ο αριθμός χρησιμεύει ως κωδικός για την εσωτερική αναπαράσταση του συμβόλου και επιστρέφεται από τη συνάρτηση ord.

Για την κωδικοποίηση στα Windows, χρησιμοποιείται ο κώδικας ANSI (ονομάστηκε έτσι από το Αμερικανικό Εθνικό Ινστιτούτο Προτύπων, το αμερικανικό ινστιτούτο τυποποίησης που πρότεινε αυτόν τον κωδικό). Το πρώτο μισό των χαρακτήρων υπολογιστή με κωδικούς 0... 127 αντιστοιχεί στον Πίνακα 1.3. Το δεύτερο μισό των χαρακτήρων με κωδικούς 128...255 διαφέρει για διαφορετικές γραμματοσειρές. Οι τυπικές γραμματοσειρές των Windows Arial Cyr, Courier New Cyr και Times New Roman χρησιμοποιούν τους τελευταίους 64 κωδικούς (από 192 έως 256) για να αντιπροσωπεύουν κυριλλικούς χαρακτήρες (χωρίς τα γράμματα "ё" και "Ё"): "A"... "Z" είναι κωδικοποιημένες τιμές 192..223, "a"... "i" - 224...255. Τα σύμβολα «Ё» και «ε» έχουν κωδικούς 168 και 184, αντίστοιχα.

Πίνακας 1.3 - Κωδικοποίηση χαρακτήρων σύμφωνα με το πρότυπο ANSI

Κώδικας Σύμβολο Κώδικας. Σύμβολο Κώδικας. Σύμβολο Κώδικας Σύμβολο
0 NUL 32 B.L. 64 @ 96 "
1 ΖΩΝ 33 ! 65 ΕΝΑ 97 ΕΝΑ
2 STX 34 66 ΣΕ 98 σι
3 ETX 35 # 67 ΜΕ 99 Με
4 ΕΟΤ 36 $ 68 ρε 100 ρε
5 ENQ 37 % 69 μι 101 μι
6 ACK 38 & 70 φά 102 φά
7 BEL 39 " 71 σολ 103 ρε
8" B.S. 40 ( 72 Ν 104 η
9 HT 41 ) 73 Εγώ 105 Εγώ
10 LF 42 * 74 J 106 ι
11 VT 43 + 75 ΠΡΟΣ ΤΗΝ 107 κ
12 FF 44 φά 76 μεγάλο 108 1
13 CR 45 - 77 Μ 109 Μ
14 ΕΤΣΙ 46 78 Ν 110 n
15 ΣΙ. 47 / 79 0 111 Ο
16 ΔΕΛ 48 0 80 R 112 Π
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 μικρό 115 μικρό
20 DC 4 52 4 84 Τ 116 t
21 Ν.Α.Κ. 53 5 85 U 117 u
22 ΣΥΝ 54 6 86 V 118 v
23 ETB 55 7 87 W 119 W
24 ΜΠΟΡΩ 56 8 88 Χ 120 Χ
25 Η Ε.Μ. 57 9 89 Υ 121 U
26 ΥΠΟ 58 : 90 Ζ .122 z
27 ESC 59 ; 91 t 123 {
28 FS 60 < 92 \ 124 1
29 Γ.Σ. 61 = 93 ] 125 }
30 R.S. 62 > 94 μεγάλο 126 ~
31 ΜΑΣ 63 φά 95 127 r

Οι χαρακτήρες με κωδικούς 0...31 αναφέρονται σε κωδικούς υπηρεσίας. Εάν αυτοί οι κωδικοί χρησιμοποιούνται στο κείμενο χαρακτήρων του προγράμματος, θεωρούνται κενά.

Ομοσπονδιακή Υπηρεσία για την Εκπαίδευση

Εκθεση ΙΔΕΩΝ

"ΤΥΠΟΙ ΔΕΔΟΜΕΝΩΝ ΣΕ PASCAL"

1. Τύποι δεδομένων

Οποιαδήποτε δεδομένα, δηλ. Οι σταθερές, οι μεταβλητές, οι ιδιότητες, οι τιμές συναρτήσεων ή οι εκφράσεις χαρακτηρίζονται από τους τύπους τους. Ένας τύπος ορίζει το σύνολο των έγκυρων τιμών που μπορεί να έχει ένα αντικείμενο, καθώς και το σύνολο των έγκυρων πράξεων που μπορούν να εφαρμοστούν σε αυτό. Επιπλέον, ο τύπος καθορίζει επίσης τη μορφή της εσωτερικής αναπαράστασης των δεδομένων στη μνήμη του υπολογιστή.

Γενικά, η γλώσσα Object Pascal χαρακτηρίζεται από μια διακλαδισμένη δομή τύπων δεδομένων (Εικ. 1.1). Η γλώσσα παρέχει έναν μηχανισμό για τη δημιουργία νέων τύπων, χάρη στον οποίο ο συνολικός αριθμός των τύπων που χρησιμοποιούνται σε ένα πρόγραμμα μπορεί να είναι όσο μεγάλος επιθυμείτε.

Τα δεδομένα που επεξεργάζονται στο πρόγραμμα χωρίζονται σε μεταβλητές, σταθερές και κυριολεκτικά:

Σταθερές αντιπροσωπεύουν δεδομένα των οποίων οι τιμές ορίζονται στην ενότητα σταθερής δήλωσης και δεν αλλάζουν κατά την εκτέλεση του προγράμματος.

Μεταβλητές δηλώνονται στην ενότητα δήλωσης μεταβλητής, αλλά σε αντίθεση με τις σταθερές, λαμβάνουν τις τιμές τους κατά την εκτέλεση του προγράμματος και αυτές οι τιμές μπορούν να αλλάξουν. Οι σταθερές και οι μεταβλητές μπορούν να αναφέρονται ονομαστικά.

Κατά γράμμα δεν έχει αναγνωριστικό και αντιπροσωπεύεται απευθείας από την τιμή στο κείμενο του προγράμματος.

Τύποςορίζει το σύνολο των τιμών που μπορούν να λάβουν τα στοιχεία δεδομένων και το σύνολο των λειτουργιών που επιτρέπονται σε αυτά.

Αυτό και τα τέσσερα επόμενα κεφάλαια παρέχουν λεπτομερείς περιγραφές για κάθε τύπο.

1.1 Απλοί τύποι

Οι απλοί τύποι περιλαμβάνουν τύπους τακτικού, πραγματικού και ημερομηνίας.

Τακτικοί τύποιδιαφέρουν στο ότι καθένα από αυτά έχει έναν πεπερασμένο αριθμό πιθανών τιμών. Αυτές οι τιμές μπορούν να ταξινομηθούν με συγκεκριμένο τρόπο (εξ ου και το όνομα των τύπων) και, επομένως, καθεμία από αυτές μπορεί να συσχετιστεί με κάποιον ακέραιο αριθμό - τον τακτικό αριθμό της τιμής.

Πραγματικοί τύποι, αυστηρά μιλώντας, έχουν επίσης έναν πεπερασμένο αριθμό τιμών, ο οποίος καθορίζεται από τη μορφή της εσωτερικής αναπαράστασης ενός πραγματικού αριθμού. Ωστόσο, ο αριθμός των πιθανών τιμών των πραγματικών τύπων είναι τόσο μεγάλος που δεν είναι δυνατόν να συσχετιστεί ένας ακέραιος αριθμός (ο αριθμός του) με καθένα από αυτούς.

Τύπος ημερομηνίας-ώραςσχεδιασμένο για αποθήκευση ημερομηνίας και ώρας. Στην πραγματικότητα, χρησιμοποιεί την πραγματική μορφή για αυτούς τους σκοπούς.

1.1.1 Τακτικοί τύποι

Οι τακτικοί τύποι περιλαμβάνουν (βλ. Εικόνα 1.1) τύπους ακέραιων, λογικών, χαρακτήρων, απαριθμημένων και εύρους. Η συνάρτηση Ord(x) μπορεί να εφαρμοστεί σε οποιαδήποτε από αυτές, η οποία επιστρέφει τον τακτικό αριθμό της τιμής της παράστασης X.


Ρύζι. 1.1 - Δομή τύπου δεδομένων

Για ολόκληροςτύπους, η συνάρτηση ord(x) επιστρέφει την τιμή του ίδιου του x, δηλαδή Ord(X) = x για x που ανήκει σε οποιοδήποτε ολόκληροςτύπος. Εφαρμογή της σειράς (x) σε λογικός , συμβολικό και απαριθμήσιμοτύπους δίνει έναν θετικό ακέραιο στην περιοχή 0 έως 1 ( boolean τύπου), από 0 έως 255 ( συμβολικός), από 0 έως 65535 ( αναρίθμητος). Εύρος τύπουδιατηρεί όλες τις ιδιότητες του βασικού τακτικού τύπου, επομένως το αποτέλεσμα της εφαρμογής της συνάρτησης ord(x) σε αυτόν εξαρτάται από τις ιδιότητες αυτού του τύπου.

Μπορείτε επίσης να εφαρμόσετε συναρτήσεις σε τακτικούς τύπους:

pred(x)- επιστρέφει την προηγούμενη τιμή του τακτικού τύπου (η τιμή που αντιστοιχεί στον τακτικό αριθμό ord(x) -1, δηλαδή ord(pred(x)) = ord(x) - 1;

succ(x)- επιστρέφει την επόμενη τιμή του τακτικού τύπου, που αντιστοιχεί στον τακτικό αριθμό ord(x) +1, δηλαδή ord(Succ(x)) = ord(x) + 1.

Για παράδειγμα, εάν ένα πρόγραμμα ορίζει μια μεταβλητή

τότε η συνάρτηση PRED(c) θα επιστρέψει τον χαρακτήρα "4", και η συνάρτηση SUCC(c) θα επιστρέψει τον χαρακτήρα "6".

Εάν φανταστούμε οποιονδήποτε τακτικό τύπο ως ένα διατεταγμένο σύνολο τιμών που αυξάνεται από αριστερά προς τα δεξιά και καταλαμβάνει ένα συγκεκριμένο τμήμα στον άξονα αριθμών, τότε η συνάρτηση pred(x) δεν ορίζεται για το αριστερό άκρο και η succ (x) είναι δεν έχει οριστεί για το δεξί άκρο αυτού του τμήματος.

Ακέραιοι τύποι . Το εύρος των πιθανών τιμών των ακέραιων τύπων εξαρτάται από την εσωτερική τους αναπαράσταση, η οποία μπορεί να είναι ένα, δύο, τέσσερα ή οκτώ byte. Στον πίνακα Το 1.1 δείχνει τα ονόματα των ακέραιων τύπων, το μήκος της εσωτερικής τους αναπαράστασης σε byte και το εύρος των πιθανών τιμών.

Πίνακας 1.1 - Ακέραιοι τύποι

Ονομα Μήκος, byte Εύρος τιμών
Καρδινάλιος 4 0. .. 2 147 483 647
Ψηφιόλεξη 1 0...255
Shortint 1 -128...+127
Smallint 2 -32 768...+32 767
Λέξη 2 0...65 535
Ακέραιος αριθμός 4
Longint 4 -2 147 483 648...+2 147 483 647
Int64 8 -9*1018...+9*1018
LongWord 4 0. . .4 294 967 295

Τύποι LongWordΚαι Int64παρουσιάστηκαν για πρώτη φορά στην έκδοση 4, και οι τύποι SmallintΚαι Καρδινάλιοςδεν είναι διαθέσιμο στους Δελφούς 1. Πληκτρολογήστε ακέραιος αριθμόςγια αυτήν την έκδοση χρειάζεται 2 byte και έχει εύρος τιμών από -32768 έως +32767, δηλαδή το ίδιο με Smallint .

Όταν χρησιμοποιείτε διαδικασίες και συναρτήσεις με ακέραιες παραμέτρους, θα πρέπει να καθοδηγηθείτε από την «φωλιοποίηση» των τύπων, π.χ. όπου μπορεί να χρησιμοποιηθεί λέξη, επιτρέπεται η χρήση Ψηφιόλεξη(αλλά όχι το αντίστροφο), στο Longint«μπαίνει» Smallint, το οποίο με τη σειρά του περιλαμβάνει Shortint .

Ο κατάλογος των διαδικασιών και των συναρτήσεων που ισχύουν για ακέραιους τύπους δίνεται στον πίνακα. 1.2. Τα γράμματα b, s, w, i, l δηλώνουν εκφράσεις των παρακάτω τύπων: Ψηφιόλεξη , Shortint, Word, Integer και Longint ,

Το x είναι μια έκφραση οποιουδήποτε από αυτούς τους τύπους. τα γράμματα vb, vs, vw, vi, vl, vx δηλώνουν μεταβλητές των αντίστοιχων τύπων. Μια προαιρετική παράμετρος υποδεικνύεται σε αγκύλες.

Πίνακας 1.2 - Τυπικές διαδικασίες και λειτουργίες που ισχύουν για ολόκληρους τύπους

Εφεση Τύπος αποτελέσματος Δράση
κοιλιακοί (x) Χ Επιστρέφει την ενότητα x
chr(b) Απανθρακώνω Επιστρέφει έναν χαρακτήρα από τον κωδικό του
dec(vx[,i]) - Μειώνει την τιμή του vx κατά i και ελλείψει i - κατά 1
inc(vx[,i]) - Αυξάνει την τιμή του vx κατά i και ελλείψει i - κατά 1
Γεια σου Ψηφιόλεξη Επιστρέφει το υψηλότερο τόξο του επιχειρήματος
Γεια (εγώ) Ιδιο Επιστρέφει το τρίτο byte
Lo(i) Επιστρέφει το χαμηλό byte του ορίσματος
Χαμηλός) Ιδιο
περίεργο(l) Boolean Επιστρέφει True εάν το όρισμα είναι περιττός αριθμός
Τυχαίο(w) Το ίδιο με την παράμετρο Επιστρέφει έναν ψευδοτυχαίο αριθμό ομοιόμορφα κατανεμημένο στο εύρος 0...(w-l)
sqr(x) Χ Επιστρέφει το τετράγωνο του επιχειρήματος
swap(i) Ακέραιος αριθμός Ανταλλάσσει byte με μια λέξη
swap(w) Λέξη Ιδιο

Όταν λειτουργούμε με ακέραιους αριθμούς, ο τύπος αποτελέσματος θα αντιστοιχεί στον τύπο των τελεστών και εάν οι τελεστές είναι διαφορετικών ακέραιων τύπων, ο γενικός τύπος που περιλαμβάνει και τους δύο τελεστές. Για παράδειγμα, όταν λειτουργεί με σύντομοΚαι λέξηο κοινός τύπος θα είναι ακέραιος αριθμός. Στην προεπιλεγμένη ρύθμιση, ο μεταγλωττιστής Delphi δεν παράγει κώδικα για να ελέγξει εάν μια τιμή είναι εκτός εύρους, κάτι που μπορεί να οδηγήσει σε παρεξηγήσεις.

Boolean τύποι . Οι λογικοί τύποι περιλαμβάνουν Boolean, ByteBool, Bool, wordBoolΚαι LongBool. Στο τυπικό Pascal, ορίζεται μόνο ο τύπος Boolean, άλλοι λογικοί τύποι εισάγονται στο Object Pascal για συμβατότητα με Windows: τύπους BooleanΚαι ByteBoolτο καθένα καταλαμβάνει ένα byte, BoolΚαι WordBool- 2 byte το καθένα, LongBool- 4 byte. Οι τιμές Boole μπορεί να είναι μία από τις προ-δηλωμένες σταθερές False ή True.

Δεδομένου ότι ο τύπος Boolean είναι ένας τακτικός τύπος, μπορεί να χρησιμοποιηθεί σε μια δήλωση βρόχου ενός μετρήσιμου τύπου. Στους Δελφούς 32 για Booleanέννοια

Ord (True) = +1, ενώ για άλλους τύπους ( Bool, WordBoolκαι τα λοιπά.)

Ord(True) = -1, επομένως αυτού του είδους οι τελεστές πρέπει να χρησιμοποιούνται με προσοχή! Για παράδειγμα, για την έκδοση Delphi 6, η εκτελέσιμη δήλωση showMessage(" --- ") στον ακόλουθο βρόχο Γιαδεν θα εκτελεστεί ποτέ:

για L:= False to True do

ShowMessage("--);

Αν αντικαταστήσουμε την παράμετρο βρόχου τύπου L στο προηγούμενο παράδειγμα με Boolean, ο βρόχος θα τρέξει και το μήνυμα θα εμφανιστεί στην οθόνη δύο φορές. [Για τις εκδόσεις Delphi 1 και 2 ord (True) =+1 για οποιονδήποτε τύπο boolean.]

Τύπος χαρακτήρα . Η τιμή ενός τύπου χαρακτήρα είναι το σύνολο όλων των χαρακτήρων του υπολογιστή. Σε κάθε χαρακτήρα εκχωρείται ένας ακέραιος αριθμός στην περιοχή 0...255. Αυτός ο αριθμός χρησιμεύει ως κωδικός για την εσωτερική αναπαράσταση του συμβόλου και επιστρέφεται από τη συνάρτηση ord.

Για την κωδικοποίηση στα Windows, χρησιμοποιείται ο κώδικας ANSI (ονομάστηκε έτσι από το Αμερικανικό Εθνικό Ινστιτούτο Προτύπων, το αμερικανικό ινστιτούτο τυποποίησης που πρότεινε αυτόν τον κωδικό). Το πρώτο μισό των χαρακτήρων υπολογιστή με κωδικούς 0... 127 αντιστοιχεί στον Πίνακα 1.3. Το δεύτερο μισό των χαρακτήρων με κωδικούς 128...255 διαφέρει για διαφορετικές γραμματοσειρές. Οι τυπικές γραμματοσειρές των Windows Arial Cyr, Courier New Cyr και Times New Roman χρησιμοποιούν τους τελευταίους 64 κωδικούς (από 192 έως 256) για να αντιπροσωπεύουν κυριλλικούς χαρακτήρες (χωρίς τα γράμματα "ё" και "Ё"): "A"... "Z" είναι κωδικοποιημένες τιμές 192..223, "a"... "i" - 224...255. Τα σύμβολα «Ё» και «ε» έχουν κωδικούς 168 και 184, αντίστοιχα.

Πίνακας 1.3 - Κωδικοποίηση χαρακτήρων σύμφωνα με το πρότυπο ANSI

Κώδικας Σύμβολο Κώδικας. Σύμβολο Κώδικας. Σύμβολο Κώδικας Σύμβολο
0 NUL 32 B.L. 64 @ 96 "
1 ΖΩΝ 33 ! 65 ΕΝΑ 97 ΕΝΑ
2 STX 34 66 ΣΕ 98 σι
3 ETX 35 # 67 ΜΕ 99 Με
4 ΕΟΤ 36 $ 68 ρε 100 ρε
5 ENQ 37 % 69 μι 101 μι
6 ACK 38 & 70 φά 102 φά
7 BEL 39 " 71 σολ 103 ρε
8" B.S. 40 ( 72 Ν 104 η
9 HT 41 ) 73 Εγώ 105 Εγώ
10 LF 42 * 74 J 106 ι
11 VT 43 + 75 ΠΡΟΣ ΤΗΝ 107 κ
12 FF 44 φά 76 μεγάλο 108 1
13 CR 45 - 77 Μ 109 Μ
14 ΕΤΣΙ 46 78 Ν 110 n
15 ΣΙ. 47 / 79 0 111 Ο
16 ΔΕΛ 48 0 80 R 112 Π
17 DC1 49 1 81 Q 113 q
18 DC2 50 2 82 R 114 r
19 DC3 51 3 83 μικρό 115 μικρό
20 DC 4 52 4 84 Τ 116 t
21 Ν.Α.Κ. 53 5 85 U 117 u
22 ΣΥΝ 54 6 86 V 118 v
23 ETB 55 7 87 W 119 W
24 ΜΠΟΡΩ 56 8 88 Χ 120 Χ
25 Η Ε.Μ. 57 9 89 Υ 121 U
26 ΥΠΟ 58 : 90 Ζ .122 z
27 ESC 59 ; 91 t 123 {
28 FS 60 < 92 \ 124 1
29 Γ.Σ. 61 = 93 ] 125 }
30 R.S. 62 > 94 μεγάλο 126 ~
31 ΜΑΣ 63 φά 95 127 r

Οι χαρακτήρες με κωδικούς 0...31 αναφέρονται σε κωδικούς υπηρεσίας. Εάν αυτοί οι κωδικοί χρησιμοποιούνται στο κείμενο χαρακτήρων του προγράμματος, θεωρούνται κενά.

Για να πληκτρολογήσετε απανθρακώνωισχύουν σχεσιακές λειτουργίες, καθώς και ενσωματωμένες συναρτήσεις:

Χαρακτήρας (γ)- λειτουργία τύπου απανθρακώνω; μετατρέπει μια έκφραση σε τύπο Ψηφιόλεξησε ένα σύμβολο και το επιστρέφει με την αξία του.

UpCase(CH)- λειτουργία τύπου απανθρακώνω; επιστρέφει ένα κεφαλαίο γράμμα αν το сн είναι πεζό λατινικό γράμμα, διαφορετικά επιστρέφει το ίδιο το σύμβολο сн (για Κυριλλικό, επιστρέφει τον αρχικό χαρακτήρα).

Τύπος Enum . Ένας απαριθμημένος τύπος καθορίζεται από μια απαρίθμηση των τιμών που μπορεί να λάβει. Κάθε τιμή ονομάζεται από κάποιο αναγνωριστικό και βρίσκεται σε μια λίστα που περιβάλλεται από παρενθέσεις, για παράδειγμα:

χρώματα = (κόκκινο, λευκό, μπλε).

Η χρήση απαριθμημένων τύπων κάνει τα προγράμματα πιο οπτικά.

Η αντιστοιχία μεταξύ των τιμών ενός απαριθμημένου τύπου και των τακτικών αριθμών αυτών των τιμών καθορίζεται από τη σειρά απαρίθμησης: η πρώτη τιμή στη λίστα λαμβάνει τον τακτικό αριθμό 0, η δεύτερη - 1, κ.λπ. Η μέγιστη χωρητικότητα του ένας απαριθμημένος τύπος είναι 65536 τιμές, οπότε στην πραγματικότητα ο απαριθμημένος τύπος καθορίζει κάποιο υποσύνολο ολόκληρου του τύπου λέξηκαι μπορεί να θεωρηθεί ως συμπαγής δήλωση μιας ομάδας ακεραίων σταθερών με τιμές 0, 1, κ.λπ.

Η χρήση απαριθμημένων τύπων αυξάνει την αξιοπιστία των προγραμμάτων επιτρέποντάς σας να ελέγχετε τις τιμές που λαμβάνουν οι αντίστοιχες μεταβλητές. Το Object Pascal επιτρέπει την αντίστροφη μετατροπή: οποιαδήποτε έκφραση τύπου Λέξημπορεί να μετατραπεί σε τιμή ενός απαριθμημένου τύπου, εκτός εάν η τιμή της ακέραιας έκφρασης υπερβαίνει την καρδινάτητα αυτού του τύπου. Αυτή η μετατροπή επιτυγχάνεται χρησιμοποιώντας μια αυτόματα δηλωμένη συνάρτηση με το όνομα του απαριθμούμενου τύπου.

Εύρος τύπου . Ένας τύπος εύρους είναι ένα υποσύνολο του βασικού του τύπου, ο οποίος μπορεί να είναι οποιοσδήποτε τακτικός τύπος εκτός από έναν τύπο εύρους.

Ένας τύπος εύρους ορίζεται από τα όρια των τιμών του εντός του βασικού τύπου:

<мин.знач.>..<макс.знач.>

Εδώ<мин. знач. >- ελάχιστη τιμή του εύρους τύπου·<макс. знач. >- η μέγιστη τιμή του.

Ο τύπος εύρους δεν χρειάζεται να περιγράφεται στην ενότητα τύπου, αλλά μπορεί να καθοριστεί απευθείας κατά τη δήλωση της μεταβλητής.

Κατά τον καθορισμό ενός τύπου εύρους, πρέπει να ακολουθείτε τους ακόλουθους κανόνες:

δύο χαρακτήρες ".." αντιμετωπίζονται ως ένας χαρακτήρας, επομένως δεν επιτρέπονται κενά μεταξύ τους. το αριστερό περίγραμμα του εύρους δεν πρέπει να υπερβαίνει το δεξί του όριο.

Ένας τύπος εύρους κληρονομεί όλες τις ιδιότητες του βασικού του τύπου, αλλά με τους περιορισμούς της χαμηλότερης ισχύος του. Ειδικότερα, εάν οριστεί μια μεταβλητή.

Η τυπική βιβλιοθήκη Object Pascal περιλαμβάνει δύο λειτουργίες που υποστηρίζουν την εργασία με τύπους εύρους:

Υψηλό (x)- επιστρέφει τη μέγιστη τιμή του τύπου εύρους στον οποίο ανήκει η μεταβλητή x.

Χαμηλό (x)- επιστρέφει την ελάχιστη τιμή του τύπου εύρους.

1.1.2 Πραγματικοί τύποι

Σε αντίθεση με τους τακτικούς τύπους, των οποίων οι τιμές αντιστοιχίζονται πάντα σε μια σειρά από ακέραιους αριθμούς και επομένως αντιπροσωπεύονται με απόλυτη ακρίβεια στον υπολογιστή, οι τιμές των πραγματικών τύπων ορίζουν έναν αυθαίρετο αριθμό μόνο με κάποια πεπερασμένη ακρίβεια ανάλογα με την εσωτερική μορφή του πραγματικού αριθμού .

Πίνακας 1.4 - Πραγματικοί τύποι

Σε προηγούμενες εκδόσεις του τύπου Delphi 1...3 Πραγματικόςκαταλάμβανε 6 byte και είχε εύρος τιμών από 2,9*10-39 έως 1,7*1038. Στις εκδόσεις 4 και 5 αυτός ο τύπος είναι ισοδύναμος με τον τύπο Διπλό. Εάν απαιτείται (για λόγους συμβατότητας) χρησιμοποιήστε 6-byte Πραγματικός, πρέπει να καθορίσετε μια οδηγία μεταγλωττιστή (SREALCOMPATIBILITY ON).

Όπως φαίνεται από τον πίνακα. 1.4, ένας πραγματικός αριθμός στο Object Pascal καταλαμβάνει από 4 έως 10 συνεχόμενα byte και έχει την ακόλουθη δομή στη μνήμη του υπολογιστή.

Εδώ s είναι το ψηφίο πρόσημου του αριθμού. e - εκθετικό μέρος. περιέχει δυαδική σειρά. Το m είναι η μάντισσα του αριθμού.

ΜάντισσαΤο m έχει μήκος 23 (για μονόκλινο) έως 63 (για Επεκτάθηκε) δυαδικά bit, που εξασφαλίζει ακρίβεια 7...8 για μονόκλινοκαι 19...20 για Επεκτάθηκεδεκαδικά ψηφία. Η υποδιαστολή (κόμμα) υπονοείται πριν από το αριστερό (πιο σημαντικό) ψηφίο της μάντισσας, αλλά όταν λειτουργεί σε έναν αριθμό, η θέση του μετατοπίζεται προς τα αριστερά ή προς τα δεξιά σύμφωνα με τη δυαδική σειρά του αριθμού που είναι αποθηκευμένος στο εκθετικό τμήμα , επομένως οι πράξεις σε πραγματικούς αριθμούς ονομάζονται αριθμητική κινητής υποδιαστολής (κόμμα).

Σημειώστε ότι ο αριθμητικός συνεπεξεργαστής επεξεργάζεται πάντα αριθμούς στη μορφή Επεκτάθηκε, και οι άλλοι τρεις πραγματικοί τύποι σε αυτήν την περίπτωση λαμβάνονται με απλή περικοπή των αποτελεσμάτων στο απαιτούμενο μέγεθος και χρησιμοποιούνται κυρίως για εξοικονόμηση μνήμης.

Οι τύποι καταλαμβάνουν μια ειδική θέση στο Object Pascal συνθΚαι Νόμισμα, οι οποίοι αντιμετωπίζονται ως πραγματικοί αριθμοί με κλασματικά μέρη σταθερού μήκους: in συνθτο κλασματικό μέρος έχει μήκος 0 ψηφία, δηλαδή απλά απουσιάζει, σε νόμισματο μήκος του κλασματικού μέρους είναι 4 δεκαδικά ψηφία. Στην πραγματικότητα, και οι δύο τύποι ορίζουν έναν μεγάλο υπογεγραμμένο ακέραιο που αποθηκεύει 19...20 σημαντικά δεκαδικά ψηφία (εσωτερικά καταλαμβάνουν 8 συνεχόμενα byte). Ταυτόχρονα, σε εκφράσεις συνθΚαι νόμισμαείναι πλήρως συμβατά με οποιουσδήποτε άλλους πραγματικούς τύπους: όλες οι πραγματικές πράξεις ορίζονται σε αυτές, μπορούν να χρησιμοποιηθούν ως ορίσματα σε μαθηματικές συναρτήσεις κ.λπ. Ο καταλληλότερος τομέας εφαρμογής για αυτούς τους τύπους είναι οι λογιστικοί υπολογισμοί.

1.1.3 Τύπος ημερομηνίας-ώρας

Ο τύπος ημερομηνίας ώρας ορίζεται από ένα τυπικό αναγνωριστικό TDateTimeκαι έχει σχεδιαστεί για να αποθηκεύει ταυτόχρονα την ημερομηνία και την ώρα. Στην εσωτερική αναπαράσταση καταλαμβάνει 8 byte και παρόμοια νόμισμαείναι ένας πραγματικός αριθμός με σταθερό κλασματικό μέρος: το ακέραιο μέρος του αριθμού αποθηκεύει την ημερομηνία και το κλασματικό μέρος αποθηκεύει την ώρα. Η ημερομηνία ορίζεται ως ο αριθμός των ημερών που έχουν περάσει από τις 30 Δεκεμβρίου 1899 και ο χρόνος ως το κλάσμα μιας ημέρας που έχει περάσει από 0 ώρες, επομένως η τιμή 36444.837 αντιστοιχεί στην ημερομηνία 10/11/1999 και την ώρα 20:05. Ο αριθμός των ημερών μπορεί να είναι αρνητικός, αλλά τιμές μικρότερες από -693594 (που αντιστοιχεί στην ημερομηνία 00.00.0000 από τη Γέννηση του Χριστού) αγνοούνται από τις συναρτήσεις για τη μετατροπή μιας ημερομηνίας σε τύπο συμβολοσειράς.

Πάνω από τον τύπο δεδομένων TDateTimeορίζονται οι ίδιες πράξεις όπως στους πραγματικούς αριθμούς και οι εκφράσεις αυτού του τύπου μπορούν να περιλαμβάνουν σταθερές και μεταβλητές ακεραίων και πραγματικών τύπων.

Επειδή ο τύπος TDateTimeσυμβατό με τη μορφή πραγματικών αριθμών, μπορείτε εύκολα να προσδιορίσετε μια ημερομηνία που είναι αρκετές ημέρες πριν ή πίσω από μια δεδομένη: για να γίνει αυτό, αρκεί να προσθέσετε ή να αφαιρέσετε τον επιθυμητό ακέραιο αριθμό από τη δεδομένη ημερομηνία, αντίστοιχα.

1.2 Δομημένοι τύποι

Οποιοσδήποτε από τους δομημένους τύπους (και στο Object Pascal υπάρχουν τέσσερις από αυτούς: πίνακες, εγγραφές, σύνολα και αρχεία) χαρακτηρίζεται από την πολλαπλότητα των στοιχείων που σχηματίζουν αυτόν τον τύπο. Κάθε στοιχείο, με τη σειρά του, μπορεί να ανήκει σε έναν δομημένο τύπο, ο οποίος μας επιτρέπει να μιλάμε για πιθανή ένθεση τύπων. Το αντικείμενο Pascal επιτρέπει αυθαίρετο βάθος ένθεσης τύπων, αλλά το συνολικό μήκος οποιουδήποτε από αυτά στην εσωτερική αναπαράσταση δεν πρέπει να υπερβαίνει τα 2 GB.

Για συμβατότητα με το τυπικό Pascal, το Object Pascal επιτρέπει την τοποθέτηση μιας δεσμευμένης λέξης πριν από μια δήλωση δομημένου τύπου συσκευασμένα, δίνοντας εντολή στον μεταγλωττιστή να αποθηκεύει όποτε είναι δυνατόν τη μνήμη που έχει εκχωρηθεί για αντικείμενα δομημένου τύπου. αλλά ο μεταγλωττιστής στην πραγματικότητα αγνοεί αυτήν την οδηγία: η "συσκευασία" δεδομένων στο Object Pascal γίνεται αυτόματα όπου είναι δυνατόν.

1.2.1 Πίνακες

Οι πίνακες στο Object Pascal είναι από πολλές απόψεις παρόμοιοι με παρόμοιους τύπους δεδομένων σε άλλες γλώσσες προγραμματισμού. Ένα ιδιαίτερο χαρακτηριστικό των πινάκων είναι ότι όλα τα συστατικά τους είναι δεδομένα του ίδιου τύπου (πιθανώς δομημένα). Αυτά τα εξαρτήματα μπορούν εύκολα να οργανωθούν και σε οποιοδήποτε από αυτά είναι προσβάσιμο απλά προσδιορίζοντας τον σειριακό αριθμό του.

Η περιγραφή του τύπου πίνακα καθορίζεται ως εξής:

<имя типа>= πίνακας[<сп.инд.типов>] του<тип>;

Εδώ<имя типа>- σωστό αναγνωριστικό συστοιχία, από- δεσμευμένες λέξεις (πίνακας, από);<сп.инд.типов>- μια λίστα με έναν ή περισσότερους τύπους ευρετηρίου, διαχωρισμένους με κόμματα. Οι αγκύλες που πλαισιώνουν τη λίστα αποτελούν συντακτική απαίτηση.<тип>- οποιοδήποτε είδος Αντικειμένου Pascal.

Οποιοιδήποτε τακτικοί τύποι με χωρητικότητα όχι μεγαλύτερη από 2 GB μπορούν να χρησιμοποιηθούν ως τύποι ευρετηρίου στο Object Pascal (δηλ. εκτός LongWordΚαι Int64)

Το βάθος της ένθεσης των δομημένων τύπων γενικά και, κατά συνέπεια, των πινάκων, είναι αυθαίρετο, επομένως ο αριθμός των στοιχείων στη λίστα τύπων ευρετηρίου (μέγεθος πίνακα) δεν είναι περιορισμένος, ωστόσο, το συνολικό μήκος της εσωτερικής αναπαράστασης οποιουδήποτε ο πίνακας δεν μπορεί να είναι μεγαλύτερος από 2 GB. Στη μνήμη του υπολογιστή, τα στοιχεία του πίνακα διαδέχονται το ένα το άλλο με τέτοιο τρόπο ώστε όταν μετακινούνται από τις χαμηλές στις υψηλές διευθύνσεις, το δεξιότερο ευρετήριο του πίνακα αλλάζει πιο γρήγορα.

Στο Object Pascal, μπορείτε να χρησιμοποιήσετε έναν μόνο τελεστή εκχώρησης για να μεταφέρετε όλα τα στοιχεία ενός πίνακα σε έναν άλλο πίνακα του ίδιου τύπου.

1.2.2 Εγγραφές

Ρεκόρ είναι μια δομή δεδομένων που αποτελείται από έναν σταθερό αριθμό στοιχείων που ονομάζονται πεδία μιας εγγραφής. Σε αντίθεση με έναν πίνακα, τα στοιχεία (πεδία) μιας εγγραφής μπορεί να είναι διαφορετικών τύπων. Για να καταστεί δυνατή η αναφορά σε ένα ή άλλο στοιχείο μιας εγγραφής, τα πεδία ονομάζονται.

Η δομή μιας δήλωσης τύπου post είναι:

<имятипа>= εγγραφή<сп.полей>τέλος;

Εδώ<имя типа>- σωστό αναγνωριστικό εγγραφή/τέλος- δεσμευμένες λέξεις (ρεκόρ, τέλος).<сп.полей>- λίστα πεδίων. είναι μια ακολουθία τμημάτων μιας εγγραφής που χωρίζονται με ερωτηματικό.

Κάθε τμήμα μιας εγγραφής αποτελείται από ένα ή περισσότερα αναγνωριστικά πεδίων, διαχωρισμένα με κόμμα.

Προσφορά περίπτωση που, το οποίο ανοίγει το τμήμα παραλλαγής, είναι επιφανειακά παρόμοιο με τον αντίστοιχο τελεστή επιλογής, αλλά στην πραγματικότητα παίζει μόνο το ρόλο ενός είδους λέξης υπηρεσίας που υποδηλώνει την αρχή του τμήματος παραλλαγής. Αυτός είναι ο λόγος για τον οποίο στο τέλος της παραλλαγής δεν πρέπει να βάλετε τέλοςσαν ένα ζευγάρι να περίπτωση που. (Δεδομένου ότι το μέρος της παραλλαγής είναι πάντα το τελευταίο στην εγγραφή, ακολουθείται από το τέλος, αλλά μόνο ως ζευγάρι για εγγραφή). Κλειδί επιλογής πρότασης περίπτωση πουουσιαστικά αγνοείται από τον μεταγλωττιστή: η μόνη απαίτηση για αυτό στο Αντικείμενο Pascal είναι ότι το κλειδί ορίζει κάποιο τυπικό ή προδηλωμένο τύπο τακτικού.

Τα ονόματα πεδίων πρέπει να είναι μοναδικά μέσα στην εγγραφή όπου δηλώνονται, ωστόσο, εάν οι εγγραφές περιέχουν πεδία εγγραφών, δηλαδή είναι ένθετα μεταξύ τους, τα ονόματα μπορούν να επαναληφθούν σε διαφορετικά επίπεδα ένθεσης.

1.2.3 Σετ

Σκηνικά - πρόκειται για σύνολα του ίδιου τύπου αντικειμένων που σχετίζονται λογικά μεταξύ τους. Η φύση των σχέσεων μεταξύ των αντικειμένων υπονοείται μόνο από τον προγραμματιστή και δεν ελέγχεται με κανέναν τρόπο από το Object Pascal. Ο αριθμός των στοιχείων που περιλαμβάνονται σε ένα σύνολο μπορεί να κυμαίνεται από 0 έως 256 (ένα σύνολο που δεν περιέχει στοιχεία ονομάζεται κενό). Είναι η ασυνέπεια του αριθμού των στοιχείων τους που τα σύνολα διαφέρουν από τους πίνακες και τις εγγραφές.

Δύο σύνολα θεωρούνται ισοδύναμα εάν και μόνο εάν όλα τα στοιχεία τους είναι ίδια και η σειρά των στοιχείων στο σύνολο είναι αδιάφορη. Εάν όλα τα στοιχεία ενός συνόλου περιλαμβάνονται επίσης σε ένα άλλο, το πρώτο σύνολο λέγεται ότι περιλαμβάνεται στο δεύτερο. Ένα κενό σύνολο περιλαμβάνεται σε οποιοδήποτε άλλο σύνολο.

Η περιγραφή του τύπου συνόλου είναι:

<имя типа>= σύνολο από<базовый тип>;

Εδώ<имя типа>- σωστό αναγνωριστικό σύνολο απο- δεσμευμένες λέξεις (σύνολο, από);<базовый тип>- ο βασικός τύπος στοιχείων συνόλου, που μπορεί να είναι οποιοσδήποτε τακτικός τύπος, εκτός Word, Integer, Longint, Int64 .

Για τον ορισμό ενός συνόλου, χρησιμοποιείται ο λεγόμενος κατασκευαστής συνόλου: μια λίστα προδιαγραφών των στοιχείων του συνόλου, που χωρίζονται με κόμματα. η λίστα περιβάλλεται από αγκύλες. Οι προδιαγραφές στοιχείων μπορεί να είναι σταθερές ή εκφράσεις ενός βασικού τύπου ή ένας τύπος εύρους του ίδιου βασικού τύπου.

Η εσωτερική δομή του συνόλου είναι τέτοια που σε κάθε στοιχείο του εκχωρείται ένα δυαδικό ψηφίο (ένα bit). εάν ένα στοιχείο περιλαμβάνεται σε ένα σύνολο, το αντίστοιχο bit έχει τιμή 1, διαφορετικά - 0. Ταυτόχρονα, η ελάχιστη μονάδα μνήμης είναι ένα byte που περιέχει 8 bit, οπότε ο μεταγλωττιστής εκχωρεί ένα byte στα σύνολα, και με αποτέλεσμα η ισχύς καθενός από αυτά να γίνει ίση με 8 στοιχεία. Η μέγιστη χωρητικότητα του σετ είναι 256 στοιχεία. Για τέτοια σύνολα, ο μεταγλωττιστής εκχωρεί 16 γειτονικά byte.

Και ένα ακόμη πείραμα: αλλάξτε το εύρος του βασικού τύπου σε 1..256. Αν και η χωρητικότητα αυτού του τύπου είναι 256 στοιχεία, κατά την προσπάθεια μεταγλώττισης ενός προγράμματος ο μεταγλωττιστής θα αναφέρει το σφάλμα: Τα σύνολα μπορεί να έχουν το πολύ 256 στοιχεία επειδή η αρίθμηση των στοιχείων συνόλου ξεκινά από το μηδέν ανεξάρτητα από το κάτω όριο που δηλώνεται στο πρόγραμμα. Ο μεταγλωττιστής επιτρέπει τη χρήση ως βασικού τύπου ενός τύπου ακέραιου εύρους με ελάχιστο όριο 0 και μέγιστο 255 ή οποιουδήποτε απαριθμημένου τύπου με όχι περισσότερα από 256 στοιχεία (η μέγιστη καρδινάτητα ενός απαριθμημένου τύπου είναι 65536 στοιχεία).

1.3 Χορδές

Οι ακόλουθοι τύποι χρησιμοποιούνται για την επεξεργασία κειμένου στο Object Pascal:

κοντό κορδόνι shortstringή συμβολοσειρά [n], όπου n<= 255;

μακρύ κορδόνι σειρά ;

φαρδιά γραμμή WideString ;

μηδενική συμβολοσειρά τερματικού pchar .

Το κοινό χαρακτηριστικό αυτών των τύπων είναι ότι κάθε συμβολοσειρά αντιμετωπίζεται ως ένας μονοδιάστατος πίνακας χαρακτήρων, ο αριθμός των χαρακτήρων στους οποίους μπορεί να αλλάξει σε ένα πρόγραμμα που εκτελείται: για τη συμβολοσειρά [n], το μήκος συμβολοσειράς αλλάζει από 0 σε n, για σειράΚαι pchar- από 0 έως 2 GB.

Το Standard Pascal χρησιμοποιεί μόνο σύντομες χορδές Συμβολοσειρά [n]. Στη μνήμη, σε μια τέτοια συμβολοσειρά εκχωρούνται n+i byte, το πρώτο byte περιέχει το τρέχον μήκος της συμβολοσειράς και οι ίδιοι οι χαρακτήρες βρίσκονται ξεκινώντας από το 2ο byte. Δεδομένου ότι το μήκος της συμβολοσειράς σε αυτήν την περίπτωση είναι ένα byte, το μέγιστο μήκος μιας μικρής συμβολοσειράς δεν μπορεί να υπερβαίνει τους 255 χαρακτήρες. Ο τυπικός τύπος χρησιμοποιείται για να δηλώσει μια μικρή συμβολοσειρά μέγιστου μήκους ShortString(ισοδύναμος Σειρά).

Τα Windows χρησιμοποιούν ευρέως συμβολοσειρές μηδενικού τερματικού, οι οποίες είναι συμβολοσειρές χαρακτήρων που οριοθετούνται από τον χαρακτήρα #o. Το μέγιστο μήκος μιας τέτοιας συμβολοσειράς περιορίζεται μόνο από τη διαθέσιμη μνήμη και μπορεί να είναι πολύ μεγάλο.

Ένας νέος τύπος έχει εισαχθεί σε εκδόσεις 32-bit του Delphi σειρά, συνδυάζοντας τις ανέσεις και των δύο τύπων. Όταν εργάζεστε με αυτόν τον τύπο, η μνήμη εκχωρείται όπως απαιτείται (δυναμικά) και περιορίζεται από τη διαθέσιμη μνήμη που είναι διαθέσιμη στο πρόγραμμα.

1.4 Δείκτες και δυναμική μνήμη

1.4.1 Δυναμική μνήμη

Δυναμική μνήμη- αυτή είναι η μνήμη RAM του υπολογιστή που παρέχεται στο πρόγραμμα κατά τη λειτουργία του. Δυναμική τοποθέτηση δεδομένων σημαίνει τη χρήση δυναμικής μνήμης απευθείας κατά την εκτέλεση του προγράμματος. Αντίθετα, η στατική κατανομή γίνεται από τον μεταγλωττιστή Object Pascal όταν το πρόγραμμα μεταγλωττίζεται. Με τη δυναμική τοποθέτηση, ούτε ο τύπος ούτε η ποσότητα των δεδομένων που πρόκειται να τοποθετηθούν είναι γνωστά εκ των προτέρων.

1.4.2 Πινακίδες

Η RAM PC είναι μια συλλογή κελιών για την αποθήκευση πληροφοριών - bytes, καθένα από τα οποία έχει τον δικό του αριθμό. Αυτοί οι αριθμοί ονομάζονται διευθύνσεις, σας επιτρέπουν να έχετε πρόσβαση σε οποιοδήποτε byte μνήμης. Το Object Pascal παρέχει στον προγραμματιστή ένα ευέλικτο μέσο διαχείρισης δυναμικής μνήμης - τους λεγόμενους δείκτες. Ένας δείκτης είναι μια μεταβλητή που περιέχει ως τιμή τη διεύθυνση ενός byte μνήμης. Χρησιμοποιώντας δείκτες, μπορείτε να τοποθετήσετε οποιονδήποτε από τους τύπους δεδομένων που είναι γνωστοί στο Object Pascal στη δυναμική μνήμη. Μόνο μερικά από αυτά ( Byte, Char, ShortInt, Boolean) καταλαμβάνουν ένα byte στην εσωτερική αναπαράσταση, τα υπόλοιπα - πολλά γειτονικά. Επομένως, ο δείκτης απευθύνεται στην πραγματικότητα μόνο στο πρώτο byte δεδομένων.

Συνήθως, ένας δείκτης συσχετίζεται με κάποιο τύπο δεδομένων. Θα ονομάσουμε τέτοιους δείκτες πληκτρολογημένους. Για να δηλώσετε έναν πληκτρολογημένο δείκτη, χρησιμοποιήστε το εικονίδιο ^, το οποίο βρίσκεται μπροστά από τον αντίστοιχο τύπο.

Στο Object Pascal, μπορείτε να δηλώσετε έναν δείκτη χωρίς να χρειάζεται να τον συσχετίσετε με κάποιον συγκεκριμένο τύπο δεδομένων. Αυτό γίνεται χρησιμοποιώντας τον τυπικό τύπο δείκτης, Για παράδειγμα:

Οι δείκτες αυτού του είδους θα ονομάζονται untyped. Δεδομένου ότι οι μη πληκτρολογημένοι δείκτες δεν σχετίζονται με έναν συγκεκριμένο τύπο, μπορούν να χρησιμοποιηθούν για τη δυναμική κατανομή δεδομένων των οποίων η δομή και ο τύπος αλλάζουν καθώς εκτελείται το πρόγραμμα.

Όπως αναφέρθηκε ήδη, οι τιμές των δεικτών είναι οι διευθύνσεις των μεταβλητών στη μνήμη, επομένως θα περίμενε κανείς ότι η τιμή ενός δείκτη μπορεί να μεταβιβαστεί σε έναν άλλο. Στην πραγματικότητα αυτό δεν είναι αλήθεια. Στο Object Pascal, μπορείτε να μεταβιβάσετε μόνο τιμές μεταξύ δεικτών που σχετίζονται με τον ίδιο τύπο δεδομένων.

1.4.3 Εκχώρηση και απελευθέρωση δυναμικής μνήμης

Όλη η δυναμική μνήμη στο Object Pascal αντιμετωπίζεται ως ένας συνεχής πίνακας byte, ο οποίος ονομάζεται σωρό.

Η μνήμη για οποιαδήποτε δυναμικά εκχωρημένη μεταβλητή εκχωρείται με τη διαδικασία New. Η παράμετρος για την κλήση αυτής της διαδικασίας είναι ένας πληκτρολογημένος δείκτης. Ως αποτέλεσμα της πρόσβασης, ο δείκτης αποκτά μια τιμή που αντιστοιχεί στη διεύθυνση από την οποία μπορούν να τοποθετηθούν τα δεδομένα. Η τιμή στην οποία δείχνει ο δείκτης, δηλαδή τα πραγματικά δεδομένα που έχουν εκχωρηθεί στο σωρό, υποδεικνύεται από το σύμβολο ^, το οποίο τοποθετείται αμέσως μετά τον δείκτη. Εάν δεν υπάρχει σύμβολο ^ μετά τον δείκτη, τότε αυτό σημαίνει τη διεύθυνση όπου βρίσκονται τα δεδομένα. Έχει νόημα να σκεφτούμε ξανά αυτό που μόλις ειπώθηκε: η τιμή οποιουδήποτε δείκτη είναι μια διεύθυνση και για να υποδείξουμε ότι δεν μιλάμε για τη διεύθυνση, αλλά για τα δεδομένα που βρίσκονται σε αυτήν τη διεύθυνση, τοποθετείται ένα ^ μετά το δείκτη (μερικές φορές αναφέρεται ως δείκτης αποαναφοράς).

Τα δυναμικά εκχωρημένα δεδομένα μπορούν να χρησιμοποιηθούν οπουδήποτε στο πρόγραμμα όπου είναι έγκυρα για σταθερές και μεταβλητές του κατάλληλου τύπου

Η δυναμική μνήμη όχι μόνο μπορεί να αφαιρεθεί από το σωρό, αλλά και να επιστραφεί πίσω. Για να το κάνετε αυτό, χρησιμοποιήστε τη διαδικασία Διάθεσης. Για παράδειγμα, χειριστές

Dispose(pJ);

Dispose(pR);

θα επιστρέψει στο σωρό τη μνήμη που είχε εκχωρηθεί προηγουμένως στους δείκτες pJ και pR (βλ. παραπάνω).

Σημειώστε ότι η διαδικασία Διάθεση (pPtr) δεν αλλάζει την τιμή του δείκτη pPtr, αλλά επιστρέφει μόνο τη μνήμη που είχε συσχετιστεί προηγουμένως με αυτόν τον δείκτη στο σωρό. Ωστόσο, η εκ νέου εφαρμογή της διαδικασίας σε έναν ελεύθερο δείκτη θα οδηγήσει σε σφάλμα χρόνου εκτέλεσης. Ο προγραμματιστής μπορεί να επισημάνει τον ελευθερωμένο δείκτη με τη δεσμευμένη λέξη μηδέν.

1.5 Ψευδώνυμα τύπου

Για οποιοδήποτε τύπο μπορείτε να δηλώσετε όσα ψευδώνυμα θέλετε. Για παράδειγμα:

TMyInteger = Ακέραιος;

Στο μέλλον, το ψευδώνυμο μπορεί να χρησιμοποιηθεί με τον ίδιο τρόπο όπως ο βασικός τύπος:

Mylnt: TMyInteger;

Mylnt:= 2*Round(pi);

Αυτού του είδους τα ψευδώνυμα χρησιμοποιούνται συνήθως για τη βελτίωση της ορατότητας του κώδικα προγράμματος. Ωστόσο, στο Object Pascal μπορείτε να δηλώσετε ψευδώνυμα με ισχυρή πληκτρολόγηση προσθέτοντας τον τύπο δεσμευμένης λέξης πριν από το όνομα του βασικού τύπου:

TMyIntegerType = τύπος Integer;

MylntVar: TMyIntegerType;

Από την άποψη του μεταγλωττιστή, τα δακτυλογραφημένα ψευδώνυμα είναι συμβατά με τον βασικό τύπο σε διάφορα είδη εκφράσεων, αλλά στην πραγματικότητα δηλώνουν έναν νέο τύπο δεδομένων, επομένως δεν μπορούν να χρησιμοποιηθούν ως επίσημες παράμετροι για την κλήση υπορουτίνων αντί για τον βασικό τύπο. Αν, για παράδειγμα, δηλωθεί μια διαδικασία

συνάρτηση MylntFunc(APar: ακέραιος): Ακέραιος;

τότε μια τέτοια έκκληση προς αυτήν

MylntFunc(MylntVar)

θα θεωρηθεί λανθασμένη από τον μεταγλωττιστή.

Τα ισχυρά πληκτρολογημένα ψευδώνυμα αναγκάζουν τον μεταγλωττιστή να δημιουργήσει πληροφορίες τύπου χρόνου εκτέλεσης (RTTI). Αυτές οι πληροφορίες χρησιμοποιούνται συνήθως από το περιβάλλον των Delphi για την υποστήριξη της λειτουργίας διαφόρων τύπων συντακτών.