Aufzählungstyp. Alle Datentypen und der am häufigsten verwendete Pascal-Enum-Typ

Ein Aufzählungstyp wird direkt angegeben, indem alle Werte aufgezählt werden, die die Variable annehmen kann. dieser Art. Jeder Wert ist eine Konstante seines eigenen Typs und kann nur zu einem der im Programm angegebenen Aufzählungstypen gehören. Ein Aufzählungstyp wird im Abschnitt zur Typdeklaration beschrieben, der mit dem Funktionsworttyp beginnt. Jeder Wert wird durch einen Bezeichner benannt und befindet sich in einer Liste in Klammern, zum Beispiel:

Typfarben = (rot, weiß, blau); Tage = (Mo, Di, Mi, Do, Fr, Sa, So);

Der Programmierer fasst gemäß einem Merkmal den gesamten Wertesatz, aus dem der Aufzählungstyp besteht, in einer Gruppe zusammen. Durch die Verwendung von Aufzählungstypen werden Programme visueller. Aufzählungstypen erhöhen die Zuverlässigkeit von Programmen, indem sie es Ihnen ermöglichen, die Werte zu steuern, die entsprechende Variablen erhalten.

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

Var TextColor: (schwarz, weiß, grün);

Die in einem Aufzählungstyp enthaltenen Werte sind Konstanten. Aktionen auf ihnen folgen den Regeln, die für Konstanten gelten. Sie sind beginnend mit 0 in der Reihenfolge nummeriert, in der sie in der Beschreibung erscheinen. Vergleichsoperatoren gelten für alle Aufzählungstypen (wenn beide Operanden vom gleichen Typ sind). Die Reihenfolge wird durch die Reihenfolge der Auflistung der Konstanten festgelegt.

Für Argumente im Zusammenhang mit Ordinaltypen gibt es die folgenden vordefinierten Funktionen:

  • succ(X) – neben X
  • pred(X) – vorheriges X
  • ord(X) – Ordnungszahl von X

Auch die umgekehrte Konvertierung ist möglich: Jeder Ausdruck vom Typ WORD kann in einen Wert eines Aufzählungstyps umgewandelt werden, es sei denn, der Wert des Ganzzahlausdrucks überschreitet die Kardinalität des Aufzählungstyps. Diese Konvertierung wird durch die Verwendung einer automatisch deklarierten Funktion mit dem Namen des Aufzählungstyps erreicht.

Sie können auch Variablen beliebigen Typs in das Programm eingeben, die keinem der Standardtypen entsprechen. Ein solcher Typ wird bei der Typdeklaration durch eine Aufzählung von Werten angegeben; Jeder dieser Werte kann von einer Variablen dieses Typs übernommen werden, die später im Programm deklariert wird. Allgemeine Form der aufgezählten Typbeschreibung:

Typ nm = (Wort1, Wort2, …, WortN) ; var w: nm;

Hier ist nm ein Typbezeichner (beliebig), Wort1, Wort2... sind spezifische Werte, die die Variable w, die zum Typ nm gehört, annehmen kann. Werte dieser Art gelten als geordnet, d.h. Die Typbeschreibung führt gleichzeitig die Reihenfolge von Wort1 ein< word2 < wordN. Порядковые значения отсчитываются с 0.

Sie können die Funktionen ord, pred, succ sowie die Prozeduren inc und dec für Variablen vom Typ Aufzählung verwenden.

Relationale Operationen sind auf alle Variablen desselben Skalartyps anwendbar: =,<>, <=, >=, <, >.

Eine Besonderheit von Variablen vom Typ Aufzählung besteht darin, dass ihre Werte nicht über die Tastatur eingegeben und auf dem Bildschirm angezeigt werden können (aber beim Arbeiten mit typisierten Dateien verwendet werden können).

Beispiel 1. Typ color = (rot, gelb, grün, blau);
Hier wird das Rot definiert< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

Funktion succ(x)

Bei einem gegebenen Element x wird die geordnete Sequenz bestimmt, zu der x gehört, und das Element, das in dieser Sequenz auf x folgt, wird zurückgegeben.

Beispiel 2. Es sei eine Buchstabenfolge in alphabetischer Reihenfolge angegeben. Dann ist succ(A) B; succ(L) ist M usw.

Zum Beispiel ist 1 succ(red) gelb.

Funktion pred(x)

Bei einem gegebenen Element x wird die Sequenz bestimmt, zu der x gehört, und das vorherige Element dieser Sequenz wird zurückgegeben.

Beispiel 3. pred(F) ist E; pred(Z) ist Y usw.

Funktion ord(x)

Angegeben ist die Nummer des Elements x in der Folge.

Beispiel 4: ord(red) ist 0 und ord(green) ist 2.


Der Pascal-Sprachalgorithmus ist so konzipiert, dass Sie zum Arbeiten mit Variablen normalerweise deren Typ angeben müssen. Darüber hinaus muss die Typbeschreibung für jede Variable vor der Ausführung des Programms (im var-Abschnitt) erstellt werden. Das heißt, wenn der Compiler gestartet wird, erhält das Programm zunächst Informationen darüber, mit welchen Datentypen es arbeiten wird, und führt erst dann Aktionen aus.
In Pascal gibt es also drei Haupttypen: einfach, strukturiert und Zeiger. Allerdings hat jeder Typ seine eigenen Untertypen. Der Einfachheit halber werden alle Datentypen in Listenform dargestellt.

Jeder Typ hat seinen eigenen Wertebereich. Nachfolgend finden Sie die Bereiche für einfach Typ

Die am häufigsten verwendeten Typen ganze Zahl,real,longint,Byte,Zeichenfolge,Boolescher Wert Und verkohlen denn in der Regel geben die Aufgaben nicht an, welche konkreten Typen für die Lösung verwendet werden sollen. Seien Sie bei der Verwendung von Typen vorsichtig und achten Sie genau auf die zulässigen Bereiche für jeden Typ. Beispielsweise kann Bruchzahlen nicht der Typ „Ganzzahl“ zugewiesen werden, und der Typ „char“ kann nur aus einem Zeichen bestehen (z. B. kann die Variable „f:=gfgfgf“ nicht „char“ sein).
Nun zur Beschreibung des Typs. Wie oben erwähnt, wird den Operatoren gleich zu Beginn des Programms (man könnte sogar sagen vor dem Start des Programms) ein Typ zugewiesen. Daher werden die Typen im Abschnitt var beschrieben, der sich vor dem Anfang des Programms (also vor begin) befindet. Schauen wir uns ein einfaches Beispiel an
var x,u,yu,i:integer;
s,f:real;
g:string;
beginnen
....
Ende. Wie Sie dem Beispiel entnehmen können, sieht die Typbeschreibungsvorlage folgendermaßen aus
Operator1, Operator2: Typ; Wie Sie bereits bemerkt haben, ist es nicht erforderlich, jeden Operator zu beschreiben. Wenn der Typ allgemein ist, reicht es aus, sie durch Kommas getrennt aufzulisten. Es ist auch nicht erforderlich, nach jedem Typ in eine neue Zeile zu wechseln; dies geschieht hier lediglich zur einfacheren Lesbarkeit des Codes. Im Allgemeinen sollte der Code lesbar und verständlich sein. Daher wird empfohlen, allgemeine Typoperatoren zu kombinieren und jeden Typ in eine neue Zeile zu schreiben.

Beschreibung und Verwendung

Ein Aufzählungstyp ist als eine Reihe von Bezeichnern definiert, die sprachlich gesehen dieselbe Rolle wie reguläre benannte Konstanten haben, aber diesem Typ zugeordnet sind. Die klassische Beschreibung eines Aufzählungstyps in Pascal sieht so aus:

Typ Cardsuit = (Kreuz, Karo, Herz, Pik) ;

Hier wird der Cardsuit-Datentyp deklariert, dessen Werte eine der vier aufgeführten Konstanten sein können. Eine Variable vom Typ Cardsuit kann einen der Werte Kreuz, Karo, Herz, Pik annehmen; es ist erlaubt, Werte vom Aufzählungstyp auf Gleichheit oder Ungleichheit zu vergleichen und sie in Auswahloperatoren (im Pascal-Fall) als zu verwenden Werte, die Optionen identifizieren.

Mithilfe von Aufzählungen ist dies möglich Quellcodes Programme sind besser lesbar, da Sie damit die „magischen Zahlen“, die bestimmte Werte kodieren, durch lesbare Namen ersetzen können.

In einigen Sprachen können Satztypen basierend auf Aufzählungen erstellt werden. In solchen Fällen wird eine Menge als eine ungeordnete Sammlung eindeutiger Werte eines Aufzählungstyps verstanden (und beschrieben).

Ein Aufzählungstyp kann in Deklarationen von Variablen und formalen Parametern von Funktionen (Prozeduren, Methoden) verwendet werden. Werte eines Aufzählungstyps können entsprechenden Variablen zugewiesen und über Parameter der entsprechenden Typen an Funktionen übergeben werden. Darüber hinaus werden Gleichheits- und Ungleichheitsvergleiche von Enum-Typwerten immer unterstützt. Einige Sprachen unterstützen auch andere Vergleichsoperationen für Werte von Aufzählungstypen. Das Ergebnis des Vergleichs zweier Aufzählungswerte wird in solchen Fällen in der Regel durch die Reihenfolge dieser Werte in der Typdeklaration bestimmt – der Wert, der früher in der Typdeklaration vorkommt, gilt als „kleiner als“ der Wert, der tritt später ein. Manchmal kann ein Aufzählungstyp oder ein Wertebereich eines Aufzählungstyps auch als Indextyp für ein Array verwendet werden. In diesem Fall gibt es für jeden Wert des ausgewählten Bereichs ein Element im Array und echte Ordnung Die Reihenfolge der Elemente entspricht der Reihenfolge der Werte in der Typdeklaration.

Implementierung

Normalerweise werden Aufzählungswerte während der Kompilierung durch Ganzzahlen dargestellt. Abhängig von der konkreten Programmiersprache kann eine solche Darstellung dem Programmierer entweder vollständig verborgen bleiben oder ihm durch bestimmte „Workarounds“ (zum Beispiel das Erzwingen einer Konvertierung eines Aufzählungswerts in einen ganzzahligen Wert) zugänglich sein oder sogar von ihm gesteuert werden Programmierer (in solchen Fällen hat der Programmierer die Möglichkeit, explizit anzugeben, mit welchen Zahlen alle oder einige Werte des Aufzählungstyps codiert werden). Alle Optionen haben ihre positiven und negativen Seiten. Einerseits macht die Möglichkeit, numerische Werte der Konstanten zu verwenden, aus denen ein Aufzählungstyp besteht, insbesondere bei Missbrauch, den Zweck der Verwendung dieser Typen zunichte und birgt das Risiko von Fehlern (wenn numerische Werte verwendet werden). es gibt keine entsprechenden Konstanten im Typ). Andererseits bietet das explizite Wertemanagement einige zusätzliche Möglichkeiten. Sie können damit beispielsweise Aufzählungstypen verwenden, wenn Sie eine Schnittstelle mit in anderen Sprachen geschriebenen Modulen organisieren, wenn diese ganzzahlig codierte Werte aus einem vordefinierten Satz verwenden oder zurückgeben.

Eine weitere Möglichkeit, die Aufzählungstypen auf der Ebene der Sprachimplementierung bieten, ist die Speichereinsparung. Bei einem kleinen Aufzählungstyp reichen ein paar Bits aus, um den Wert dieses Typs zu speichern (der obige Cardsuit-Typ erfordert nur zwei Bits pro Wert, während eine Standard-Ganzzahl auf den meisten verwendeten Architekturen 32 Bits benötigt – 16-mal mehr), und die Der Compiler kann diese Tatsache nutzen, um die Datenspeicherung im Speicher zu komprimieren. Dies kann besonders wichtig sein, wenn mehrere Werte vom Typ Enum in einem einzigen Datensatz gespeichert sind – das Komprimieren von Datensätzen bei der Verarbeitung einer großen Anzahl davon kann viel Speicher freigeben. Es ist jedoch zu beachten, dass Compiler diese Funktion in der Regel nicht implementieren, zumindest nicht in letzter Zeit, da Computerspeicher deutlich billiger geworden ist.

Kritik

Der Aufzählungstyp ist traditionell für entwickelte Programmiersprachen, wird recht häufig verwendet und oft als selbstverständlich angesehen. Dieser Typ ist jedoch auch von Programmiertheoretikern und -praktikern nicht ohne Kritik. Daher wurden während der Entwicklung der Programmiersprache Oberon aufzählbare Typen in die Liste der Funktionen aufgenommen, die aus der Sprache entfernt wurden. Niklaus Wirth, der Entwickler der Sprache, gab folgende Gründe an:

Andererseits wurde beispielsweise in Java, das ursprünglich keinen aufzählbaren Typ enthielt, dieser Typ später nicht nur aus Gründen der Bequemlichkeit, sondern auch aus Gründen der Zuverlässigkeit eingeführt: Das Problem bei der Verwendung von Gruppen benannter Konstanten anstelle von Aufzählungen besteht darin Es besteht seitens des Compilers keine Kontrolle über die Eindeutigkeit von Wertkonstanten und die Möglichkeit, Variablen versehentlich Werte zuzuweisen, die keiner dieser Konstanten entsprechen.

Beschreibung von Aufzählungen in verschiedenen Sprachen

Ada

Enum-Kartenanzug (CLUBS, DIAMANDS, HEARTS, PIK);

Dynamische, schwach typisierte Sprachen mit C-ähnlicher Syntax (z. B. Perl oder JavaScript) verfügen im Allgemeinen nicht über Aufzählungen.

C++

C#

Enum-Kartenanzug (Kreuz, Karo, Pik, Herz);

Java

Enum-Kartenanzug (Kreuz, Karo, Pik, Herz)

Haskell

In einigen Programmiersprachen (z. B. Haskell) können Sie Aufzählungen mithilfe algebraischer Typen emulieren. So wird beispielsweise ein boolescher Typ codiert, der zwei Bezeichner zur Darstellung von Wahrheitswerten enthält:

Datenbool = Falsch | WAHR

Anmerkungen


Wikimedia-Stiftung. 2010.

Wikipedia

Aus technischen Gründen wird Bool hierher umgeleitet. Über Bool können Sie hier lesen: stdbool.h. Der logische, boolesche Datentyp (engl. Boolean oder logischer Datentyp) ist ein primitiver Datentyp in der Informatik, der zwei mögliche ... Wikipedia annehmen kann

In der Programmiertheorie jeder Typ, dessen Werte die Werte einiger anderer Typen sind, die von Konstruktoren eines algebraischen Typs „umhüllt“ werden. Mit anderen Worten: Ein algebraischer Datentyp verfügt über eine Reihe von Typkonstruktoren, von denen jeder... ... Wikipedia

Ganzzahl, ein ganzzahliger Datentyp (englisch Integer), in der Informatik einer der einfachsten und häufigsten Datentypen in Programmiersprachen. Wird zur Darstellung von Ganzzahlen verwendet. Die Zahlenmenge dieser Art ist... ... Wikipedia

Ein primitiver (integrierter, grundlegender) Typ ist ein Datentyp, der von einer Programmiersprache als grundlegende integrierte Einheit der Sprache bereitgestellt wird. Abhängig von der Sprache und ihrer Implementierung kann die Menge solcher Typen stark variieren. Es wird bestimmt durch... ... Wikipedia

Dieser Begriff hat andere Bedeutungen, siehe Set (Bedeutungen). Eine Menge, ein Typ und eine Datenstruktur in der Informatik, ist eine Implementierung der mathematischen Objektmenge. Mit dem Datentypsatz können Sie eine begrenzte Anzahl von Werten speichern... ... Wikipedia

Einige Programmiersprachen bieten einen speziellen Datentyp für komplexe Zahlen. Das Vorhandensein eines integrierten Typs vereinfacht die Speicherung komplexer Mengen und deren Berechnung. Inhalt 1 Arithmetik über komplexe Komplexe 2 Unterstützung in Sprachen ... Wikipedia

Um diesen Artikel zu verbessern, indem Informationstechnologie wünschenswert?: Suchen und ordnen Sie Links zu maßgeblichen Quellen, die das Geschriebene bestätigen, in Form von Fußnoten an. Fügen Sie nach dem Hinzufügen von Fußnoten genauere hinzu ... Wikipedia

Wie ist der Pascal-Enum- und Intervall-Datentyp organisiert? Jeder strukturierte Datentyp in Pascal zeichnet sich durch eine Reihe von Elementen aus, aus denen er besteht. Eine Konstante oder Variable dieses Typs enthält immer mehrere Komponenten, die jeweils auch von strukturiertem Typ sein können. Das erinnert uns an die Verschachtelung von Typen.

Die Pascal-Sprache umfasst die folgenden strukturierten Typen: Zeichenfolgen, Arrays, Datensätze, Mengen, Dateien. Bevor wir jedoch mit der Untersuchung dieser Typen beginnen, betrachten wir zwei ordinale Datentypen – Aufzählungs- und Intervalldatentypen.

Aufzählungstyp Pascal:

Aufgezählter Datentyp ist eine geordnete Folge von Skalarkonstanten, aus denen dieser Typ besteht. Wir verwenden ihren Namen als Wert jeder Konstante. Die Namen verschiedener Konstanten werden durch Kommas getrennt und die Auflistung der Konstanten, die einen Aufzählungstyp haben, wird in Klammern gesetzt.

Beim Erstellen eines Programms müssen wir möglicherweise eine Reihe von Werten eines Aufzählungstyps entsprechend einem bestimmten Merkmal in einer Gruppe zusammenfassen. Beispielsweise umfasst der Aufzählungstyp ZnakZodiaka (Sternzeichen) die Skalarwerte Oven, Strelec, Kozerog, Bliznecy, Vesy (Widder, Schütze, Steinbock, Zwillinge, Waage); Der Enum-Typ Planeta vereint die Skalarwerte Merkur, Venera, Erde, Mars. Die Beschreibung des Aufzählungstyps erfolgt im Abschnitt Typdeklaration:

ZnakZodiaka=(Oven,Strelec,Kozerog,Bliznecy,Vesy);

Im Typabschnitt deklarierte Skalartypvariablen werden mithilfe von Typnamen beschrieben:

Planeta = (Merkur, Venera, Erde, Mars); var Sonnensystem: Planeta;

Somit kann die Sonnensystemvariable folgende Werte annehmen: Merkur, Venera, Erde oder Mars. Außerdem können Variablen, die einen Aufzählungstyp haben, im Abschnitt var deklariert werden:

Sonnensystem: Merkur, Venera, Erde, Mars;

Wie wir sehen, gibt es hier keine Typnamen mehr und Variablen sind eine Sammlung von Werten eines Aufzählungstyps. Der Zuweisungsoperator „:=“ kann auf Variablen des betreffenden Typs angewendet werden.

Sonnensystem:= Merkur;

Die Wertefolge eines Aufzählungstyps wird automatisch beginnend bei Null nummeriert:

Planeta = (Merkur, Venera, Erde, Mars);

In diesem Beispiel hat Merkur einen Wert von 0, Venera hat einen Wert von 1, Erde hat einen Wert von 2 und Mars hat einen Wert von 3.

Intervalldatentyp Pascal:

Als Intervalldatentyp wird ein Wertebereich eines beliebigen Ordinaltyps definiert. Das Segment wird im Bereich vom Minimalwert der Konstanten bis zum Maximalwert eingestellt, die durch einen Doppelpunkt „..“ voneinander getrennt sind. Konstanten können Ganzzahl-, Zeichen-, logische oder Aufzählungskonstanten sein. Der Basistyp ist der Skalartyp, auf dem das Segment angegeben ist.