Tipo enumerado. Todos os tipos de dados e o tipo de enum Pascal mais comumente usado

Um tipo enumerado é especificado diretamente enumerando todos os valores que a variável pode assumir. deste tipo. Cada valor é uma constante do seu próprio tipo e pode pertencer apenas a um dos tipos enumerados especificados no programa. Um tipo enumerado é descrito na seção de declaração de tipo, que começa com a palavra de função type. Cada valor é nomeado por algum identificador e está localizado em uma lista entre parênteses, por exemplo:

Tipo Cores = (vermelho, branco, azul); Dias = (Seg, Ter, Quarta, Qui, Sex, Sábado, Dom);

O programador combina em um grupo, de acordo com alguma característica, todo o conjunto de valores que compõem o tipo enumerado. O uso de tipos enumerados torna os programas mais visuais. Os tipos enumerados aumentam a confiabilidade dos programas, permitindo controlar os valores que as variáveis ​​​​correspondentes recebem.

Variáveis ​​de qualquer tipo enumerado podem ser declaradas sem primeiro declarar esse tipo, por exemplo:

Var TextColor: (preto, branco, verde);

Os valores incluídos em um tipo enumerado são constantes. As ações neles seguem as regras que se aplicam às constantes. Eles são numerados a partir de 0 na ordem em que aparecem na descrição. Os operadores relacionais se aplicam a todos os tipos enumerados (se ambos os operandos forem do mesmo tipo). A ordem é estabelecida pela sequência de listagem das constantes.

Para argumentos relacionados a tipos ordinais, existem as seguintes funções predefinidas:

  • succ(X) – próximo a X
  • pred(X) – X anterior
  • ordem (X) – número ordinal de X

A conversão reversa também é possível: qualquer expressão do tipo WORD pode ser convertida para um valor do tipo enum, a menos que o valor da expressão inteira exceda a cardinalidade do tipo enum. Esta conversão é obtida usando uma função declarada automaticamente com o nome do tipo enumerado.

Você também pode inserir variáveis ​​de qualquer tipo no programa que não correspondam a nenhum dos tipos padrão. Tal tipo é especificado por uma enumeração de valores ao declarar o tipo; qualquer um desses valores pode ser assumido por uma variável deste tipo declarada posteriormente no programa. Forma geral da descrição do tipo enumerado:

digite nm = (palavra1, palavra2,…, palavraN); var w:nm;

aqui nm é um identificador de tipo (arbitrário), palavra1, palavra2... são valores específicos que a variável w, pertencente ao tipo nm, pode assumir. Valores deste tipo são considerados ordenados, ou seja, a descrição do tipo introduz simultaneamente a ordem da palavra1< word2 < wordN. Порядковые значения отсчитываются с 0.

Você pode usar as funções ord, pred, succ e os procedimentos inc e dec em variáveis ​​de tipo de enumeração.

As operações relacionais são aplicáveis ​​a todas as variáveis ​​do mesmo tipo escalar: =,<>, <=, >=, <, >.

Uma característica especial das variáveis ​​​​do tipo enumeração é que seus valores não podem ser inseridos no teclado e exibidos na tela (mas podem ser usados ​​​​ao trabalhar com arquivos digitados).

Exemplo 1. digite cor = (vermelho, amarelo, verde, azul);
Aqui está definido que vermelho< yellow < green < blue. Переменная типа color может принимать одно из перечисленных значений.

Função succ(x)

Dado um elemento x, a sequência ordenada à qual x pertence é determinada, e o elemento seguinte a x nesta sequência é retornado.

Exemplo 2. Seja dada uma sequência de letras em ordem alfabética. Então succ(A) é B; succ (L) é M, etc.

Por exemplo, 1 succ(vermelho) é amarelo.

função pred(x)

Dado um elemento x, a sequência à qual x pertence é determinada e o elemento anterior desta sequência é retornado.

Exemplo 3. pred(F) é E; pred(Z) é Y, etc.

Função ordem(x)

O número do elemento x na sequência é fornecido.

Exemplo 4: ord(red) é 0 e ord(green) é 2.


O algoritmo da linguagem Pascal é projetado de tal forma que, para operar com variáveis, normalmente é necessário especificar seu tipo. Além disso, a descrição do tipo de cada variável deve ser feita antes da execução do programa (na seção var). Ou seja, ao iniciar o compilador, o programa primeiro recebe informações sobre com quais tipos de dados irá trabalhar e só então executa alguma ação.
Portanto, em Pascal existem 3 tipos principais: simples, estruturado e ponteiro. No entanto, cada tipo tem seus próprios subtipos. Por conveniência, todos os tipos de dados são apresentados em forma de lista.

Cada tipo tem seu próprio intervalo de valores. Abaixo estão os intervalos para simples tipo

Os tipos mais comumente usados inteiro,real,inteiro longo,byte,corda,boleano E Caracteres já que normalmente as tarefas não indicam quais tipos específicos devem ser utilizados para a solução. Tenha cuidado ao usar tipos e preste muita atenção aos intervalos aceitáveis ​​para cada tipo. Por exemplo, números fracionários não podem receber o tipo inteiro e o tipo char pode ter apenas um caractere (por exemplo, a variável f:=gfgfgf não pode ser char)
Agora, sobre como descrever o tipo. Como mencionado acima, os operadores recebem um tipo logo no início do programa (pode-se até dizer antes do início do programa). Portanto, os tipos são descritos na seção var, localizada antes do início do programa (ou seja, antes de começar). Vejamos um exemplo simples
var x,u,yu,i:inteiro;
s,f:real;
g:string;
começar
....
fim. Como você pode ver no exemplo, o modelo de descrição do tipo se parece com isto
operador1, operador2: tipo; Como você já percebeu, não há necessidade de descrever cada operador, se o tipo for geral basta listá-los separados por vírgula. Também não há necessidade de ir para uma nova linha após cada tipo; aqui isso é feito simplesmente para facilitar a leitura do código. Em geral, o código deve ser legível e compreensível, por isso é recomendado combinar operadores de tipo geral e escrever cada tipo em uma nova linha.

Descrição e uso

Um tipo enumerado é definido como um conjunto de identificadores que, em termos de linguagem, têm a mesma função que constantes nomeadas regulares, mas estão associados a esse tipo. A descrição clássica de um tipo de enumeração em Pascal é assim:

Tipo Cardsuit = (paus, ouros, copas, espadas);

Aqui é declarado o tipo de dados Cardsuit, cujos valores podem ser qualquer uma das quatro constantes listadas. Uma variável do tipo Cardsuit pode assumir um dos valores de paus, ouros, copas, espadas; é permitido comparar valores do tipo enumeração para igualdade ou desigualdade, bem como utilizá-los em operadores de seleção (no caso Pascal) como valores que identificam opções.

Usar enumerações permite que você faça códigos-fonte os programas são mais legíveis, pois permitem substituir os “números mágicos” que codificam determinados valores por nomes legíveis.

Os tipos de conjunto podem ser criados com base em enumerações em alguns idiomas. Nesses casos, um conjunto é entendido (e descrito) como uma coleção não ordenada de valores únicos de um tipo de enumeração.

Um tipo enumerado pode ser usado em declarações de variáveis ​​e parâmetros formais de funções (procedimentos, métodos). Os valores de um tipo enumerado podem ser atribuídos às variáveis ​​​​correspondentes e passados ​​​​por parâmetros dos tipos correspondentes para funções. Além disso, as comparações de igualdade e desigualdade de valores do tipo enum são sempre suportadas. Algumas linguagens também suportam outras operações de comparação para valores de tipos enumerados. O resultado da comparação de dois valores enumerados nesses casos é determinado, via de regra, pela ordem desses valores na declaração de tipo - o valor que ocorre anteriormente na declaração de tipo é considerado “menor que” o valor que ocorre mais tarde. Às vezes, um tipo enum ou algum intervalo de valores de um tipo enum também pode ser usado como um tipo de índice para uma matriz. Neste caso, existe um elemento na matriz para cada valor do intervalo selecionado, e ordem real A sequência de elementos corresponde à ordem dos valores na declaração de tipo.

Implementação

Normalmente, os valores de enumeração são representados por números inteiros durante a compilação. Dependendo da linguagem de programação específica, tal representação pode ser completamente escondida do programador, ou acessível a ele usando certas “soluções alternativas” (por exemplo, forçando uma conversão de um valor de enumeração para um valor inteiro), ou mesmo controlada pelo programador ( nesses casos, o programador tem a oportunidade de especificar explicitamente com quais números todos ou alguns valores do tipo de enumeração serão codificados). Todas as opções têm seus lados positivos e negativos. Por um lado, a possibilidade de utilização de valores numéricos das constantes que compõem um tipo de enumeração, principalmente se abusada, vai contra o propósito de utilização desses tipos e cria o risco de erros (quando são utilizados valores numéricos para os quais não há constantes correspondentes no tipo). Por outro lado, o gerenciamento explícito de valor fornece alguns recursos adicionais. Por exemplo, permite usar tipos de enumeração ao organizar uma interface com módulos escritos em outras linguagens, se eles usarem ou retornarem valores codificados em números inteiros de algum conjunto predefinido.

Outra oportunidade que os tipos enumerados oferecem no nível de implementação da linguagem é a economia de memória. Com um tipo de enumeração pequeno, alguns bits são suficientes para armazenar o valor desse tipo (o tipo Cardsuit acima requer apenas dois bits por valor, enquanto um número inteiro padrão na maioria das arquiteturas em uso leva 32 bits - 16 vezes mais), e o o compilador pode usar esse fato para compactar o armazenamento de dados na memória. Isso pode ser especialmente importante se vários valores do tipo enum forem armazenados em um único registro - compactar registros ao processar um grande número deles pode liberar muita memória. No entanto, deve-se notar que os compiladores geralmente não implementam esse recurso, pelo menos recentemente, quando a memória do computador se tornou significativamente mais barata.

Crítica

O tipo de enumeração é tradicional para linguagens de programação desenvolvidas, é amplamente utilizado e muitas vezes é considerado um dado adquirido. No entanto, esse tipo também não deixa de receber críticas de teóricos e profissionais de programação. Assim, durante o desenvolvimento da linguagem de programação Oberon, vários tipos foram incluídos na lista de recursos que foram removidos da linguagem. Niklaus Wirth, o desenvolvedor da linguagem, apresentou os seguintes motivos:

Por outro lado, por exemplo, em Java, que inicialmente não continha um tipo enumerável, esse tipo foi posteriormente introduzido por razões não apenas de conveniência, mas também de confiabilidade: o problema de usar grupos de constantes nomeadas em vez de enumerações é que há não há controle por parte do compilador sobre a unicidade dos valores constantes, e a possibilidade de atribuir acidentalmente valores a variáveis ​​que não correspondam a nenhuma dessas constantes.

Descrição de enumerações em vários idiomas

Ada

Naipe Enum (PAUS, DIAMANTES, CORAÇÕES, ESPADAS);

Linguagens dinâmicas e de tipo fraco com sintaxe semelhante a C (por exemplo, perl ou JavaScript) geralmente não possuem enumerações.

C++

C#

Enum Cardsuit (Paus, Ouros, Espadas, Copas);

Java

Enum Cardsuit (Paus, Ouros, Espadas, Copas)

Haskell

Em algumas linguagens de programação (por exemplo, Haskell), você pode emular enumerações usando tipos algébricos. Por exemplo, é assim que um tipo booleano contendo dois identificadores para representar valores verdade é codificado:

Dados Bool = Falso | Verdadeiro

Notas


Fundação Wikimedia. 2010.

Wikipédia

Por motivos técnicos, Bool é redirecionado aqui. Você pode ler sobre Bool aqui: stdbool.h. O tipo de dados lógico, booleano (tipo de dados booleano ou lógico em inglês) é um tipo de dados primitivo na ciência da computação que pode assumir duas possibilidades ... Wikipedia

Na teoria da programação, qualquer tipo cujos valores são valores de alguns outros tipos, “envolvidos” por construtores de tipo algébrico. Em outras palavras, um tipo de dados algébrico possui um conjunto de construtores de tipo, cada um dos quais... ... Wikipedia

Inteiro, um tipo de dados inteiro (Inglês Integer), na ciência da computação um dos tipos de dados mais simples e comuns em linguagens de programação. Usado para representar números inteiros. O conjunto de números deste tipo é... ... Wikipedia

Um tipo primitivo (integrado, básico) é um tipo de dados fornecido por uma linguagem de programação como uma unidade básica integrada da linguagem. Dependendo da linguagem e de sua implementação, o conjunto desses tipos pode variar bastante. É determinado por... ... Wikipedia

Este termo possui outros significados, veja Conjunto (significados). Um conjunto, um tipo e estrutura de dados em ciência da computação, é uma implementação do conjunto de objetos matemáticos. O conjunto de tipos de dados permite armazenar um número limitado de valores... ... Wikipedia

Algumas linguagens de programação fornecem um tipo de dados especial para números complexos. A presença de um tipo integrado simplifica o armazenamento de quantidades complexas e cálculos sobre elas. Conteúdo 1 Aritmética sobre complexos complexos 2 Suporte em idiomas ... Wikipedia

Para melhorar este artigo tecnologia da Informação desejável?: Encontre e organize, na forma de notas de rodapé, links para fontes confiáveis ​​que confirmem o que está escrito. Depois de adicionar notas de rodapé, adicione outras mais precisas... Wikipedia

Como o tipo de dados enum e intervalo Pascal é organizado? Cada tipo de dados estruturados em Pascal é caracterizado por um conjunto de elementos que o compõem. Uma constante ou variável deste tipo sempre contém vários componentes, cada um dos quais também pode ser de um tipo estruturado. Isso nos lembra do aninhamento de tipos.

A linguagem Pascal inclui os seguintes tipos estruturados: strings, arrays, registros, conjuntos, arquivos. Mas antes de começarmos a estudar esses tipos, consideraremos dois tipos de dados ordinais - enumerados e intervalados.

Tipo de enumeração Pascal:

Tipo de dados enumeradoé uma sequência ordenada de constantes escalares que constituem esse tipo. Usamos seu nome como o valor de cada constante. Os nomes das diferentes constantes são separados por vírgulas e a coleção de constantes que possuem um tipo enumerado é colocada entre parênteses.

No processo de criação de um programa, podemos precisar combinar um conjunto de valores de um tipo enumerado em um grupo de acordo com alguma característica. Por exemplo, o tipo enumerado ZnakZodiaka (Signo do Zodíaco) inclui os valores escalares Forno, Strelec, Kozerog, Bliznecy, Vesy (Áries, Sagitário, Capricórnio, Gêmeos, Libra); O tipo enum Planeta combina os valores escalares Mercúrio, Venera, Terra, Marte. A descrição do tipo enumerado ocorre na seção de declaração de tipo:

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

Variáveis ​​de tipo escalar declaradas na seção de tipo são descritas usando nomes de tipo:

Planeta = (Mercúrio,Vênera,Terra,Marte); var Solnsystem: Planeta;

Assim, a variável Solnsystem pode assumir os seguintes valores: Mercúrio, Venera, Terra ou Marte. Além disso, variáveis ​​que possuem um tipo enumerado podem ser declaradas na seção var:

Sistema Soln: Mercúrio, Venera, Terra, Marte;

Como podemos ver, os nomes dos tipos não estão mais presentes aqui e as variáveis ​​​​são uma coleção de valores de um tipo enumerado. O operador de atribuição “:=” pode ser aplicado a variáveis ​​do tipo em questão.

Sistema Sol:= Mercúrio;

A sequência de valores de um tipo enumerado é numerada automaticamente, começando do zero:

Planeta = (Mercúrio,Vênera,Terra,Marte);

Neste exemplo, Mercúrio tem o valor 0, Venera tem o valor 1, a Terra tem o valor 2 e Marte tem o valor 3.

Tipo de dados de intervalo Pascal:

Um intervalo de valores de qualquer tipo ordinal é definido como um tipo de dados de intervalo. O segmento é definido no intervalo do valor mínimo das constantes ao máximo, que são separados entre si por dois pontos “..”. As constantes podem ser constantes inteiras, de caracteres, lógicas ou enumeradas. O tipo base é o tipo escalar no qual o segmento é especificado.