Tipo enumerado. Todos los tipos de datos y el tipo de enumeración de Pascal más utilizado

Un tipo enumerado se especifica directamente enumerando todos los valores que puede tomar una variable. de este tipo. Cada valor es una constante de su tipo y solo puede pertenecer a uno de los tipos enumerados definidos en el programa. Un tipo enumerado se describe en la sección de declaración de tipos, que comienza con la palabra clave type. Cada valor es nombrado por algún identificador y está ubicado en una lista encerrada entre paréntesis, por ejemplo:

Tipo Colores = (rojo, blanco, azul); Días = (lunes, martes, miércoles, jueves, viernes, sábado, domingo);

El programador combina en un grupo, de acuerdo con alguna característica, todo el conjunto de valores que componen el tipo enumerado. El uso de tipos enumerados hace que los programas sean más legibles. Los tipos enumerados aumentan la confiabilidad de los programas al poder controlar los valores que reciben las variables correspondientes.

Las variables de cualquier tipo enumerado se pueden declarar sin declarar primero ese tipo, por ejemplo:

Var TextColor: (negro, blanco, verde);

Los valores en un tipo enumerado son constantes. Las acciones sobre ellos obedecen a las reglas aplicables a las constantes. Están numerados a partir de 0 en el orden en que aparecen en la descripción. Los operadores relacionales son aplicables a todos los tipos enumerados (si ambos operandos son del mismo tipo). El orden lo establece la secuencia en la que se enumeran las constantes.

Para argumentos de tipos ordinales, existen las siguientes funciones predefinidas:

  • succ(X) - al lado de X
  • pred(X) - anterior X
  • ord(X) – número ordinal de X

También se permite la conversión inversa: cualquier expresión de tipo WORD se puede convertir a un valor de un tipo enumerado, siempre que el valor de la expresión entera no supere la cardinalidad del tipo enumerado. Esta conversión se logra mediante el uso de una función autodeclarada con un nombre de tipo enumerado.

Las variables de cualquier tipo que no coincidan con ninguno de los tipos estándar también se pueden introducir en el programa. Dicho tipo se especifica enumerando valores en la declaración de tipo; cualquiera de estos valores puede ser tomado por una variable de este tipo declarada más adelante en el programa. La forma general de la descripción del tipo enumerado:

tipo nm = (palabra1, palabra2, …, palabraN) ; varw:nm;

aquí nm es un identificador de tipo (arbitrario), word1, word2… son valores específicos que puede tomar la variable w perteneciente al tipo nm. Los valores de este tipo se consideran ordenados, es decir, la declaración de tipo introduce simultáneamente el orden de word1< word2 < wordN. Порядковые значения отсчитываются с 0.

Las funciones ord, pred, succ y los procedimientos inc y dec se pueden aplicar a variables de tipo enumeración.

Las operaciones relacionales son aplicables a todas las variables del mismo tipo escalar: =,<>, <=, >=, <, >.

Una característica de las variables de tipo enumeración es que sus valores no se pueden ingresar desde el teclado y mostrar en la pantalla (pero se pueden usar cuando se trabaja con archivos escritos).

Ejemplo 1. type color = (rojo, amarillo, verde, azul);
Se define aquí que rojo< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

funcion succ(x)

Dado el elemento x, se determina la secuencia ordenada a la que pertenece x, y se devuelve el elemento que sigue a x en esta secuencia.

Ejemplo 2. Sea una secuencia de letras en orden alfabético. Entonces succ(A) es B; succ(L) es M, y así sucesivamente.

Por ejemplo 1, succ(rojo) es amarillo.

función presa(x)

Dado el elemento x, se determina la secuencia a la que pertenece x y se devuelve el elemento anterior de esta secuencia.

Ejemplo 3. pred(F) es E; pred(Z) es Y, y así sucesivamente.

función ord(x)

Se devuelve el número de elemento x en la secuencia.

Ejemplo 4. ord(rojo) es 0 y ord(verde) es 2.


El algoritmo del lenguaje Pascal está construido de tal manera que, para operar con variables, normalmente es necesario especificar su tipo. Además, la descripción del tipo de cada variable debe hacerse antes de ejecutar el programa (en la sección var). Es decir, cuando se inicia el compilador, el programa primero recibe información sobre con qué tipos de datos trabajará y solo luego realiza cualquier acción.
Entonces en Pascal hay 3 tipos principales: simple, estructurado y apuntador. Sin embargo, cada tipo tiene sus propios subtipos. Para mayor comodidad, se enumeran todos los tipos de datos.

Cada tipo tiene su propio rango de valores. A continuación se muestran los rangos de simple escribe

Los tipos más utilizados entero,verdadero,entero largo,byte,cuerda,booleano y carbonizarse ya que por lo general en las tareas no se indica que tipos específicos se deben utilizar para la resolución. Tenga cuidado al usar tipos y vigile de cerca los rangos permitidos para cada tipo. Por ejemplo, a los números fraccionarios no se les puede asignar el tipo entero y el tipo char solo puede ser un carácter (por ejemplo, la variable f:=gfgfgf no puede ser char)
Ahora sobre cómo describir el tipo. Como se mencionó anteriormente, a los operadores se les asigna un tipo al comienzo del programa (incluso puede decirlo antes del inicio del programa). Entonces, los tipos se describen en la sección var, que se encuentra antes del comienzo del programa (es decir, antes de comenzar). Considere un ejemplo simple
varx,u,yu,i:entero;
s,f:real;
g: cadena;
comenzar
....
fin. Como puede ver en el ejemplo, la plantilla de descripción de tipo se ve así
operador1, operador2: tipo; Como ya habrás notado, no es necesario describir cada operador, si el tipo es general, basta con enumerarlos separados por comas. Tampoco es necesario pasar a una nueva línea después de cada tipo, esto se hace aquí simplemente para facilitar la lectura del código. En general, el código debe ser legible y bien percibido, por lo que se recomienda combinar operadores de tipo genérico y escribir cada tipo desde una nueva línea.

Descripción y uso

Un tipo enumerado se define como un conjunto de identificadores que, desde el punto de vista del lenguaje, desempeñan el mismo papel que las constantes regulares con nombre, pero están asociadas con ese tipo. La descripción clásica de un tipo de enumeración en Pascal es la siguiente:

Tipo Cardsuit = (tréboles, diamantes, corazones, picas);

Aquí, se declara el tipo de datos Cardsuit, cuyos valores pueden ser cualquiera de las cuatro constantes enumeradas. Una variable tipo Cardsuit puede tomar uno de los valores tréboles, diamantes, corazones, picas, se permite comparar valores tipo enum para igualdad o desigualdad, así como usarlos en declaraciones de selección (en Pascal - caso) como valores que identifican opciones.

El uso de enumeraciones le permite hacer códigos fuente Los programas son más legibles, ya que le permiten reemplazar los "números mágicos" que codifican ciertos valores con nombres legibles.

Sobre la base de enumeraciones en algunos idiomas, se pueden crear juegos de tipos. En tales casos, un conjunto se entiende (y se describe) como una colección desordenada de valores únicos de un tipo de enumeración.

Un tipo enumerado se puede utilizar en declaraciones de variables y parámetros formales de funciones (procedimientos, métodos). Los valores de un tipo enumerado se pueden asignar a las variables correspondientes y pasar a través de parámetros de los tipos correspondientes en funciones. Además, siempre se admite la comparación de los valores enumerados para la igualdad y la desigualdad. Algunos idiomas también admiten otros operadores de comparación para valores de tipos enumerados. El resultado de comparar dos valores enumerados en tales casos está determinado, por regla general, por el orden de estos valores en la declaración de tipo: el valor que aparece antes en la declaración de tipo se considera "menor" que el valor que ocurre más tarde. A veces, un tipo enumerado o algún rango de valores de un tipo enumerado también se puede usar como un tipo de índice para una matriz. En este caso, hay un elemento en la matriz para cada valor del rango seleccionado, y verdadero orden el orden de los elementos corresponde al orden de los valores en la declaración de tipo.

Implementación

Normalmente, durante la compilación, los valores de enumeración se representan mediante números enteros. Dependiendo del lenguaje de programación específico, dicha representación puede estar completamente oculta para el programador, o estar disponible para él usando ciertas "soluciones alternativas" (por ejemplo, conversión forzada de un valor de tipo enumeración a un valor de tipo "entero"), o incluso controlado por el programador (en tales casos, el programador tiene la oportunidad de especificar explícitamente con qué números se codificarán todos o algunos valores del tipo enum. Todas las opciones tienen sus aspectos positivos y negativos. Por un lado, la posibilidad de utilizar los valores numéricos de las constantes que componen el tipo de enumeración, especialmente cuando se abusa, priva del uso de estos tipos y crea el peligro de errores (al utilizar valores numéricos para que no hay constantes correspondientes en el tipo). Por otro lado, la gestión de valor explícito proporciona algunas características adicionales. Por ejemplo, permite usar tipos enum al organizar una interfaz con módulos escritos en otros lenguajes, si usan o devuelven valores codificados en enteros de algún conjunto predefinido.

Otra posibilidad que brindan los tipos enumerados en el nivel de implementación del lenguaje es el ahorro de memoria. Con un tipo de enumeración pequeño, unos pocos bits son suficientes para almacenar un valor de este tipo (el tipo Cardsuit anterior requiere solo dos bits por valor, mientras que un número entero estándar en la mayoría de las arquitecturas utilizadas requiere 32 bits, 16 veces más), y el compilador puede usar este hecho para compactar el almacenamiento de datos en la memoria. Esto puede ser especialmente importante si se almacenan múltiples valores de tipos de enumeración en un solo registro: compactar registros cuando se procesan grandes cantidades de ellos puede liberar mucha memoria. Sin embargo, debe tenerse en cuenta que los compiladores generalmente no implementan esta función, al menos en los últimos tiempos, cuando la memoria de la computadora se ha vuelto mucho más barata.

Crítica

El tipo de enumeración es tradicional para los lenguajes de programación desarrollados, se usa bastante y, a menudo, se da por sentado. Sin embargo, este tipo tampoco está exento de críticas por parte de teóricos y practicantes de la programación. Por lo tanto, al desarrollar el lenguaje de programación Oberon, los tipos enumerados se incluyeron en la lista de funciones que se eliminaron del lenguaje. Niklaus Wirth, el diseñador del lenguaje, citó las siguientes razones:

Por otro lado, por ejemplo, en Java, que inicialmente no contenía un tipo enumerado, este tipo se introdujo posteriormente por razones no solo de conveniencia, sino también de confiabilidad: el problema de usar grupos de constantes nombradas en lugar de enumeraciones es que no No hay control por parte del compilador en cuanto a la unicidad de los valores de las constantes, así como la posibilidad de asignar aleatoriamente valores a variables que no correspondan a ninguna de estas constantes.

Descripción de enumeraciones en varios idiomas.

ada

Enum cardsuit (CLUBES, DIAMANTES, CORAZONES, PICAS);

Los lenguajes dinámicos, débilmente tipificados con sintaxis similar a C (por ejemplo, Perl o JavaScript) generalmente no tienen enumeraciones.

C++

C#

Enum Cardsuit (tréboles, diamantes, picas, corazones);

Java

Enum Cardsuit (tréboles, diamantes, picas, corazones)

Haskell

En algunos lenguajes de programación (por ejemplo, Haskell), las enumeraciones se pueden emular utilizando tipos algebraicos. Por ejemplo, un tipo booleano que contiene dos identificadores para representar valores de verdad se codifica así:

Datos Bool = Falso | Verdadero

notas


Fundación Wikimedia. 2010 .

Wikipedia

Por razones técnicas, Bool redirige aquí. Puede leer sobre Bool aquí: stdbool.h. El tipo de datos booleano (eng. Boolean o tipo de datos lógicos) es un tipo de datos primitivo en informática que puede tomar dos posibles ... Wikipedia

En teoría de programación, cualquier tipo cuyos valores son valores de algún otro tipo envueltos en constructores de tipos algebraicos. En otras palabras, un tipo de datos algebraico tiene un conjunto de constructores de tipos, cada uno de los cuales... ... Wikipedia

Integer, tipo de datos entero (Integer inglés), en informática, uno de los tipos de datos más simples y comunes en los lenguajes de programación. Se utiliza para representar números enteros. El conjunto de números de este tipo es ... ... Wikipedia

Un tipo primitivo (incorporado, base) es un tipo de datos proporcionado por un lenguaje de programación como una unidad básica incorporada del lenguaje. Dependiendo del idioma y su implementación, el conjunto de tales tipos puede variar mucho. Está determinado por ... ... Wikipedia

Este término tiene otros significados, ver Set (significados). Un conjunto es un tipo y estructura de datos en informática, es una implementación del conjunto de objetos matemáticos. Establecer tipo de datos le permite almacenar un número limitado de valores... ... Wikipedia

Algunos lenguajes de programación proporcionan un tipo de datos especial para números complejos. La presencia de un tipo incorporado simplifica el almacenamiento de valores complejos y cálculos sobre ellos. Contenidos 1 Aritmética sobre compleja 2 Soporte en lenguajes... Wikipedia

Para mejorar este artículo tecnologías de la información deseable?: Buscar y organizar en forma de notas a pie de página enlaces a fuentes autorizadas que confirmen lo escrito. Habiendo puesto notas al pie, haga más preciso en ... Wikipedia

¿Cómo se organizan los tipos de datos enumerados y de intervalo de Pascal? Cualquier tipo de datos estructurados en el lenguaje Pascal se caracteriza por un conjunto de sus elementos constituyentes. Una constante o variable de este tipo siempre contiene varios componentes, cada uno de los cuales también puede ser de tipo estructurado. Esto nos recuerda al tipo de anidamiento.

El lenguaje Pascal incluye los siguientes tipos estructurados: cadenas, arreglos, registros, conjuntos, archivos. Pero antes de continuar con el estudio de estos tipos, consideraremos dos tipos de datos ordinales: enumerados e intervalos.

Tipo enumerado de Pascal:

Tipo de datos enumerados es una secuencia ordenada de constantes escalares que componen ese tipo. Como valor de cada una de las constantes, usamos su nombre. Los nombres de las diferentes constantes están separados por comas y el conjunto de constantes que tienen un tipo enumerado se coloca entre paréntesis.

En el proceso de creación de un programa, es posible que necesitemos combinar en un grupo, según algún criterio, un conjunto de valores de un tipo enumerado. Por ejemplo, el tipo de enumeración ZnakZodiaka (signo del zodiaco) incluye los valores escalares Oven, Strelec, Kozerog, Bliznecy, Vesy (Aries, Sagittarius, Capricorn, Gemini, Libra); El tipo enumerado Planeta (Planeta) combina valores escalares Mercurio, Venera, Tierra, Marte (Mercurio, Venus, Tierra, Marte). La declaración de tipo enumerada ocurre en la sección de declaración de tipo:

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

Las variables de tipo escalar declaradas en la sección de tipo se declaran usando nombres de tipo:

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

Así, la variable Solnsystem puede tomar los siguientes valores: Mercurio, Venera, Tierra o Marte. Además, las variables de un tipo enumerado se pueden declarar en una sección var:

Solnsystem: Mercurio, Venera, Tierra, Marte;

Como podemos ver, los nombres de tipo ya no están presentes aquí y las variables son una colección de valores de tipo enumerados. El operador de asignación ":=" se puede aplicar a variables del tipo en cuestión

Solnsystem:= Mercurio;

La secuencia de valores de un tipo enumerado se numera automáticamente, comenzando desde cero:

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

En este ejemplo Mercurio es 0, Venera es 1, la Tierra es 2, Marte es 3.

Tipo de datos de intervalo Pascal:

Un rango de valores que tienen cualquier tipo ordinal se define como un tipo de datos de intervalo. El segmento se establece en el rango desde el valor mínimo de las constantes hasta el máximo, que están separados entre sí por dos puntos "..". Las constantes pueden ser constantes enteras, de caracteres, booleanas o enumeradas. El tipo base es el tipo escalar en el que se especifica el segmento.