Tipo enumerato. Tutti i tipi di dati e il tipo enum Pascal più comunemente utilizzato

Un tipo enumerato viene specificato direttamente enumerando tutti i valori che una variabile può assumere. di questo tipo. Ogni valore è una costante del suo tipo e può appartenere solo a uno dei tipi enumerati definiti nel programma. Un tipo enumerato è descritto nella sezione relativa alla dichiarazione del tipo, che inizia con la parola chiave type. Ogni valore è denominato da un identificatore e si trova in un elenco racchiuso tra parentesi, ad esempio:

Tipo Colori = (rosso, bianco, blu); Giorni = (lun, mar, mer, gio, ven, sab, dom);

Il programmatore combina in un gruppo, secondo alcune caratteristiche, l'intero insieme di valori che compongono il tipo enumerato. L'uso di tipi enumerati rende i programmi più leggibili. I tipi enumerati aumentano l'affidabilità dei programmi essendo in grado di controllare i valori ricevuti dalle variabili corrispondenti.

Le variabili di qualsiasi tipo enumerato possono essere dichiarate senza prima dichiarare quel tipo, ad esempio:

Var TextColor: (nero, bianco, verde);

I valori in un tipo enumerato sono costanti. Le azioni su di esse obbediscono alle regole applicabili alle costanti. Sono numerati a partire da 0 nell'ordine in cui compaiono nella descrizione. Gli operatori relazionali sono applicabili a tutti i tipi enumerati (se entrambi gli operandi sono dello stesso tipo). L'ordine è stabilito dalla sequenza in cui sono enumerate le costanti.

Per argomenti di tipo ordinale, sono disponibili le seguenti funzioni predefinite:

  • succ(X) - accanto a X
  • pred(X) - X precedente
  • ord(X) – numero ordinale di X

È consentita anche la conversione inversa: qualsiasi espressione di tipo WORD può essere convertita in un valore di tipo enumerato, purché il valore dell'espressione intera non superi la cardinalità del tipo enumerato. Questa conversione si ottiene usando una funzione dichiarata automaticamente con un nome di tipo enumerato.

Nel programma possono essere introdotte anche variabili di qualsiasi tipo che non corrispondono a nessuno dei tipi standard. Tale tipo viene specificato enumerando i valori nella dichiarazione del tipo; ognuno di questi valori può essere assunto da una variabile di questo tipo dichiarata successivamente nel programma. La forma generale della descrizione del tipo enumerato:

digitare nm = (parola1, parola2, …, parolaN) ; varw:nm;

qui nm è un identificatore di tipo (arbitrario), word1, word2… sono valori specifici che può assumere la variabile w appartenente al tipo nm. I valori di questo tipo sono considerati ordinati, ovvero la dichiarazione di tipo introduce contemporaneamente l'ordinamento word1< word2 < wordN. Порядковые значения отсчитываются с 0.

Le funzioni ord, pred, succ e le procedure inc e dec possono essere applicate a variabili di tipo enum.

Le operazioni relazionali sono applicabili a tutte le variabili dello stesso tipo scalare: =,<>, <=, >=, <, >.

Una caratteristica delle variabili di tipo enum è che i loro valori non possono essere inseriti dalla tastiera e visualizzati sullo schermo (ma possono essere utilizzati quando si lavora con file digitati).

Esempio 1. digitare color = (rosso, giallo, verde, blu);
È definito qui quel rosso< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

funzione succ(x)

Dato l'elemento x, viene determinata la sequenza ordinata a cui x appartiene e viene restituito l'elemento che segue x in questa sequenza.

Esempio 2. Sia data una sequenza di lettere in ordine alfabetico. Allora succ(A) è B; succ(L) è M, e così via.

Ad esempio 1, succ(rosso) è giallo.

funzione pred(x)

Dato l'elemento x, viene determinata la sequenza a cui x appartiene e viene restituito l'elemento precedente di questa sequenza.

Esempio 3. pred(F) è E; pred(Z) è Y, e così via.

funzione ord(x).

Viene restituito l'elemento numero x nella sequenza.

Esempio 4. ord(rosso) è 0 e ord(verde) è 2.


L'algoritmo del linguaggio Pascal è costruito in modo tale che per operare sulle variabili, di solito è necessario specificarne il tipo. Inoltre, la descrizione del tipo per ogni variabile deve essere fatta prima dell'esecuzione del programma (nella sezione var). Cioè, quando il compilatore viene avviato, il programma riceve prima informazioni su quali tipi di dati funzionerà e solo successivamente esegue qualsiasi azione.
Quindi in Pascal ci sono 3 tipi principali: semplice, strutturato e puntatore. Tuttavia, ogni tipo ha i suoi sottotipi. Per comodità, sono elencati tutti i tipi di dati.

Ogni tipo ha il proprio intervallo di valori. Di seguito sono riportati gli intervalli per semplice tipo

I tipi più comunemente usati numero intero,vero,longint,byte,corda,booleano E char poiché di solito nei compiti non è indicato quali tipi specifici dovrebbero essere usati per la risoluzione. Fai attenzione quando usi i tipi e tieni d'occhio gli intervalli consentiti per ogni tipo. Ad esempio, ai numeri frazionari non può essere assegnato il tipo intero e il tipo char può essere solo un carattere (ad esempio, la variabile f:=gfgfgf non può essere char)
Ora su come descrivere il tipo. Come accennato in precedenza, agli operatori viene assegnato un tipo all'inizio del programma (si può anche dire prima dell'inizio del programma). Quindi, i tipi sono descritti nella sezione var, che si trova prima dell'inizio del programma (cioè prima dell'inizio). Considera un semplice esempio
varx,u,yu,i:intero;
s,f:reale;
g:stringa;
inizio
....
FINE. Come puoi vedere dall'esempio, il modello di descrizione del tipo ha questo aspetto
operatore1, operatore2: tipo; Come hai già notato, non è necessario descrivere ogni singolo operatore, se il tipo è generico, è sufficiente elencarli separati da virgole. Inoltre, non è necessario passare a una nuova riga dopo ogni tipo, questo viene fatto qui semplicemente per facilitare la lettura del codice. In generale, il codice dovrebbe essere leggibile e ben percepito, quindi si consiglia di combinare operatori di tipo generico e scrivere ogni tipo da una nuova riga.

Descrizione e uso

Un tipo enumerato è definito come un insieme di identificatori che, dal punto di vista del linguaggio, svolgono lo stesso ruolo delle normali costanti denominate, ma sono associati a quel tipo. La descrizione classica di un tipo di enumerazione in Pascal è la seguente:

Tipo Cardsuit = (fiori, quadri, cuori, picche) ;

Qui viene dichiarato il tipo di dati Cardsuit, i cui valori possono essere una qualsiasi delle quattro costanti elencate. Una variabile di tipo Cardsuit può assumere uno dei valori fiori, quadri, cuori, picche , è consentito confrontare valori di tipo enum per uguaglianza o disuguaglianza, nonché utilizzarli in dichiarazioni di selezione (in Pascal - caso) come valori che identificano le opzioni.

L'uso di enum ti consente di fare codici sorgente i programmi sono più leggibili, in quanto consentono di sostituire i "numeri magici" che codificano determinati valori con nomi leggibili.

Sulla base di enumerazioni in alcune lingue, è possibile creare set di caratteri. In tali casi, un set è inteso (e descritto) come una raccolta non ordinata di valori univoci di tipo enum.

Un tipo enumerato può essere utilizzato nelle dichiarazioni di variabili e parametri formali di funzioni (procedure, metodi). I valori di un tipo enumerato possono essere assegnati alle variabili corrispondenti e passati attraverso i parametri dei tipi corrispondenti nelle funzioni. Inoltre, è sempre supportato il confronto dei valori enumerati per l'uguaglianza e la disuguaglianza. Alcuni linguaggi supportano anche altri operatori di confronto per valori di tipi enumerati. Il risultato del confronto di due valori enumerati in tali casi è determinato, di norma, dall'ordine di questi valori nella dichiarazione del tipo: il valore che compare prima nella dichiarazione del tipo è considerato "minore" del valore che avviene dopo. A volte un tipo enumerato o un intervallo di valori di un tipo enumerato può essere utilizzato anche come tipo di indice per un array. In questo caso, c'è un elemento nell'array per ogni valore dell'intervallo selezionato, e vero ordine l'ordine degli elementi corrisponde all'ordine dei valori nella dichiarazione di tipo.

Implementazione

Normalmente, durante la compilazione, i valori di enumerazione sono rappresentati utilizzando numeri interi. A seconda del linguaggio di programmazione specifico, tale rappresentazione può essere completamente nascosta al programmatore o disponibile utilizzando determinate "soluzioni alternative" (ad esempio, conversione forzata di un valore di tipo enum in un valore di tipo "intero"), o addirittura controllato dal programmatore (in tali casi, il programmatore ha la possibilità di specificare esplicitamente con quali numeri verranno codificati tutti o alcuni valori del tipo enum. Tutte le opzioni hanno i loro lati positivi e negativi. Da un lato, la possibilità di utilizzare i valori numerici delle costanti che compongono il tipo di enumerazione, soprattutto quando se ne abusa, priva l'uso di questi tipi e crea il pericolo di errori (quando si utilizzano valori numerici per cui non ci sono costanti corrispondenti nel tipo). D'altra parte, la gestione esplicita del valore fornisce alcune funzionalità aggiuntive. Ad esempio, consente di utilizzare i tipi enum durante l'organizzazione di un'interfaccia con moduli scritti in altre lingue, se utilizzano o restituiscono valori con codifica intera da un set predefinito.

Un'altra possibilità offerta dai tipi enumerati a livello di implementazione del linguaggio è il risparmio di memoria. Con un tipo enum piccolo, bastano pochi bit per memorizzare un valore di questo tipo (il tipo Cardsuit sopra richiede solo due bit per valore, mentre un numero intero standard sulle architetture più utilizzate richiede 32 bit - 16 volte di più), e il compilatore può utilizzare questo fatto per compattare l'archiviazione dei dati in memoria. Ciò può essere particolarmente importante se più valori di tipi enum sono archiviati in un singolo record: la compattazione dei record durante l'elaborazione di un numero elevato di essi può liberare molta memoria. Tuttavia, va notato che i compilatori di solito non implementano questa funzionalità, almeno negli ultimi tempi, quando la memoria del computer è diventata molto più economica.

Critica

Il tipo di enumerazione è tradizionale per i linguaggi di programmazione sviluppati, è ampiamente utilizzato ed è spesso dato per scontato. Tuttavia, anche questo tipo non è privo di critiche da parte di teorici e professionisti della programmazione. Pertanto, durante lo sviluppo del linguaggio di programmazione Oberon, i tipi enumerati sono stati inclusi nell'elenco delle funzionalità che sono state rimosse dal linguaggio. Niklaus Wirth, il progettista del linguaggio, ha citato i seguenti motivi:

D'altra parte, ad esempio, in Java, che inizialmente non conteneva un tipo enumerato, questo tipo è stato successivamente introdotto per ragioni non solo di comodità, ma anche di affidabilità: il problema dell'utilizzo di gruppi di costanti denominate anziché di enumerazioni è che non esiste non c'è alcun controllo da parte del compilatore sull'unicità dei valori costanti, così come la possibilità di assegnare casualmente valori a variabili che non corrispondono a nessuna di queste costanti.

Descrizione delle enumerazioni in varie lingue

Ada

Enum cardsuit (CLUBS, DIAMONDS, HEARTS, SPADES);

I linguaggi dinamici, debolmente tipizzati con sintassi simile a C (ad es. Perl o JavaScript) generalmente non hanno enumerazioni.

C++

C#

Enum Cardsuit (fiori, quadri, picche, cuori);

Giava

Enum Cardsuit (fiori, quadri, picche, cuori)

Haskell

In alcuni linguaggi di programmazione (ad esempio Haskell), le enumerazioni possono essere emulate utilizzando i tipi algebrici. Ad esempio, un tipo booleano contenente due identificatori per rappresentare i valori di verità è codificato in questo modo:

Dati Bool = Falso | VERO

Appunti


Fondazione Wikimedia. 2010 .

Wikipedia

Per motivi tecnici, Bool reindirizza qui. Puoi leggere di Bool qui: stdbool.h. Il tipo di dati booleano (ing. Boolean o logical data type) è un tipo di dati primitivo in informatica che può richiedere due possibili ... Wikipedia

Nella teoria della programmazione, qualsiasi tipo i cui valori sono valori di qualche altro tipo racchiusi in costruttori di tipo algebrico. In altre parole, un tipo di dati algebrico ha un insieme di costruttori di tipi, ognuno dei quali... ... Wikipedia

Integer, tipo di dati intero (inglese Integer), in informatica, uno dei tipi di dati più semplici e comuni nei linguaggi di programmazione. Utilizzato per rappresentare numeri interi. L'insieme dei numeri di questo tipo è... ... Wikipedia

Un tipo primitivo (incorporato, base) è un tipo di dati fornito da un linguaggio di programmazione come unità incorporata di base del linguaggio. A seconda della lingua e della sua implementazione, l'insieme di tali tipi può variare notevolmente. È determinato da ... ... Wikipedia

Questo termine ha altri significati, vedi Set (significati). Un insieme è un tipo e una struttura di dati in informatica, è un'implementazione dell'insieme di oggetti matematici. Imposta tipo di dati consente di memorizzare un numero limitato di valori... ... Wikipedia

Alcuni linguaggi di programmazione forniscono un tipo di dati speciale per i numeri complessi. La presenza di un tipo integrato semplifica l'archiviazione di valori complessi e calcoli su di essi. Contenuti 1 Aritmetica su complesso 2 Supporto nelle lingue ... Wikipedia

Per migliorare questo articolo tecnologie dell'informazione desiderabile?: Trovare e disporre sotto forma di note a piè di pagina collegamenti a fonti autorevoli che confermino quanto scritto. Dopo aver inserito le note a piè di pagina, rendile più accurate su ... Wikipedia

Come è organizzato il tipo di dati enumerato e intervallo di Pascal? Qualsiasi tipo di dato strutturato nel linguaggio Pascal è caratterizzato da un insieme dei suoi elementi costitutivi. Una costante o variabile di questo tipo contiene sempre più componenti, ognuno dei quali può essere anche di tipo strutturato. Questo ci ricorda l'annidamento dei tipi.

Il linguaggio Pascal include i seguenti tipi strutturati: stringhe, array, record, set, file. Ma prima di procedere allo studio di questi tipi, considereremo due tipi di dati ordinali: enumerato e intervallo.

Tipo enumerato Pascal:

tipo di dati enumeratoè una sequenza ordinata di costanti scalari che compongono quel tipo. Come valore di ciascuna delle costanti, usiamo il suo nome. I nomi delle diverse costanti sono separati da virgole e l'insieme di costanti che hanno un tipo enumerato è posto tra parentesi.

Nel processo di creazione di un programma, potremmo aver bisogno di unire in un gruppo, secondo un criterio, un insieme di valori di tipo enumerato. Ad esempio, il tipo enum ZnakZodiaka (segno zodiacale) include i valori scalari Forno, Strelec, Kozerog, Bliznecy, Vesy (Ariete, Sagittario, Capricorno, Gemelli, Bilancia); tipo enumerato Planeta (Pianeta) combina valori scalari Mercurio, Venera, Terra, Marte (Mercurio, Venere, Terra, Marte). La dichiarazione del tipo enumerato si verifica nella sezione della dichiarazione del tipo:

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

Le variabili di tipo scalare dichiarate nella sezione type vengono dichiarate utilizzando i nomi dei tipi:

Planeta = (Mercurio, Venera, Terra, Marte); var Solnsystem: Planeta;

Pertanto, la variabile Solnsystem può assumere i seguenti valori: Mercurio, Venera, Terra o Marte. Inoltre, le variabili di un tipo enumerato possono essere dichiarate in una sezione var:

Sistema solare: Mercurio, Venere, Terra, Marte;

Come possiamo vedere, i nomi dei tipi non sono più presenti qui e le variabili sono una raccolta di valori di tipo enumerati. L'operatore di assegnazione ":=" può essere applicato alle variabili del tipo in questione

Sistema solare:= Mercurio;

La sequenza di valori di un tipo enumerato viene numerata automaticamente, partendo da zero:

Planeta = (Mercurio, Venera, Terra, Marte);

In questo esempio Mercurio è 0, Venera è 1, la Terra è 2, Marte è 3.

Tipo di dati intervallo Pascal:

Un intervallo di valori con qualsiasi tipo ordinale è definito come tipo di dati intervallo. Il segmento è impostato nell'intervallo dal valore minimo delle costanti al massimo, che sono separate l'una dall'altra da due punti "..". Le costanti possono essere costanti intere, carattere, booleane o enumerate. Il tipo di base è il tipo scalare su cui è specificato il segmento.