Welche Arten von Variablen werden in Pascal verwendet? Datentypen in Pascal (Variablen, Konstanten), ihre Typen und Beschreibung

Zu den Ordinaltypen gehören (siehe Abbildung 4.1) Ganzzahl-, Logik-, Zeichen-, Aufzählungs- und Bereichstypen. Auf jeden von ihnen ist die Funktion ORD(X) anwendbar, die die Ordnungszahl des Werts des Ausdrucks X zurückgibt. Bei ganzzahligen Typen gibt die Funktion ORD(X) den Wert von X selbst zurück, d. h. ORD(X) = X für X, das zu einem beliebigen Shell-Typ gehört. Die Anwendung von ORD(X) auf boolesche, Zeichen- und Aufzählungstypen erzeugt eine positive Ganzzahl im Bereich von 0 bis 1 (boolescher Wert), 0 bis 155 (Zeichen) und 0 bis 65535 (Aufzählung). Ein Bereichstyp behält alle Eigenschaften des zugrunde liegenden Ordinaltyps bei, sodass das Ergebnis der Anwendung der ORD(X)-Funktion auf ihn von den Eigenschaften dieses Typs abhängt.

Sie können Funktionen auch auf Ordinaltypen anwenden:

PRED (X) – gibt den vorherigen Wert des Ordinaltyps zurück (den Wert, der der Ordinalzahl ORD(X) – 1 entspricht), d. h.

ORD(PRED(X)) = ORD(X) - 1;

SUCC (X) – gibt den nächsten Ordnungswert zurück, der mit der Ordnungszahl ORD(X) +1 übereinstimmt, d. h.

ORD(SUCC(X)) = ORD(X) + 1.

Zum Beispiel, wenn ein Programm eine Variable definiert

dann gibt die Funktion PRED(C) den Wert „4“ zurück und die Funktion SUCC(C) gibt den Wert „6“ zurück.

Wenn wir uns einen Ordinaltyp als eine geordnete Menge von Werten vorstellen, die von links nach rechts ansteigen und ein bestimmtes Segment auf der Zahlenachse einnehmen, dann ist die Funktion PRED(X) nicht für die linke Seite und SUCC(X) für die rechte Seite definiert Ende dieses Segments.

Ganze Typen. Der Bereich möglicher Werte ganzzahliger Typen hängt von ihrer internen Darstellung ab, die ein, zwei oder vier Bytes umfassen kann. In der Tabelle In Abb. 4.1 zeigt den Namen von Integer-Typen, die Länge ihrer internen Darstellung in Bytes und den Bereich möglicher Werte.

Tabelle 4.1

Bei der Verwendung von Prozeduren und Funktionen mit ganzzahligen Parametern sollten Sie sich an der „Verschachtelung“ von Typen orientieren, d. h. Überall dort, wo WORD verwendet werden kann, kann BYTE verwendet werden (aber nicht umgekehrt), LONGINT „enthält“ INTEGER, was wiederum SHORTINT einschließt.

Die Liste der auf Ganzzahltypen anwendbaren Prozeduren und Funktionen ist in Tabelle 4.2 aufgeführt. Briefe b, s, w, i, l Ausdrücke vom Typ BYTE, SHORTINT, WORD, INTEGER und LONGINT werden jeweils bezeichnet, x ist ein Ausdruck eines dieser Typen; Briefe vb, vs, vw, vi, vl, vx bezeichnen Variablen der entsprechenden Typen. Ein optionaler Parameter wird in eckigen Klammern angegeben.

Tabelle 4.2

Standardverfahren und -funktionen, die auf ganze Typen anwendbar sind
Appellieren Ergebnistyp Aktion
abs(x) X Gibt Modul x zurück
chr(b) Verkohlen Gibt ein Zeichen anhand seines Codes zurück
dec(vx[, i]) - Verringert den Wert von vx um i und in Abwesenheit von i um 1
inc(vx[, i]) - Erhöht den Wert von vx um i und in Abwesenheit von i um 1
Hallo ich) Byte Gibt das High-Byte des Arguments zurück
Hallo(w) Dasselbe Dasselbe
Lo(i) " Gibt das Low-Byte des Arguments zurück
Niedrig) " Dasselbe
ungerade(l) Boolescher Wert Gibt True zurück, wenn das Argument eine ungerade Zahl ist
Zufällig (w) Identisch mit Parameter Gibt eine Pseudozufallszahl zurück, die gleichmäßig im Bereich 0...(w-l) verteilt ist.
sgr(x) X Gibt das Quadrat des Arguments zurück
tausch(i) Ganze Zahl Vertauscht Bytes in einem Wort
tauschen(w) Wort

Bei der Arbeit mit Ganzzahlen entspricht der Typ des Ergebnisses dem Typ der Operanden, und wenn es sich bei den Operanden um unterschiedliche Ganzzahltypen handelt, dem Typ des Operanden mit der maximalen Potenz (maximaler Wertebereich). Ein möglicher Überlauf des Ergebnisses wird in keiner Weise kontrolliert, was zu Missverständnissen führen kann, zum Beispiel:

a:= 32767; (Maximal möglicher INTEGER-Wert)

x:= a + 2; (Überlauf beim Auswerten dieses Ausdrucks !}

y:= LongInt(a)+2; (Kein Überlauf nach der Umwandlung der Variablen in einen leistungsfähigeren Typ)

WriteLn(x:10:0, y:10:0)

Als Ergebnis der Ausführung des Programms erhalten wir

Boolescher Typ. Boolesche Werte können eine der vorab deklarierten Konstanten FALSE oder TRUE sein. Für sie gelten die Regeln:

FALSCH< True;

succ(False)= True;

pred(True) = False.

Da der boolesche Typ ein Ordinaltyp ist, kann er beispielsweise in einem zählbaren Typoperator verwendet werden:

for 1:= False to True do ....

Zeichentyp. Der Wert eines Zeichentyps ist die Menge aller PC-Zeichen. Jedem Zeichen wird eine Ganzzahl im Bereich 0...255 zugewiesen. Diese Zahl dient als Code für die interne Darstellung des Symbols; sie wird von der ORD-Funktion zurückgegeben.

Zur Kodierung wird ASCII-Code verwendet ( Amerikanischer Standardcode für den Informationsaustausch- American Standard Code for Information Interchange). Dies ist ein 7-Bit-Code, d.h. Es können nur 128 Zeichen im Bereich von 0 bis 127 codiert werden. Gleichzeitig können Sie in dem 8-Bit-Byte, das für die Speicherung eines Zeichens in Turbo Pascal vorgesehen ist, doppelt so viele Zeichen im Bereich von 0 bis 255 codieren Die erste Hälfte der Zeichen PC mit den Codes 0...127 entspricht dem ASCII-Standard (Tabelle 4.3). Die zweite Hälfte der Zeichen mit den Codes 128...255 ist nicht durch den starren Rahmen des Standards eingeschränkt und kann auf verschiedenen PC-Typen geändert werden (Anhang 2 zeigt einige gängige Kodierungsoptionen für diese Zeichen).

Tabelle 4.3

Zeichenkodierung nach dem ASCII-Standard
Code Symbol Code Symbol Code Symbol Code Symbol
NUL B.L. ® "
ZON ! A A
STX " IN B
ETX # MIT Mit
EOT $ D D
ENQ % E e
FRAGEN & F F
BEL " G G
B.S. ( H H
NT ) ICH ich
LF * J J
VT + k k
FF , L ich
CR - M M
ALSO . N N
S.I. / UM
DEL P P
DC1 Q Q
DC2 R R
DC3 S S
DC4 T T
N.A.K. U u
SYN V V
ETB w w
DÜRFEN X X
E.M. U U
SUB : z z
ESC / [ {
FS < \ l
G.S. = ] }
R.S. > ^ ~
UNS ? - N

Zeichen mit den Codes 0...31 beziehen sich auf Servicecodes. Wenn diese Codes im Zeichentext des Programms verwendet werden, gelten sie als Leerzeichen. Bei der Verwendung in E/A-Operationen können sie die folgende unabhängige Bedeutung haben:

Symbol Code Bedeutung
BEL Anruf; Die Anzeige dieses Symbols wird von einem akustischen Signal begleitet
NT Horizontale Tabellierung; Wenn es auf dem Bildschirm angezeigt wird, bewegt es den Cursor an eine Position, die ein Vielfaches von 8 plus 1 ist (9, 17, 25 usw.).
LF Zeilenübersetzung; Bei der Anzeige auf dem Bildschirm werden alle nachfolgenden Zeichen ab derselben Position, jedoch in der nächsten Zeile, ausgegeben
VT Vertikale Registerkarte; Bei der Anzeige auf dem Bildschirm wird es durch ein Sonderzeichen ersetzt
FF Seitenlauf; Bei der Ausgabe auf einem Drucker bildet es eine Seite; bei der Ausgabe auf dem Bildschirm wird es durch ein Sonderzeichen ersetzt
CR Wagenrücklauf; Eingabe erfolgt durch Drücken der Eingabetaste (bei Eingabe mit READ oder READLN bedeutet dies den „Enter“-Befehl und wird nicht im Eingabepuffer abgelegt; bei der Ausgabe bedeutet es den Befehl „Ausgabe vom Anfang der aktuellen Zeile fortsetzen“)
SUB Ende der Datei; Eingabe über die Tastatur durch Drücken von Strg-Z; Bei der Ausgabe wird es durch ein Sonderzeichen ersetzt
SSC Feierabend; Eingabe über die Tastatur durch Drücken der ESC-Taste; Bei der Ausgabe wird es durch ein Sonderzeichen ersetzt

Relationale Operationen sowie integrierte Funktionen sind auf den CHAR-Typ anwendbar: СНR(В) – Funktion des CHAR-Typs; wandelt einen Ausdruck B vom Typ BYTE in ein Zeichen um und gibt es mit seinem Wert zurück;

UPCASE(CH) – Funktion vom Typ CHAR; Gibt den Großbuchstaben zurück, wenn CH ein lateinischer Kleinbuchstabe ist, andernfalls wird das CH-Zeichen selbst zurückgegeben, zum Beispiel:

cl:= UpCase("s" ;

c2:= UpCase ("Ф") ;

WriteLn(cl," ",c2)

Da die UPCASE-Funktion kein Kyrillisch verarbeitet, ist das Ergebnis dieser Ausführung

Programme werden auf dem Bildschirm angezeigt

Aufzählungstyp. Ein Aufzählungstyp wird durch eine Aufzählung der Werte spezifiziert, die er empfangen kann. Jeder Wert wird durch einen Bezeichner benannt und befindet sich in einer Liste in Klammern, zum Beispiel:

Farben =(rot, weiß, blau);

Durch die Verwendung von Aufzählungstypen werden Programme visueller. Wenn das Programm beispielsweise Daten verwendet, die den Monaten des Jahres zugeordnet sind, dann das folgende Fragment des Programms:

TypeMonth=(Jan,Feb,Mär,Apr,Mai,Jun,Jul,Aug,Sep,Okt,Nov,Dez);

Monat: TypeMonth;

if Month = Aug then WriteLn("Es wäre schön, ans Meer zu gehen!");

Es wäre, sehen Sie, sehr klar. Ach! In Turbo Pascal können Sie in Bezeichnern kein Kyrillisch verwenden, daher sind wir gezwungen, so zu schreiben:

TypeMonth=(jan,feb,mar,may,jun,jul,aug,sep,oct,nov,dec);

Monat: TypeMonth;

ifmonth = aug then WriteLn("Es wäre schön, ans Meer zu gehen!");

Die Entsprechung zwischen den Werten eines Aufzählungstyps und den Ordnungszahlen dieser Werte wird durch die Aufzählungsreihenfolge hergestellt: Der erste Wert in der Liste erhält die Ordnungszahl 0, der zweite - 1 usw. Die maximale Kapazität eines Aufzählungstyps beträgt 65536 Werte, sodass ein Aufzählungstyp tatsächlich eine bestimmte Teilmenge des gesamten WORD-Typs definiert und als kompakte Deklaration einer Gruppe ganzzahliger Konstanten mit den Werten 0, 1 usw. betrachtet werden kann.

Die Verwendung von Aufzählungstypen erhöht die Zuverlässigkeit von Programmen, da Sie die Werte steuern können, die entsprechende Variablen erhalten. Es seien beispielsweise die folgenden Aufzählungstypen gegeben:

Farben = (schwarz, rot, weiß);

ordenal= (eins, zwei, drei);

Tage = (Montag, Dienstag, Mittwoch);

In Bezug auf Macht und interne Repräsentation sind alle drei Typen gleichwertig:

ord(schwarz)=0, ..., ord(weiß)=2,

ord(eins)=0, ...ord(drei)=2,

ord(Montag)=0, ...ord(Mittwoch)=2.

Allerdings, wenn die Variablen definiert sind

col:colors; num:ordenal;

dann sind die Operatoren erlaubt

num:= succ(two);

Tag:= Pred(Dienstag);

aber inakzeptabel

Wie bereits erwähnt, besteht eine Eins-zu-eins-Entsprechung zwischen den Werten eines Aufzählungstyps und der Menge der ganzen Zahlen, die durch die Funktion ORD(X) angegeben wird. Turbo Pascal ermöglicht auch die umgekehrte Konvertierung: Jeder Ausdruck vom Typ WORD kann in einen Wert eines Aufzählungstyps umgewandelt werden, solange der Wert des ganzzahligen Ausdrucks die Potenz1™ des Aufzählungstyps nicht überschreitet. Diese Konvertierung wird durch die Verwendung einer automatisch deklarierten Funktion mit dem Namen des Aufzählungstyps erreicht (siehe Abschnitt 4.4). Für die oben besprochene Typdeklaration sind beispielsweise die folgenden Zuweisungen äquivalent:

col:= farben(0);

Natürlich, Auftrag

wird inakzeptabel sein.

Variablen jedes Aufzählungstyps können deklariert werden, ohne diesen Typ zuerst zu deklarieren, zum Beispiel:

col: (schwarz, weiß, grün);

Typenbereich. Ein Bereichstyp ist eine Teilmenge seines Basistyps, der ein beliebiger Ordinaltyp außer einem Bereichstyp sein kann. Ein Bereichstyp wird durch die Grenzen seiner Werte innerhalb des Basistyps definiert:

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

Hier<мин.знач. >- Mindestwert des Typbereichs;

<макс.знач.>- sein Maximalwert.

Zum Beispiel:

Ziffer = „0“..“9“;

Der Bereichstyp muss nicht im Abschnitt TYPE beschrieben werden, sondern kann direkt bei der Deklaration einer Variablen angegeben werden, zum Beispiel:

Ichr: „A“..“Z“;.

Bei der Bestimmung eines Bereichstyps müssen Sie die folgenden Regeln beachten:

  • Zwei „..“-Zeichen werden als ein Zeichen behandelt, daher sind keine Leerzeichen dazwischen zulässig.
  • Der linke Rand des Bereichs sollte seinen rechten Rand nicht überschreiten. Ein Bereichstyp erbt alle Eigenschaften seines Basistyps, jedoch mit den Einschränkungen seiner geringeren Leistung. Insbesondere, wenn eine Variable definiert ist

Tage = (mo,tu,we,th,fr,sa,su);

WeekEnd = sa .. su;

dann gibt ORD(W) den Wert 5 zurück, während PRED(W) zu einem Fehler führt.

Die Turbo Pascal-Standardbibliothek enthält zwei Funktionen, die die Arbeit mit Bereichstypen unterstützen:

HIGH(X) – gibt den Maximalwert des Bereichstyps zurück, zu dem die Variable X gehört;

LOW(X) – gibt den Mindestwert des Bereichstyps zurück.

Das folgende kurze Programm druckt die Zeile

WriteLn(Low(k),"..",High(k))

Die Menge der ganzen Zahlen ist unendlich, aber wir können immer die Anzahl der Bits wählen, um jede ganze Zahl darzustellen, die bei der Lösung eines bestimmten Problems auftritt. Die Menge der reellen Zahlen ist nicht nur unendlich, sondern auch stetig. Egal wie viele Bits wir nehmen, wir werden unweigerlich auf Zahlen stoßen, die keine exakte Darstellung haben. Gleitkommazahlen sind eine Möglichkeit, reelle Zahlen darzustellen, was einen Kompromiss zwischen Genauigkeit und Bereich akzeptierter Werte darstellt.

Eine Gleitkommazahl besteht aus einer Menge einzelner Ziffern, die herkömmlicherweise in Vorzeichen, Exponent und Mantisse unterteilt sind. Exponent und Mantisse sind ganze Zahlen, die zusammen mit dem Vorzeichen die folgende Darstellung einer Gleitkommazahl ergeben:

Mathematisch wird es so geschrieben:

(-1) s × M × B E, wobei s das Vorzeichen, B die Basis, E der Exponent und M die Mantisse ist.

Die Basis bestimmt das Ziffern-Zahlensystem. Es ist mathematisch erwiesen, dass Gleitkommazahlen mit der Basis B=2 (Binärdarstellung) am resistentesten gegen Rundungsfehler sind, daher werden in der Praxis nur die Basen 2 und seltener 10 angetroffen. Für die weitere Darstellung gehen wir immer von B= aus 2, und die Formel für eine Zahl mit Gleitkomma sieht folgendermaßen aus:

(-1) s × M × 2 E

Was ist Mantisse und Ordnung? Mantisse ist eine Ganzzahl fester Länge, die die höchstwertigen Bits einer reellen Zahl darstellt. Nehmen wir an, unsere Mantisse besteht aus drei Bits (|M|=3). Nehmen wir zum Beispiel die Zahl „5“, die im Binärsystem 101 2 entspricht. Das höchstwertige Bit entspricht 2 2 =4, das mittlere Bit (das gleich Null ist) ist 2 1 =2 und das niedrigstwertige Bit ist 2 0 =1. Befehl– Dies ist die Potenz der Basis (zwei) der höchsten Ziffer. In unserem Fall ist E=2. Es ist praktisch, solche Zahlen in der sogenannten „wissenschaftlichen“ Standardform zu schreiben, zum Beispiel „1,01e+2“. Es ist sofort klar, dass die Mantisse aus drei Zeichen besteht und die Reihenfolge zwei ist.

Nehmen wir an, wir möchten eine Bruchzahl erhalten, indem wir dieselben 3 Bits der Mantisse verwenden. Wir können dies erreichen, wenn wir beispielsweise E=1 annehmen. Dann wird unsere Zahl gleich sein

1,01e+1 = 1×2 1 +0×2 0 +1×2 -1 =2+0,5=2,5

Offensichtlich kann auf diese Weise dieselbe Zahl auf unterschiedliche Weise dargestellt werden. Betrachten wir ein Beispiel mit der Länge der Mantisse |M|=4. Die Zahl „2“ kann wie folgt dargestellt werden:

2 = 10 (binär) = 1,000e+1 = 0,100e+2 = 0,010e+3.

Daher wurden bereits in den allerersten Maschinen Zahlen im sogenannten dargestellt normalisierte Form, wenn das erste Bit der Mantisse immer als eins angenommen wurde.

Dies spart ein Bit (da das implizite nicht im Speicher gespeichert werden muss) und stellt sicher, dass die Zahl eindeutig dargestellt wird. In unserem Beispiel hat „2“ eine einzelne Darstellung („1.000e+1“) und die Mantisse wird als „000“ im Speicher gespeichert, weil die führende Einheit ist implizit impliziert. Bei der normalisierten Darstellung von Zahlen entsteht jedoch ein neues Problem: Es ist unmöglich, Null in dieser Form darzustellen.

  • Datenanalyse mit den Befehlen Parameterauswahl und Lösungssuche
  • Analyse und Interpretation experimenteller psychologischer Forschungsdaten.
  • Analyse der Quelldaten. Technische Standards für Stadtstraßen.
  • ANALYSE DER ERHALTENEN DATEN. Eine Entscheidung darüber treffen, ob die Eigenschaften der Wasserversorgung für die Bedürfnisse des Bewässerungssystems ausreichend oder unzureichend sind.
  • Kommunikationsleitungsausrüstung: Datenübertragungsausrüstung, Endgeräteausrüstung, Zwischenausrüstung.

  • Die Lektion behandelt die wichtigsten Standarddatentypen in Pascal, das Konzept einer Variablen und einer Konstante; erklärt, wie man mit arithmetischen Operationen arbeitet

    Pascal ist eine typisierte Programmiersprache. Das bedeutet, dass die Variablen, die Daten speichern, von einem bestimmten Datentyp sind. Diese. Das Programm muss direkt angeben, welche Daten in einer bestimmten Variablen gespeichert werden können: Textdaten, numerische Daten, wenn numerisch, dann Ganzzahl oder Bruchzahl usw. Dies ist in erster Linie notwendig, damit der Computer „weiß“, welche Operationen mit diesen Variablen durchgeführt werden können und wie er sie richtig ausführt.

    Beispielsweise ist das Hinzufügen von Textdaten, oder wie es in der Programmierung korrekt heißt – Verkettung – die übliche Zusammenführung von Zeichenfolgen, während das Hinzufügen numerischer Daten bitweise erfolgt, außerdem werden Bruch- und Ganzzahlen auch unterschiedlich addiert. Dasselbe gilt auch für andere Operationen.

    Schauen wir uns die häufigsten Datentypen in Pascal an.

    Ganzzahlige Datentypen in Pascal

    Typ Reichweite Benötigter Speicher (Bytes)
    Byte 0..255 1
    Kurzschluss -128..127 1
    ganze Zahl -32768.. 32767 2
    Wort 0..65535 2
    Longint -2147483648..2147483647 4

    Das müssen Sie beim Schreiben von Programmen in Pascal berücksichtigen ganze Zahl(übersetzt aus dem Englischen als Ganzes) wird am häufigsten verwendet, da der Wertebereich am gefragtesten ist. Wenn ein größerer Bereich benötigt wird, verwenden Sie Longint(lange Ganzzahl, aus dem Englischen übersetzt als lange Ganzzahl). Typ Byte In Pascal wird es verwendet, wenn keine Notwendigkeit besteht, mit negativen Werten zu arbeiten, dasselbe gilt für den Typ Wort(nur der Wertebereich ist hier deutlich größer).

    Beispiele dafür, wie Variablen in Pascal beschrieben (deklariert) werden:

    Programm a1; var x,y:integer; (Ganzzahltyp) myname:string; (String-Typ) begin x:=1; y:=x+16; meinname:="Peter"; writeln("name:",meinname, ", alter:", y) end.

    Ergebnis:
    Name: Peter, Alter: 17

    Kommentare in Pascal

    Beachte wie Kommentare werden in Pascal verwendet. In den Beispielkommentaren, d.h. Servicetext, der für den Compiler „nicht sichtbar“ ist, wird in geschweifte Klammern eingeschlossen. In der Regel werden von Programmierern Kommentare abgegeben, um Codeteile zu erläutern.

    Aufgabe 3. Die Bevölkerung Moskaus beträgt a = 9.000.000 Einwohner. Die Bevölkerung von New Vasyuki beträgt b=1000 Einwohner. Schreiben Sie ein Programm, das den Unterschied in der Einwohnerzahl zweier Städte ermittelt. Verwenden Sie Variablen

    Reale Datentypen in Pascal

    Reelle Zahlen sind in Pascal und in der Programmierung im Allgemeinen die Bezeichnung für Bruchzahlen.

    Typ Reichweite Benötigter Speicher (Bytes)
    real 2,9 * 10E-39 .. 1,7 * 10E38 6
    einzel 1,5 * 10 E-45 .. 3,4 * 10E38 4
    doppelt 5 * 10E-324 .. 1,7 * 10E308 8
    erweitert 1,9 * 10E-4951 .. 1,1 * 10E4932 10

    Der reelle Typ in Pascal ist der am häufigsten verwendete reelle Typ.

    Die oben genannten wurden vorgestellt einfache Datentypen in Pascal, darunter:

    • Ordinal
    • Ganz
    • Rätsel
    • Charakter
    • Auflistbar
    • Intervall
    • Real

    Um die Werte von Variablen vom realen Typ anzuzeigen, wird normalerweise eine formatierte Ausgabe verwendet:

  • Das Format verwendet entweder eine Zahl und gibt die Anzahl der dieser Zahl zugeordneten Positionen in Exponentialform an.
  • p:=1234,6789; Writeln(p:6:2); (1234,68)

    Neben einfachen Typen verwendet die Sprache auch strukturierte Datentypen und Zeiger, das Gegenstand der folgenden Lektionen über Pascal sein wird.

    Konstanten in Pascal

    Oftmals ist in einem Programm im Voraus bekannt, dass eine Variable einen bestimmten Wert annimmt und diesen während der gesamten Ausführung des Programms nicht ändert. In diesem Fall müssen Sie eine Konstante verwenden.

    Die Deklaration einer Konstante in Pascal erfolgt vor der Deklaration von Variablen (vor dem Dienstwort var) und sieht folgendermaßen aus:

    Ein Beispiel für eine Konstantenbeschreibung in Pascal:

    1 2 3 4 5 6 const x= 17 ; var meinname: string ; begin myname: = "Peter" ; writeln ("name: " , meinname, ", alter: " , x) end .

    const x=17; var meinname:string; begin myname:="Peter"; writeln("name:",meinname, ", alter:", x) end.

    „Schöne“ Ausgabe von ganzen Zahlen und reellen Zahlen

    Um sicherzustellen, dass nach der Anzeige der Werte von Variablen Einrückungen erfolgen, damit die Werte nicht miteinander „verschmelzen“, ist es üblich, durch einen Doppelpunkt anzugeben, wie viele Zeichen zur Anzeige bereitgestellt werden müssen Wert:


    Arithmetische Operationen in Pascal

    Reihenfolge der Operationen

    1. Auswertung von Ausdrücken in Klammern;
    2. Multiplikation, Division, Div, Mod von links nach rechts;
    3. Addition und Subtraktion von links nach rechts.

    Pascal-Standardarithmetikverfahren und -funktionen

    Hier lohnt es sich, näher auf einige Rechenoperationen einzugehen.

    • Die Inc-Operation in Pascal, ausgesprochen Inkrement, ist ein Standard-Pascal-Verfahren, das eine Erhöhung um eins bedeutet.
    • Beispiel für eine Inc-Operation:

      x:=1; inc(x); (Erhöht x um 1, d. h. x=2) writeln(x)

      Komplexere Anwendung des Inc-Verfahrens:
      Inc(x,n) wobei x ein Ordinaltyp und n ein Ganzzahltyp ist; Prozedur inc erhöht x um n.

    • Die Dec-Prozedur in Pascal funktioniert ähnlich: Dec(x) – verringert x um 1 (dekrementiert) oder Dec(x,n) – verringert x um n.
    • Der abs-Operator repräsentiert den Modul einer Zahl. Es funktioniert so:
    • a: =- 9; b:=abs(a); (b=9)

      a:=-9; b:=abs(a); (b=9)

    • Der div-Operator wird in Pascal häufig verwendet, da bei einer Reihe von Aufgaben die Operation einer gesamten Division erforderlich ist.
    • Auch der Rest der Division oder der Mod-Operator in Pascal ist zur Lösung einer Reihe von Problemen unverzichtbar.
    • Bemerkenswert ist Pascals Standard-Odd-Funktion, die bestimmt, ob eine ganze Zahl ungerade ist. Das heißt, es gibt „true“ für ungerade Zahlen und „false“ für gerade Zahlen zurück.
    • Ein Beispiel für die Verwendung der ungeraden Funktion:

      var x:integer; begin x:=3; writeln(sqr(x)); (Antwort 9) Ende.

    • Potenzierungsoperation in Pascal fehlt als solches. Aber um eine Zahl zu potenzieren, können Sie die exp-Funktion verwenden.
    • Die Formel lautet: exp(ln(a)*n), wobei a eine Zahl und n ein Grad (a>0) ist.

      Im Pascal-ABC-Compiler ist die Potenzierung jedoch viel einfacher:

      var x:integer; begin x:=9; writeln(sqrt(x)); (Antwort 3) Ende.

    Aufgabe 4. Die Abmessungen einer Streichholzschachtel sind bekannt: Höhe – 12,41 cm, Breite – 8 cm, Dicke – 5 cm. Berechnen Sie die Fläche des Bodens der Schachtel und ihr Volumen
    (S=Breite*Dicke, V=Fläche*Höhe)

    Aufgabe 5. Im Zoo gibt es drei Elefanten und einige Kaninchen, wobei die Anzahl der Kaninchen häufig wechselt. Ein Elefant soll einhundert Karotten am Tag fressen, ein Kaninchen zwei. Jeden Morgen teilt der Tierpfleger dem Computer die Anzahl der Kaninchen mit. Als Reaktion darauf muss der Computer dem Bediener die Gesamtzahl der Karotten mitteilen, die heute an die Kaninchen und Elefanten verfüttert werden müssen.

    Aufgabe 6. Es ist bekannt, dass X kg Süßigkeiten kostet A Rubel Bestimmen Sie, wie viel es kostet j kg dieser Süßigkeiten und auch, für wie viele Kilogramm Süßigkeiten man sie kaufen kann k Rubel Alle Werte werden vom Benutzer eingegeben.

    Der Datenbegriff ist einer der Schlüsselbegriffe in der Programmierung und in der Informatik im Allgemeinen. Grob gesagt handelt es sich bei Daten in der Informatik um Informationen, die sich über einen bestimmten Zeitraum in einem Zustand der Speicherung, Verarbeitung oder Übertragung befinden. In Turingmaschinen haben Informationen einen Typ, der wiederum von der Art der Information abhängt.

    Datentypen in Pascal definieren die möglichen Werte von Variablen, Konstanten, Ausdrücken und Funktionen. Sie sind integriert und benutzerdefiniert. Integrierte Typen sind zunächst in der Programmiersprache vorhanden und benutzerdefinierte Typen werden vom Programmierer erstellt.

    Je nach Art der Darstellung und Verarbeitung gibt es folgende Datentypen:

    • einfach
    • strukturiert
    • Hinweise
    • Objekte
    • Verfahren

    In diesem Artikel werden nur die einfachsten Datentypen betrachtet, da Ihr Programm in der Anfangsphase des Trainings beispielsweise einfacher auf Dateien und Datensätze verzichten kann als auf Integer- oder String-Variablen.

    Integer-Typ

    Dazu gehören mehrere Integer-Typen, die sich im Wertebereich, der Anzahl der zu ihrer Speicherung zugewiesenen Bytes und dem Wort, mit dem der Typ deklariert wird, unterscheiden.

    Typ Reichweite Größe in Bytes
    Kurzschluss -128…127 1
    ganze Zahl -32 768…32 767 2
    Longint -2 147 483 648…2 147 483 647 4
    Byte 0…255 1
    Wort 0…65 535 2

    Sie können im Abschnitt „Var“ eine Ganzzahlvariable deklarieren, zum Beispiel:

    Alle arithmetischen und logischen Operationen können mit Variablen dieser Kategorie ausgeführt werden, mit Ausnahme der Division (/), die einen realen Typ erfordert. Möglicherweise gelten auch einige Standardfunktionen und -verfahren.

    Echter Typ

    In Pascal gibt es folgende reale Datentypen:

    Typ Reichweite Speicher, Byte Anzahl an Ziffern
    Real 2,9e-39 … 1,7e38 6 11-12
    Einzel 1,5e-45 … 3,4e38 4 7-8
    Doppelt 5.0e-324…1.7e308 8 15-16
    Erweitert 3.4e-4932 … 1.1e493 10 19-20
    Komp -9.2e63…(9.2e63)-1 8 19-20

    Auf ihnen können mehr Operationen und Funktionen ausgeführt werden als auf ganzen Zahlen. Diese Funktionen geben beispielsweise ein echtes Ergebnis zurück:

    sin(x) – Sinus;

    cos(x) – Kosinus;

    arctan(x) – Arcustangens;

    ln(x) – natürlicher Logarithmus;

    sqrt(x) – Quadratwurzel;

    exp(x) – Exponent;

    Boolescher Typ

    Eine Variable eines booleschen Datentyps kann nur zwei Werte annehmen: wahr und falsch. Dabei entspricht true dem Wert 1 und false entspricht Null. Sie können eine boolesche Variable wie folgt deklarieren:

    Vergleiche und logische Operationen können für Daten dieses Typs durchgeführt werden: not, and, or, xor.

    Zeichentyp

    Ein Zeichendatentyp ist eine Sammlung von Zeichen, die in einem bestimmten Computer verwendet werden. Eine Variable dieses Typs nimmt den Wert eines dieser Zeichen an und belegt 1 Byte im Computerspeicher. Wort Verkohlen definiert einen Wert dieses Typs. Es gibt mehrere Möglichkeiten, eine Zeichenvariable (oder -konstante) zu schreiben:

    1. als einzelnes Zeichen, eingeschlossen in Apostrophe: „W“, „V“, „p“;
    2. durch Angabe des Zeichencodes, dessen Wert im Bereich von 0 bis 255 liegen muss.
    3. unter Verwendung der ^K-Konstruktion, wobei K der Steuerzeichencode ist. Der Wert von K muss 64 größer sein als der entsprechende Steuerzeichencode.

    Auf Werte eines Zeichendatentyps sind relationale Operationen und die folgenden Funktionen anwendbar:

    Erfolg(x)- gibt das nächste Zeichen zurück;

    Pred(x)- gibt das vorherige Zeichen zurück;

    Ord(x)- gibt den Wert des Zeichencodes zurück;

    Chr(x)- gibt den Wert eines Symbols anhand seines Codes zurück;

    UpCase(x)- Wandelt Buchstaben aus dem Intervall „a“ bis „z“ in Großbuchstaben um.

    Um effektiv mit einem Zeichentyp zu arbeiten, empfehle ich die Verwendung von .

    String-Typ

    Eine Zeichenfolge in Pascal ist eine in Apostrophe eingeschlossene Folge von Zeichen und wird durch das Wort bezeichnet Zeichenfolge. Die Anzahl der Zeichen (Zeilenlänge) darf 255 nicht überschreiten. Wird die Länge der Zeile nicht angegeben, wird diese automatisch auf 255 Zeichen ermittelt. Die allgemeine Form einer String-Variablen-Deklaration sieht folgendermaßen aus:

    Var<имя_переменной>:string[<длина строки>];

    Jedes Zeichen in einer Zeile hat seinen eigenen Index (Nummer). Der Index des ersten Bytes ist 0, aber es speichert nicht das erste Zeichen, sondern die Länge der gesamten Zeichenfolge, was bedeutet, dass eine Variable dieses Typs 1 Byte mehr einnimmt als die Anzahl der darin enthaltenen Variablen. Die Nummer des ersten Zeichens ist 1. Wenn wir beispielsweise die Zeichenfolge S=‘stroka’ haben, dann ist S=s;. In einer der folgenden Lektionen wird der String-Datentyp genauer besprochen.

    Aufgezählter Datentyp

    Ein aufgezählter Datentyp stellt eine begrenzte Anzahl von Bezeichnern dar. Diese Bezeichner werden in Klammern eingeschlossen und durch Kommas getrennt.

    Typ Day=(Montag, Dienstag, Mittwoch, Donnerstag, Freitag, Samstag, Sonntag);

    Variable A kann nur die im Abschnitt Typ angegebenen Werte annehmen. Sie können im Var-Abschnitt auch eine Variable vom Typ Aufzählung deklarieren:

    Var A: (Montag, Dienstag);

    Auf diesen Typ sind relationale Operationen anwendbar, und dieser Montag ist vorbestimmt

    Intervalldatentyp

    Wenn es erforderlich ist, einen Wertebereich anzugeben, wird in solchen Situationen der Intervalldatentyp verwendet. Die für die Deklaration verwendete Konstruktion ist m..n, Wo M ist der minimale (Anfangs-)Wert und N– maximal (endgültig); Dabei sind m und n Konstanten, die vom Typ Ganzzahl, Zeichen, Aufzählung oder Boolescher Typ sein können. Werte vom Typ Intervall können sowohl im Abschnitt „Typen“ als auch im Abschnitt „Variablenbeschreibung“ beschrieben werden.

    Generelle Form:

    TYP<имя_типа> = <мин. значение>..<макс. значение>;

    Bundesamt für Bildung

    Aufsatz

    „DATENTYPEN IN PASCAL“

    1. Datentypen

    Alle Daten, d.h. Konstanten, Variablen, Eigenschaften, Funktionswerte oder Ausdrücke werden durch ihre Typen charakterisiert. Ein Typ definiert die Menge gültiger Werte, die ein Objekt haben kann, sowie die Menge gültiger Operationen, die auf es angewendet werden können. Darüber hinaus bestimmt der Typ auch das Format der internen Darstellung der Daten im PC-Speicher.

    Generell zeichnet sich die Object Pascal-Sprache durch eine verzweigte Struktur von Datentypen aus (Abb. 1.1). Die Sprache bietet einen Mechanismus zum Erstellen neuer Typen, dank dem die Gesamtzahl der in einem Programm verwendeten Typen beliebig groß sein kann.

    Die im Programm verarbeiteten Daten sind in Variablen, Konstanten und Literale unterteilt:

    Konstanten stellen Daten dar, deren Werte im Konstantendeklarationsabschnitt festgelegt sind und sich während der Programmausführung nicht ändern.

    Variablen werden im Abschnitt zur Variablendeklaration deklariert, erhalten aber im Gegensatz zu Konstanten ihre Werte während der Programmausführung und diese Werte können geändert werden. Auf Konstanten und Variablen kann mit Namen verwiesen werden.

    Wörtlich hat keinen Bezeichner und wird direkt durch den Wert im Programmtext dargestellt.

    Typ definiert den Satz von Werten, den Datenelemente annehmen können, und den Satz von Operationen, die für sie zulässig sind.

    Dieses und die vier folgenden Kapitel enthalten detaillierte Beschreibungen jedes Typs.

    1.1 Einfache Typen

    Zu den einfachen Typen gehören Ordinal-, Real- und Datetime-Typen.

    Ordnungstypen unterscheiden sich dadurch, dass jeder von ihnen eine endliche Anzahl möglicher Werte hat. Diese Werte können auf eine bestimmte Weise geordnet werden (daher der Name der Typen) und daher kann jeder von ihnen einer bestimmten Ganzzahl zugeordnet werden – der Ordnungszahl des Werts.

    Echte Typen Streng genommen gibt es auch eine endliche Anzahl von Werten, die durch das Format der internen Darstellung einer reellen Zahl bestimmt wird. Die Anzahl der möglichen Werte realer Typen ist jedoch so groß, dass es nicht möglich ist, jedem von ihnen eine ganze Zahl (seine Zahl) zuzuordnen.

    Datum-Uhrzeit-Typ Entwickelt, um Datum und Uhrzeit zu speichern. Tatsächlich wird für diese Zwecke das echte Format verwendet.

    1.1.1 Ordinaltypen

    Zu den Ordinaltypen gehören (siehe Abbildung 1.1) Ganzzahl-, Logik-, Zeichen-, Aufzählungs- und Bereichstypen. Auf jede davon kann die Funktion Ord(x) angewendet werden, die die Ordnungszahl des Werts des Ausdrucks X zurückgibt.


    Reis. 1.1 - Datentypstruktur

    Für ganz gibt die Funktion ord(x) den Wert von x selbst zurück, d. h. Ord(X) = x für x, das zu irgendeinem gehört ganz Typ. Anwenden von Ord(x) auf logisch , symbolisch und aufzählbar Typen ergibt eine positive ganze Zahl im Bereich von 0 bis 1 ( boolescher Typ), von 0 bis 255 ( symbolisch), von 0 bis 65535 ( aufzählbar). Typenbereich behält alle Eigenschaften des Basis-Ordinaltyps bei, sodass das Ergebnis der Anwendung der ord(x)-Funktion auf ihn von den Eigenschaften dieses Typs abhängt.

    Sie können Funktionen auch auf Ordinaltypen anwenden:

    pred(x)- gibt den vorherigen Wert des Ordinaltyps zurück (den Wert, der der Ordinalzahl ord(x) -1 entspricht, d. h. ord(pred(x)) = ord(x) - 1;

    erfolgreich(x)- gibt den nächsten Wert des Ordnungstyps zurück, der der Ordnungszahl ord(x) +1 entspricht, d. h. ord(Succ(x)) = ord(x) + 1.

    Zum Beispiel, wenn ein Programm eine Variable definiert

    dann gibt die Funktion PRED(c) das Zeichen „4“ zurück und die Funktion SUCC(c) gibt das Zeichen „6“ zurück.

    Wenn wir uns einen Ordinaltyp als eine geordnete Menge von Werten vorstellen, die von links nach rechts ansteigen und ein bestimmtes Segment auf der Zahlenachse belegen, dann ist die Funktion pred(x) für das linke Ende nicht definiert, succ (x) hingegen schon nicht für das rechte Ende dieses Segments definiert.

    Ganzzahltypen . Der Bereich möglicher Werte ganzzahliger Typen hängt von ihrer internen Darstellung ab, die ein, zwei, vier oder acht Bytes umfassen kann. In der Tabelle 1.1 zeigt die Namen von Integer-Typen, die Länge ihrer internen Darstellung in Bytes und den Bereich möglicher Werte.

    Tabelle 1.1 – Ganzzahltypen

    Name Länge, Bytes Wertebereich
    Kardinal 4 0. .. 2 147 483 647
    Byte 1 0...255
    Abkürzung 1 -128...+127
    Smallint 2 -32 768...+32 767
    Wort 2 0...65 535
    Ganze Zahl 4
    Longint 4 -2 147 483 648...+2 147 483 647
    Int64 8 -9*1018...+9*1018
    Langwort 4 0. . .4 294 967 295

    Typen Langwort Und Int64 wurden erstmals in Version 4 eingeführt, und die Typen Smallint Und Kardinal nicht verfügbar in Delphi 1. Typ ganze Zahl für diese Version benötigt es 2 Bytes und hat einen Wertebereich von -32768 bis +32767, also das Gleiche wie Smallint .

    Bei der Verwendung von Prozeduren und Funktionen mit ganzzahligen Parametern sollten Sie sich an der „Verschachtelung“ von Typen orientieren, d. h. wo immer es genutzt werden kann Wort, erlaubt zu verwenden Byte(aber nicht umgekehrt), in Longint„betritt“ Smallint, was wiederum beinhaltet Abkürzung .

    Die Liste der auf Ganzzahltypen anwendbaren Prozeduren und Funktionen ist in der Tabelle aufgeführt. 1.2. Die Buchstaben b, s, w, i, l bezeichnen Ausdrücke der folgenden Typen: Byte , Shortint, Word, Integer und Longint ,

    x ist ein Ausdruck eines dieser Typen; Die Buchstaben vb, vs, vw, vi, vl, vx bezeichnen Variablen der entsprechenden Typen. Ein optionaler Parameter wird in eckigen Klammern angegeben.

    Tabelle 1.2 – Standardverfahren und -funktionen, die für ganze Typen gelten

    Appellieren Ergebnistyp Aktion
    abs(x) X Gibt Modul x zurück
    chr(b) Verkohlen Gibt ein Zeichen anhand seines Codes zurück
    dec(vx[,i]) - Verringert den Wert von vx um i und in Abwesenheit von i um 1
    inc(vx[,i]) - Erhöht den Wert von vx um i und in Abwesenheit von i um 1
    Hallo(w) Byte Gibt die höchste Verbeugung des Arguments zurück
    Hallo ich) Dasselbe Gibt das dritte Byte zurück
    Lo(i) Gibt das Low-Byte des Arguments zurück
    Niedrig) Dasselbe
    ungerade(l) Boolescher Wert Gibt True zurück, wenn das Argument eine ungerade Zahl ist
    Zufällig(w) Identisch mit Parameter Gibt eine Pseudozufallszahl zurück, die gleichmäßig im Bereich 0...(w-l) verteilt ist.
    sqr(x) X Gibt das Quadrat des Arguments zurück
    tausch(i) Ganze Zahl Vertauscht Bytes in einem Wort
    tauschen(w) Wort Dasselbe

    Bei der Arbeit mit Ganzzahlen entspricht der Ergebnistyp dem Typ der Operanden, und wenn es sich bei den Operanden um unterschiedliche Ganzzahltypen handelt, dem allgemeinen Typ, der beide Operanden umfasst. Zum Beispiel beim Betrieb mit Kurzschluss Und Wort Der übliche Typ wird sein ganze Zahl. In der Standardeinstellung erzeugt der Delphi-Compiler keinen Code, um zu prüfen, ob ein Wert außerhalb des zulässigen Bereichs liegt, was zu Missverständnissen führen kann.

    Boolesche Typen . Zu den logischen Typen gehören Boolean, ByteBool, Bool, wordBool Und LongBool. Im Standard-Pascal ist nur der Typ definiert Boolescher Wert Aus Gründen der Kompatibilität mit Windows:-Typen werden in Object Pascal weitere logische Typen eingeführt Boolescher Wert Und ByteBool jeder nimmt ein Byte ein, Bool Und WordBool- jeweils 2 Bytes, LongBool- 4 Bytes. Boolesche Werte können eine der vordeklarierten Konstanten False oder True sein.

    Da der boolesche Typ ein Ordinaltyp ist, kann er in einer Schleifenanweisung eines zählbaren Typs verwendet werden. In Delphi 32 für Boolescher Wert Bedeutung

    Ord (True) = +1, während für andere Typen ( Bool, WordBool usw.)

    Ord(True) = -1, daher sollten diese Art von Operatoren mit Vorsicht verwendet werden! Für die Delphi 6-Version beispielsweise die ausführbare showMessage(" --- ")-Anweisung in der folgenden Schleife für wird nie ausgeführt:

    für L:= False to True tun

    Zeige Nachricht("--);

    Wenn wir den Schleifenparametertyp L im vorherigen Beispiel durch ersetzen Boolescher Wert, die Schleife wird ausgeführt und die Meldung wird zweimal auf dem Bildschirm angezeigt. [Für Delphi-Versionen 1 und 2 ord (True) =+1 für jeden booleschen Typ.]

    Zeichentyp . Der Wert eines Zeichentyps ist die Menge aller PC-Zeichen. Jedem Zeichen wird eine Ganzzahl im Bereich 0...255 zugewiesen. Diese Zahl dient als Code für die interne Darstellung des Symbols; sie wird von der ord-Funktion zurückgegeben.

    Für die Kodierung in Windows wird der ANSI-Code verwendet (benannt nach dem American National Standard Institute, dem amerikanischen Standardisierungsinstitut, das diesen Code vorgeschlagen hat). Die erste Hälfte der PC-Zeichen mit den Codes 0...127 entspricht Tabelle 1.3. Die zweite Hälfte der Zeichen mit den Codes 128...255 variiert je nach Schriftart. Die Standard-Windows-Schriftarten Arial Cyr, Courier New Cyr und Times New Roman verwenden die letzten 64 Codes (von 192 bis 256), um kyrillische Zeichen (ohne die Buchstaben „ё“ und „Ё“) darzustellen: „A“... „Z“ sind codierte Werte 192..223, „a“... „i“ - 224...255. Die Symbole „Ё“ und „е“ haben die Codes 168 bzw. 184.

    Tabelle 1.3 – Zeichenkodierung gemäß ANSI-Standard

    Code Symbol Code. Symbol Code. Symbol Code Symbol
    0 NUL 32 B.L. 64 @ 96 "
    1 ZON 33 ! 65 A 97 A
    2 STX 34 66 IN 98 B
    3 ETX 35 # 67 MIT 99 Mit
    4 EOT 36 $ 68 D 100 D
    5 ENQ 37 % 69 E 101 e
    6 ACK 38 & 70 F 102 F
    7 BEL 39 " 71 G 103 D
    8" B.S. 40 ( 72 N 104 H
    9 HT 41 ) 73 ICH 105 ich
    10 LF 42 * 74 J 106 J
    11 VT 43 + 75 ZU 107 k
    12 FF 44 F 76 L 108 1
    13 CR 45 - 77 M 109 M
    14 ALSO 46 78 N 110 N
    15 S.I. 47 / 79 0 111 Ö
    16 DEL 48 0 80 R 112 P
    17 DC1 49 1 81 Q 113 Q
    18 DC2 50 2 82 R 114 R
    19 DC3 51 3 83 S 115 S
    20 DC 4 52 4 84 T 116 T
    21 N.A.K. 53 5 85 U 117 u
    22 SYN 54 6 86 V 118 v
    23 ETB 55 7 87 W 119 W
    24 DÜRFEN 56 8 88 X 120 X
    25 E.M. 57 9 89 Y 121 U
    26 SUB 58 : 90 Z .122 z
    27 ESC 59 ; 91 T 123 {
    28 FS 60 < 92 \ 124 1
    29 G.S. 61 = 93 ] 125 }
    30 R.S. 62 > 94 L 126 ~
    31 UNS 63 F 95 127 R

    Zeichen mit den Codes 0...31 beziehen sich auf Servicecodes. Wenn diese Codes im Zeichentext des Programms verwendet werden, gelten sie als Leerzeichen.

    Tippen verkohlen Es sind relationale Operationen sowie integrierte Funktionen anwendbar:

    Zeichen (c)- Typfunktion verkohlen; Konvertiert einen Ausdruck in einen Typ Byte in ein Symbol umwandelt und es mit seinem Wert zurückgibt;

    UpCase(CH)- Typfunktion verkohlen; Gibt einen Großbuchstaben zurück, wenn сн ein lateinischer Kleinbuchstabe ist, andernfalls wird das Symbol сн selbst zurückgegeben (für Kyrillisch wird das Originalzeichen zurückgegeben).

    Aufzählungstyp . Ein Aufzählungstyp wird durch eine Aufzählung der Werte spezifiziert, die er empfangen kann. Jeder Wert wird durch einen Bezeichner benannt und befindet sich in einer Liste in Klammern, zum Beispiel:

    Farben = (rot, weiß, blau);

    Durch die Verwendung von Aufzählungstypen werden Programme visueller.

    Die Entsprechung zwischen den Werten eines Aufzählungstyps und den Ordnungszahlen dieser Werte wird durch die Aufzählungsreihenfolge hergestellt: Der erste Wert in der Liste erhält die Ordnungszahl 0, der zweite - 1 usw. Die maximale Kapazität von Ein Aufzählungstyp besteht aus 65536 Werten, sodass der Aufzählungstyp tatsächlich eine Teilmenge des gesamten Typs angibt Wort und kann als kompakte Deklaration einer Gruppe ganzzahliger Konstanten mit den Werten 0, 1 usw. betrachtet werden.

    Die Verwendung von Aufzählungstypen erhöht die Zuverlässigkeit von Programmen, da Sie die Werte steuern können, die entsprechende Variablen erhalten. Object Pascal ermöglicht die umgekehrte Konvertierung: jeden Ausdruck eines Typs Wort kann in einen Wert eines Aufzählungstyps konvertiert werden, es sei denn, der Wert des ganzzahligen Ausdrucks überschreitet die Kardinalität dieses Typs. Diese Konvertierung wird durch die Verwendung einer automatisch deklarierten Funktion mit dem Namen des Aufzählungstyps erreicht.

    Typenbereich . Ein Bereichstyp ist eine Teilmenge seines Basistyps, der ein beliebiger Ordinaltyp außer einem Bereichstyp sein kann.

    Ein Bereichstyp wird durch die Grenzen seiner Werte innerhalb des Basistyps definiert:

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

    Hier<мин. знач. >- Mindestwert des Typbereichs;<макс. знач. >- sein Maximalwert.

    Der Bereichstyp muss nicht im Typabschnitt beschrieben werden, sondern kann direkt bei der Variablendeklaration angegeben werden.

    Bei der Bestimmung eines Bereichstyps müssen Sie die folgenden Regeln beachten:

    Zwei „..“-Zeichen werden als ein Zeichen behandelt, daher sind keine Leerzeichen dazwischen zulässig. Der linke Rand des Bereichs sollte seinen rechten Rand nicht überschreiten.

    Ein Bereichstyp erbt alle Eigenschaften seines Basistyps, jedoch mit den Einschränkungen seiner geringeren Leistung. Insbesondere, wenn eine Variable definiert ist.

    Die Object Pascal-Standardbibliothek enthält zwei Funktionen, die die Arbeit mit Bereichstypen unterstützen:

    Hoch(x)- gibt den Maximalwert des Bereichstyps zurück, zu dem die Variable x gehört;

    Niedrig(x)- gibt den Mindestwert des Bereichstyps zurück.

    1.1.2 Reale Typen

    Im Gegensatz zu Ordinaltypen, deren Werte immer auf eine Reihe von ganzen Zahlen abgebildet werden und daher in PC absolut präzise dargestellt werden, definieren die Werte reeller Typen eine beliebige Zahl nur mit einer gewissen endlichen Genauigkeit, abhängig vom internen Format der reellen Zahl .

    Tabelle 1.4 – Reale Typen

    In früheren Versionen von Delphi 1...3 Typ Real belegte 6 Bytes und hatte einen Wertebereich von 2,9*10-39 bis 1,7*1038. In den Versionen 4 und 5 entspricht dieser Typ dem Typ Doppelt. Bei Bedarf (aus Kompatibilitätsgründen) 6 Byte verwenden Real, müssen Sie eine Compiler-Direktive angeben (SREALCOMPATIBILITY ON).

    Wie aus der Tabelle ersichtlich ist. 1.4 belegt eine reelle Zahl in Object Pascal 4 bis 10 zusammenhängende Bytes und hat im PC-Speicher die folgende Struktur.

    Hier ist s die Vorzeichenziffer der Zahl; e - Exponentialteil; enthält binäre Reihenfolge; m ist die Mantisse der Zahl.

    Mantisse m hat eine Länge von 23 (für einzel) bis 63 (für Erweitert) Binärbits, was eine Genauigkeit von 7...8 für gewährleistet einzel und 19...20 für Erweitert Dezimalziffern. Der Dezimalpunkt (Komma) steht vor der linken (höchstwertigen) Ziffer der Mantisse, aber bei der Bearbeitung einer Zahl wird seine Position entsprechend der binären Reihenfolge der im Exponentialteil gespeicherten Zahl nach links oder rechts verschoben Daher werden Operationen mit reellen Zahlen Gleitkommaarithmetik genannt.

    Beachten Sie, dass der arithmetische Coprozessor immer Zahlen im Format verarbeitet Erweitert, und die drei anderen reellen Typen werden in diesem Fall durch einfaches Abschneiden der Ergebnisse auf die erforderliche Größe erhalten und dienen hauptsächlich dazu, Speicherplatz zu sparen.

    Typen nehmen in Object Pascal eine Sonderstellung ein komp Und Währung, die als reelle Zahlen mit Bruchteilen fester Länge behandelt werden: in komp der Bruchteil hat eine Länge von 0 Ziffern, d. h. er fehlt einfach, in Währung die Länge des Nachkommateils beträgt 4 Dezimalstellen. Tatsächlich definieren beide Typen eine große Ganzzahl mit Vorzeichen, die 19 bis 20 signifikante Dezimalstellen speichert (intern belegen sie 8 zusammenhängende Bytes). Gleichzeitig in Ausdrücken komp Und Währung sind mit allen anderen reellen Typen vollständig kompatibel: Alle reellen Operationen sind auf ihnen definiert, sie können als Argumente für mathematische Funktionen usw. verwendet werden. Der am besten geeignete Anwendungsbereich für diese Typen sind Buchhaltungsberechnungen.

    1.1.3 Datum-Uhrzeit-Typ

    Der datetime-Typ wird durch einen Standardbezeichner definiert TDateTime und dient zur gleichzeitigen Speicherung von Datum und Uhrzeit. In der internen Darstellung belegt es 8 Bytes und ähnliches Währung ist eine reelle Zahl mit einem festen Bruchteil: Der ganzzahlige Teil der Zahl speichert das Datum und der Bruchteil speichert die Uhrzeit. Das Datum ist definiert als die Anzahl der Tage, die seit dem 30. Dezember 1899 vergangen sind, und die Zeit als Bruchteil eines Tages, der seit 0 Stunden vergangen ist. Der Wert 36444,837 entspricht also dem Datum 11.10.1999 und der Uhrzeit 20:05. Die Anzahl der Tage kann negativ sein, aber Werte kleiner als -693594 (entsprechend dem Datum 00.00.0000 ab der Geburt Christi) werden von Funktionen zum Konvertieren eines Datums in einen String-Typ ignoriert.

    Obiger Datentyp TDateTime Es werden die gleichen Operationen definiert wie für reelle Zahlen, und Ausdrücke dieses Typs können Konstanten und Variablen vom Typ Integer und Real umfassen.

    Weil der Typ TDateTime Kompatibel mit dem Format der reellen Zahlen können Sie leicht ein Datum bestimmen, das mehrere Tage vor oder hinter einem bestimmten Datum liegt: Dazu reicht es aus, die gewünschte ganze Zahl zum angegebenen Datum zu addieren bzw. davon zu subtrahieren.

    1.2 Strukturierte Typen

    Jeder der strukturierten Typen (und in Object Pascal gibt es vier davon: Arrays, Datensätze, Mengen und Dateien) zeichnet sich durch die Vielzahl der Elemente aus, die diesen Typ bilden. Jedes Element kann wiederum zu einem strukturierten Typ gehören, was es uns ermöglicht, über mögliche Verschachtelungen von Typen zu sprechen. Object Pascal erlaubt eine beliebige Verschachtelungstiefe von Typen, aber die Gesamtlänge eines dieser Typen in der internen Darstellung sollte 2 GB nicht überschreiten.

    Aus Gründen der Kompatibilität mit Standard-Pascal ermöglicht Object Pascal die Platzierung eines reservierten Worts vor einer strukturierten Typdeklaration verpackt, der den Compiler anweist, nach Möglichkeit den für Objekte eines strukturierten Typs zugewiesenen Speicher zu sparen; Der Compiler ignoriert diese Anweisung jedoch tatsächlich: Das „Packen“ von Daten in Object Pascal erfolgt, soweit möglich, automatisch.

    1.2.1 Arrays

    Arrays in Object Pascal ähneln in vielerlei Hinsicht ähnlichen Datentypen in anderen Programmiersprachen. Ein besonderes Merkmal von Arrays besteht darin, dass alle ihre Komponenten Daten desselben Typs (möglicherweise strukturiert) sind. Diese Komponenten lassen sich leicht organisieren und auf jede einzelne kann einfach durch Angabe ihrer Seriennummer zugegriffen werden.

    Die Beschreibung des Array-Typs wird wie folgt angegeben:

    <имя типа>= Array [<сп.инд.типов>] von<тип>;

    Hier<имя типа>- korrekte Kennung; Anordnung von- reservierte Wörter (Array, von);<сп.инд.типов>- eine durch Kommas getrennte Liste eines oder mehrerer Indextypen; Eckige Klammern, die die Liste einrahmen, sind eine Syntaxanforderung;<тип>- jede Art von Object Pascal.

    Alle Ordinaltypen mit einer Kapazität von nicht mehr als 2 GB können als Indextypen in Object Pascal verwendet werden (d. h. außer Langwort Und Int64)

    Die Verschachtelungstiefe strukturierter Typen im Allgemeinen und folglich auch von Arrays ist beliebig, sodass die Anzahl der Elemente in der Liste der Indextypen (Array-Größe) nicht begrenzt ist, jedoch die Gesamtlänge der internen Darstellung eines beliebigen Das Array darf nicht größer als 2 GB sein. Im PC-Speicher folgen Array-Elemente einander so, dass sich beim Wechsel von niedrigen zu hohen Adressen der Index ganz rechts im Array am schnellsten ändert.

    In Object Pascal können Sie einen einzelnen Zuweisungsoperator verwenden, um alle Elemente eines Arrays in ein anderes Array desselben Typs zu übertragen.

    1.2.2 Aufzeichnungen

    Aufzeichnen ist eine Datenstruktur, die aus einer festen Anzahl von Komponenten besteht, die als Felder eines Datensatzes bezeichnet werden. Im Gegensatz zu einem Array können die Komponenten (Felder) eines Datensatzes unterschiedlichen Typs sein. Um eine Bezugnahme auf die eine oder andere Komponente eines Datensatzes zu ermöglichen, werden die Felder benannt.

    Die Struktur einer Post-Typ-Deklaration ist:

    <имятипа>=Aufzeichnung<сп.полей>Ende;

    Hier<имя типа>- korrekte Kennung; Aufnahme/Ende- reservierte Wörter (Aufnahme, Ende);<сп.полей>- Liste der Felder; ist eine Folge von Abschnitten eines Datensatzes, die durch ein Semikolon getrennt sind.

    Jeder Abschnitt eines Datensatzes besteht aus einem oder mehreren Feldbezeichnern, die durch Kommas getrennt sind.

    Angebot Fall von, das den Variantenteil eröffnet, ähnelt oberflächlich dem entsprechenden Auswahloperator, spielt aber tatsächlich nur die Rolle einer Art Dienstwort, das den Beginn des Variantenteils bezeichnet. Deshalb sollten Sie am Ende des Variantenteils keinen Teil einfügen Ende wie ein Paar Fall von. (Da der Variantenteil immer der letzte im Datensatz ist, folgt ihm immer noch end, jedoch nur als Paar zur Aufzeichnung). Satzauswahltaste Fall von wird vom Compiler praktisch ignoriert: Die einzige Voraussetzung dafür in Object Pascal ist, dass der Schlüssel einen Standard- oder vordeklarierten Ordinaltyp definiert.

    Feldnamen müssen innerhalb des Datensatzes, in dem sie deklariert werden, eindeutig sein. Wenn die Datensätze jedoch Datensatzfelder enthalten, also ineinander verschachtelt sind, können die Namen auf verschiedenen Verschachtelungsebenen wiederholt werden.

    1.2.3 Sätze

    Sets - Dies sind Mengen derselben Art von Objekten, die logisch miteinander verknüpft sind. Die Art der Beziehungen zwischen Objekten wird vom Programmierer nur impliziert und wird in keiner Weise von Object Pascal kontrolliert. Die Anzahl der in einer Menge enthaltenen Elemente kann zwischen 0 und 256 variieren (eine Menge, die keine Elemente enthält, wird als leer bezeichnet). Es ist die Unbeständigkeit der Anzahl ihrer Elemente, die Mengen von Arrays und Datensätzen unterscheidet.

    Zwei Mengen gelten genau dann als äquivalent, wenn alle ihre Elemente gleich sind und die Reihenfolge der Elemente in der Menge gleichgültig ist. Wenn alle Elemente einer Menge auch in einer anderen enthalten sind, wird die erste Menge als in der zweiten enthalten bezeichnet. Ein leerer Satz ist in jedem anderen Satz enthalten.

    Die Beschreibung des Settyps lautet:

    <имя типа>= Satz von<базовый тип>;

    Hier<имя типа>- korrekte Kennung; Satz, von- reservierte Wörter (Satz, von);<базовый тип>- der Grundtyp der Mengenelemente, der ein beliebiger Ordinaltyp sein kann, außer Wort, Ganzzahl, Lange Ganzzahl, Int64 .

    Um eine Menge zu definieren, wird der sogenannte Mengenkonstruktor verwendet: eine durch Kommas getrennte Liste von Spezifikationen der Elemente der Menge; Die Liste ist in eckige Klammern gesetzt. Elementspezifikationen können Konstanten oder Ausdrücke eines Basistyps oder eines Bereichstyps desselben Basistyps sein.

    Die interne Struktur der Menge ist so, dass jedem ihrer Elemente eine Binärziffer (ein Bit) zugeordnet ist; Wenn ein Element in einer Menge enthalten ist, hat das entsprechende Bit den Wert 1, andernfalls - 0. Gleichzeitig beträgt die minimale Speichereinheit ein Byte mit 8 Bits, daher hat der Compiler den Mengen ein Byte zugewiesen, und Infolgedessen wurde die Kraft jedes von ihnen gleich 8 Elementen. Die maximale Kapazität des Sets beträgt 256 Elemente. Für solche Sätze weist der Compiler 16 benachbarte Bytes zu.

    Und noch ein Experiment: Ändern Sie den Bereich des Basistyps auf 1..256. Obwohl die Kapazität dieses Typs 256 Elemente beträgt, meldet der Compiler beim Versuch, ein Programm zu kompilieren, den Fehler: Mengen dürfen höchstens 256 Elemente haben, da die Nummerierung der Mengenelemente unabhängig von der im Programm deklarierten Untergrenze bei Null beginnt. Der Compiler ermöglicht die Verwendung eines ganzzahligen Bereichstyps mit einer Mindestgrenze von 0 und einem Höchstwert von 255 oder eines beliebigen Aufzählungstyps mit nicht mehr als 256 Elementen als Basistyp (die maximale Kardinalität eines Aufzählungstyps beträgt 65536 Elemente).

    1.3 Saiten

    Die folgenden Typen werden für die Textverarbeitung in Object Pascal verwendet:

    kurze Saite shortString oder Zeichenfolge [n], wo n<= 255;

    lange Schnur Zeichenfolge ;

    breite Linie WideString ;

    Nullterminalzeichenfolge pchar .

    Diesen Typen ist gemeinsam, dass jede Zeichenfolge als eindimensionales Array von Zeichen behandelt wird, wobei sich die Anzahl der Zeichen in einem laufenden Programm ändern kann: Für Zeichenfolge [n] ändert sich die Zeichenfolgenlänge von 0 auf n, z Zeichenfolge Und pchar- von 0 bis 2 GB.

    Standard-Pascal verwendet nur kurze Zeichenfolgen Zeichenfolge [n]. Im Speicher werden einer solchen Zeichenfolge n+i Bytes zugewiesen, das erste Byte enthält die aktuelle Länge der Zeichenfolge und die Zeichen selbst befinden sich ab dem 2. Byte. Da die Länge der Zeichenfolge in diesem Fall ein Byte beträgt, darf die maximale Länge einer kurzen Zeichenfolge 255 Zeichen nicht überschreiten. Der Standardtyp wird verwendet, um eine kurze Zeichenfolge mit maximaler Länge zu deklarieren ShortString(äquivalent Zeichenfolge).

    Windows verwendet häufig Null-Terminal-Zeichenfolgen, bei denen es sich um Zeichenfolgen handelt, die durch das Zeichen #o getrennt werden. Die maximale Länge einer solchen Zeichenfolge wird nur durch den verfügbaren Speicher begrenzt und kann sehr groß sein.

    In 32-Bit-Versionen von Delphi wurde ein neuer Typ eingeführt Zeichenfolge und vereint die Annehmlichkeiten beider Typen. Bei der Arbeit mit diesem Typ wird der Speicher nach Bedarf (dynamisch) zugewiesen und durch den verfügbaren Speicher begrenzt, der dem Programm zur Verfügung steht.

    1.4 Zeiger und dynamischer Speicher

    1.4.1 Dynamischer Speicher

    Dynamisches Gedächtnis- Dies ist der PC-RAM, der dem Programm während seines Betriebs zur Verfügung gestellt wird. Unter dynamischer Datenplatzierung versteht man die Nutzung von dynamischem Speicher direkt während der Programmausführung. Im Gegensatz dazu erfolgt die statische Zuweisung durch den Object Pascal-Compiler, wenn das Programm kompiliert wird. Bei der dynamischen Platzierung ist weder die Art noch die Menge der zu platzierenden Daten im Voraus bekannt.

    1.4.2 Wegweiser

    PC-RAM ist eine Ansammlung von Zellen zum Speichern von Informationen – Bytes, von denen jede eine eigene Nummer hat. Diese Nummern werden Adressen genannt und ermöglichen den Zugriff auf jedes Byte im Speicher. Object Pascal stellt dem Programmierer eine flexible Möglichkeit zur Verwaltung dynamischen Speichers zur Verfügung – sogenannte Zeiger. Ein Zeiger ist eine Variable, die als Wert die Adresse eines Bytes im Speicher enthält. Mithilfe von Zeigern können Sie alle in Object Pascal bekannten Datentypen im dynamischen Speicher platzieren. Nur einige von ihnen ( Byte, Char, ShortInt, Boolean) belegen in der internen Darstellung ein Byte, der Rest - mehrere benachbarte. Daher adressiert der Zeiger tatsächlich nur das erste Datenbyte.

    Normalerweise ist ein Zeiger einem Datentyp zugeordnet. Wir nennen solche Zeiger typisiert. Um einen typisierten Zeiger zu deklarieren, verwenden Sie das ^-Symbol, das vor dem entsprechenden Typ platziert wird.

    In Object Pascal können Sie einen Zeiger deklarieren, ohne ihn einem bestimmten Datentyp zuordnen zu müssen. Dies erfolgt über den Standardtyp Zeiger, Zum Beispiel:

    Zeiger dieser Art werden als untypisiert bezeichnet. Da untypisierte Zeiger keinem bestimmten Typ zugeordnet sind, können sie zur dynamischen Zuweisung von Daten verwendet werden, deren Struktur und Typ sich während der Programmausführung ändern.

    Wie bereits erwähnt, sind die Werte von Zeigern die Adressen von Variablen im Speicher, sodass man erwarten würde, dass der Wert eines Zeigers an einen anderen übergeben werden kann. Eigentlich stimmt das nicht. In Object Pascal können Sie Werte nur zwischen Zeigern übergeben, die demselben Datentyp zugeordnet sind.

    1.4.3 Zuweisen und Freigeben von dynamischem Speicher

    Der gesamte dynamische Speicher in Object Pascal wird als kontinuierliches Array von Bytes behandelt, das als Heap bezeichnet wird.

    Speicher für jede dynamisch zugewiesene Variable wird durch die New-Prozedur zugewiesen. Der Parameter zum Aufrufen dieser Prozedur ist ein typisierter Zeiger. Durch den Zugriff erhält der Zeiger einen Wert, der der Adresse entspricht, von der aus Daten abgelegt werden können. Der Wert, auf den der Zeiger zeigt, also die tatsächlich dem Heap zugeordneten Daten, wird durch das ^-Zeichen angezeigt, das direkt nach dem Zeiger platziert wird. Wenn hinter dem Zeiger kein ^-Zeichen steht, bedeutet dies die Adresse, an der sich die Daten befinden. Es ist sinnvoll, noch einmal darüber nachzudenken, was gerade gesagt wurde: Der Wert eines Zeigers ist eine Adresse, und um anzuzeigen, dass es sich nicht um die Adresse handelt, sondern um die Daten, die sich an dieser Adresse befinden, wird nach dem ein ^ eingefügt Zeiger (manchmal wird dies auch als Dereferenzierungszeiger bezeichnet).

    Dynamisch zugewiesene Daten können überall im Programm verwendet werden, wo sie für Konstanten und Variablen des entsprechenden Typs gültig sind

    Dynamischer Speicher kann nicht nur vom Heap entnommen, sondern auch zurückgegeben werden. Verwenden Sie dazu das Verfahren „Entsorgen“. Zum Beispiel Operatoren

    Entsorgen(pJ);

    Entsorgen(pR);

    gibt den Speicher, der zuvor den pJ- und pR-Zeigern zugewiesen wurde (siehe oben), an den Heap zurück.

    Beachten Sie, dass die Dispose-Prozedur (pPtr) den Wert des pPtr-Zeigers nicht ändert, sondern nur den zuvor diesem Zeiger zugeordneten Speicher an den Heap zurückgibt. Die erneute Anwendung der Prozedur auf einen freien Zeiger führt jedoch zu einem Laufzeitfehler. Der Programmierer kann den freigegebenen Zeiger mit dem reservierten Wort Null markieren.

    1.5 Typ-Aliase

    Für jeden Typ können Sie beliebig viele Aliase deklarieren. Zum Beispiel:

    TMyInteger = Integer;

    Zukünftig kann der Alias ​​wie der Basistyp verwendet werden:

    Mylnt: TMyInteger;

    Mylnt:= 2*Round(pi);

    Solche Aliase werden üblicherweise verwendet, um die Sichtbarkeit von Programmcode zu verbessern. In Object Pascal können Sie jedoch stark typisierte Aliase deklarieren, indem Sie das reservierte Wort „type“ vor dem Namen des Basistyps hinzufügen:

    TMyIntegerType = Typ Integer;

    MylntVar: TMyIntegerType;

    Aus der Sicht des Compilers sind typisierte Aliase mit dem Basistyp in verschiedenen Arten von Ausdrücken kompatibel, deklarieren jedoch tatsächlich einen neuen Datentyp und können daher nicht als formale Parameter zum Aufrufen von Unterprogrammen anstelle des Basistyps verwendet werden. Wenn beispielsweise eine Prozedur deklariert wird

    Funktion MylntFunc(APar: integer): Integer;

    dann so ein Appell an sie

    MylntFunc(MylntVar)

    wird vom Compiler als fehlerhaft betrachtet.

    Stark typisierte Aliase zwingen den Compiler zur Generierung von Laufzeittypinformationen (RTTI). Diese Informationen werden normalerweise von der Delphi-Umgebung verwendet, um die Funktionsweise verschiedener Editortypen zu unterstützen.

    Das Wissen und Verstehen von Datentypen ist ein wesentlicher Bestandteil der Programmierung.

    In dieser Lektion lernen wir Datentypen in der Programmiersprache Turbo Pascal kennen.

    In der Pascal-Sprache sind beliebige Objekte, d.h. Konstanten, Variablen, Funktionswerte oder Ausdrücke werden durch ihren Typ charakterisiert. Ein Typ definiert den Satz gültiger Werte für ein Objekt sowie den Satz an Operationen, die auf es anwendbar sind. Darüber hinaus bestimmt der Typ das Format der internen Darstellung der Daten im Computerspeicher. Hinsichtlich der Objekttypen ist Pascal eine statische Sprache. Dies bedeutet, dass der Typ eines Objekts, beispielsweise einer Variablen, bei der Deklaration festgelegt wird und später nicht geändert werden kann.

    Struktur der Datentypen in Pascal:

    Einfache Arten von Sprachen
    Zu den einfachen Typen gehören Ordinal-, Real-, String- und Adresstypen (Zeiger). Sie alle definieren den Typ nur eines einzigen Werts.

    Ordnungstypen dadurch gekennzeichnet, dass jeder von ihnen eine endliche Anzahl möglicher Werte hat, zwischen denen eine lineare Reihenfolge festgelegt wird. Jeder der Werte kann einer Ganzzahl zugeordnet werden – seiner Seriennummer.

    Ganzzahltypen- bezeichnen Mengen von ganzen Zahlen in verschiedenen Bereichen. Es gibt fünf Integer-Typen, die sich im Bereich der gültigen Werte und der Größe des von ihnen belegten RAM unterscheiden. Integer-Typen werden durch Bezeichner gekennzeichnet: Byte, ShortInt, Word, Integer, LongInt; Ihre Eigenschaften sind in der folgenden Tabelle aufgeführt.

    Werte ganzzahliger Typen werden im Programm wie gewohnt geschrieben:
    123 4 -3 +345 -699
    Das Vorhandensein eines Dezimalpunkts in der Schreibweise einer ganzen Zahl ist nicht akzeptabel. Es wäre ein Fehler, eine Ganzzahl wie diese zu schreiben:
    123.0
    Zusätzlich zur üblichen Dezimalschreibweise ist es möglich, ganze Zahlen im Hexadezimalformat mit dem Präfix $ zu schreiben, zum Beispiel:
    $01AF $FF $1A $F0A1B
    Die Groß-/Kleinschreibung der Buchstaben A, B, ..., F spielt keine Rolle.

    Gültige Operationen:

    • - Abtretung;
    • - alle Arithmetik: +, - ,*, /, div, mod (bei gewöhnlicher Division [/] ist das Ergebnis real!);
    • - Vergleich<, >, >=, <=, <>, =.
    Boolescher Typ- besteht nur aus zwei Werten: False (falsch) und True (wahr). Die Wörter „Falsch“ und „Wahr“ sind in der Sprache definiert und tatsächlich logische Konstanten. Die Groß-/Kleinschreibung der Buchstaben ist beim Schreiben unerheblich: FALSE = falsch. Werte dieser Art sind das Ergebnis der Auswertung bedingter und logischer Ausdrücke und nehmen an allen Arten von bedingten Operatoren der Sprache teil.
    Gültige Operationen:
    • - Abtretung;
    • - Vergleich:<, >, >=, <=, <>, =;
    • - logische Operationen: NICHT, ODER, UND, XOR
    Zeichentyp (Char) ist ein Datentyp, der aus einem Zeichen (Zeichen, Buchstabe, Code) besteht. Ein Char-Wert kann ein beliebiges Zeichen aus dem ASCII-Zeichensatz sein. Wenn ein Symbol eine grafische Darstellung hat, wird es im Programm in einfache Anführungszeichen (Apostrophe) geschrieben, zum Beispiel:
    „w“ „s“ „.“ "*" " "-(Raum)
    Um den Apostroph selbst darzustellen, wird sein Bild verdoppelt: „““.
    Wenn das Zeichen keine grafische Darstellung hat, beispielsweise ein Tabulatorzeichen oder ein Wagenrücklaufzeichen, können Sie eine äquivalente Schreibweise des Zeichenwerts verwenden, die aus dem Präfix # und dem ASCII-Code des Zeichens besteht:
    #9 #32 #13
    Gültige Operationen:
    • - Abtretung;
    • - Vergleich:<, >, >=, <=, <>, =. Das größte Zeichen ist dasjenige mit der höheren ASCII-Nummer.
    String-Typ (String, String[n])– Dieser Datentyp definiert Zeichenfolgen – Strings. Der Parameter n gibt die maximale Anzahl von Zeichen pro Zeile an. Wenn nicht angegeben, wird n=255 angenommen. Ein Wert vom Typ „String“ wird in einem Programm beispielsweise als eine in einfache Anführungszeichen (Apostrophe) eingeschlossene Zeichenfolge geschrieben
    „Das ist eine Zeichenfolge“
    „1234“ ist ebenfalls eine Zeichenfolge, keine Zahl
    „“ – leere Zeile

    Gültige Operationen:
    • - Abtretung;
    • - Addition (Verkettung, Fusion); zum Beispiel S:= „Winter“+“ „+“ist da!“;
    • - Vergleich:<, >, >=, <=, <>, =. Zeichenfolgen gelten als gleich, wenn sie die gleiche Länge haben und Zeichen für Zeichen äquivalent sind.
    Echte Typen- bezeichnen Mengen reeller Zahlen in verschiedenen Bereichen. Es gibt fünf reale Typen, die sich im Bereich der zulässigen Werte und der Größe des belegten Arbeitsspeichers unterscheiden. Reale Typen werden durch Bezeichner bezeichnet: Real, Single, Double, Extended, Comp; Ihre Eigenschaften sind in der folgenden Tabelle aufgeführt.

    Comp-Typ Obwohl es sich um einen realen Typ handelt, handelt es sich tatsächlich um eine Ganzzahl mit einem sehr großen Wertebereich.
    Werte reeller Typen können auf verschiedene Arten in ein Programm geschrieben werden:
    1.456 0.000134 -120.0 65432
    +345 0 -45 127E+12
    -1,5E-5 -1,6E+12 5E4 0,002E-6

    Es wäre ein Fehler, eine reelle Zahl wie folgt zu schreiben:
    .5 (richtig 0,5)
    12. (richtig 12.0 oder 12)

    Eine reelle Zahl in Gleitkommaform (wissenschaftliche Form) wird als Paar geschrieben
    <мантисса>E<порядок>
    Unter dieser Bezeichnung versteht man „die Mantisse multipliziert mit zehn zu einer Potenz gleich der Ordnung“. Zum Beispiel,
    -1,6E+12 entspricht -1,6 1012

    Gültige Operationen:
    - Abtretung;
    - alle Arithmetik: +, - ,*, /;
    - Vergleich:<, >, >=, <=, <>, =.

    Beim Vergleich reeller Zahlen sollten Sie bedenken, dass Sie aufgrund der Ungenauigkeit ihrer Darstellung im Computerspeicher (aufgrund der Unvermeidlichkeit des Rundens) den Versuch vermeiden sollten, die strikte Gleichheit zweier reeller Werte zu bestimmen. Es besteht die Möglichkeit, dass die Gleichheit falsch ist, auch wenn dies tatsächlich nicht der Fall ist.

    Ein Bereich oder (eingeschränkter Typ) ist kein vordefinierter Sprachtyp (z. B. Integer oder Char) und daher ist ihm kein Bezeichner zugeordnet. Bei diesem Typ handelt es sich um Benutzereingaben. Damit können wir einen neuen Typ definieren, der nur Werte aus einem begrenzten Teilbereich eines Basistyps enthält. Der Basistyp kann nur ein Integer-Typ, ein Char-Typ (Zeichen) und jeder der vom Programmierer eingeführten Aufzählungstypen sein.

    Um einen neuen Typ – einen Bereich – einzuführen, müssen Sie im Typbeschreibungsblock TYPE den Namen des eingegebenen Typs und die Grenzen des Bereichs durch das spezielle Bereichssymbol „..“ (zwei Punkte hintereinander) angeben:
    TYP
    Jahrhundert = 1..21; (Unterbereich vom Typ Ganzzahl)
    CapsLetters = "A"."Z"; (Unterbereich vom Typ Char)

    Strukturierte Sprachtypen

    Zu den strukturierten Typen gehören: Array, Datensatz, Satz, Datei usw. Sie alle definieren den Typ (oder die Typen) einer Datenstruktur.

    Array– eine geordnete Struktur von Daten desselben Typs, die sie nacheinander speichert. Das Array muss Dimensionen haben, die bestimmen, wie viele Elemente in der Struktur gespeichert werden. Jedes Element in einem Array kann über seinen Index erreicht werden.

    Der Array-Typ wird durch den Aufbau bestimmt:
    Array [Bereich] von ElementType;

    Der Bereich in eckigen Klammern gibt die Indexwerte des ersten und letzten Elements in der Struktur an. Beispiele für Deklarationen von Typen und Variablen:

    TYPE Vector = Array von Real; VAR V1: Vektor; V2: Array von Byte;
    Hier wird die Variable V1 mithilfe des oben beschriebenen Vektortyps definiert; Der Typ der Variablen V2 wird direkt im Stadium ihrer Beschreibung konstruiert.

    Als Array-Elementtyp können Sie auch ein Array angeben und so mehrdimensionale Strukturen bilden. Eine Beschreibung einer zweidimensionalen Struktur (Matrix) sieht beispielsweise so aus:
    VAR M1: Array von Byte-Arrays; Das Gleiche lässt sich viel kompakter schreiben: VAR M2: array of Byte;
    Hier haben die Arrays M1 und M2 genau die gleiche Struktur – eine quadratische Matrix der Größe 3x3.

    Der Zugriff auf ein Array-Element erfolgt durch Angabe seines Index, zum Beispiel:

    Writeln(V1); (Anzeige des ersten Elements des Arrays V1) readln(M2); (Eingabe des dritten Elements der zweiten Zeile der Matrix M2)
    Damit ist die Lektion zu Datentypen abgeschlossen. Der Text wurde fast vollständig kopiert und eingefügt (der Link befindet sich unten), weil Ich sehe keinen Sinn darin, dieses Material in meinen eigenen Worten zu erzählen. Wenn der Unterschied zwischen den Datentypen zumindest ein wenig klar ist, dann ist das schon gut.

    mob_info