2017-01-16 5 views
1
program 
    Enumeration; 
uses 
    crt; 
type 
    beverage = (coffee, tea, milk, water, coke, limejuice); 
var 
    drink:beverage; 
begin`enter code here` 
    writeln('Which drink do you want?'); 
    writeln('You have ', *** , ' choices'); 
    readkey; 
end. 

Que devrais-je utiliser dans '***' ici pour obtenir le nombre d'éléments dans le type énuméré de boissons en sortie? J'ai utilisé sizeof(), mais il donne la valeur de l'octet de type. J'utilise Lazarus, fyi.Comment obtenir le nombre d'éléments dans un type énuméré en Pascal?

Répondre

3

Succ(Ord(High(beverage))) devrait vous donner le nombre de boissons définies.

+1

Il pourrait être bon d'ajouter un avertissement , que cela n'est correct que si les valeurs que nous ne pas être obligé de "sauter", comme si l'énumération avait eu 'milk = 7' par exemple. –

2

Vous pouvez utiliser ORD et fonction HIGH-LOW:

ord(high(beverage)) - ord(low(beverage)) + 1 

codes:

program 
    Enumeration; 
uses 
    crt; 
type 
    beverage = (coffee, tea, milk, water, coke, limejuice); 
var 
    drink:beverage; 
begin`enter code here` 
    writeln('Which drink do you want?'); 
    writeln('You have ', ord(high(beverage))-ord(low(beverage))+1 , ' choices'); 
    readkey; 
end. 

Résultat:

Which drink do you want? 
You have 6 choices