Os tipos enumeráveis são definidos pelo programador. Possuem uma certa sequência de possíveis valores ordinais que as variáveis daquele tipo poderão assumir.
Exemplo:
program tipo_enum; type TipoEsportes = (Futebol, Basquete, Volei); var Esporte1, Esporte2: TipoEsportes; begin Esporte1 := Futebol; Esporte2 := Basquete; { Perceba que Esporte1 tem o valor Futebol, e nao `Futebol', pois nao se tra ta de um tipo string. } if Esporte1 = Futebol then writeln('O primeiro esporte eh Futebol'); end.
Na prática, eles assumem valores ordinais, por exemplo, no TipoEsportes, Futebol=0, Basquete=1, Volei=2. Isto é implícito para o programador, mas ele pode usar isto, por exemplo, fazendo:
var i: TipoEsportes; for i:= Futebol do Volei do v[i]:= 0;