Comment récupérer le n ième élément d'un ensemble ?

Signaler
Messages postés
55
Date d'inscription
vendredi 7 septembre 2007
Statut
Membre
Dernière intervention
16 mai 2013
-
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
-
Bonjour à tous.

Soit l'ensemble :

MonEns : set of byte;


Je souhaite à un moment donné de mon traitement récupérer le n ième élément de cet ensemble (les éléments étant par définition ordonnés dedans)

Est-ce possible, et surtout comment procéder ?

Merci !

3 réponses

Messages postés
675
Date d'inscription
jeudi 17 avril 2008
Statut
Membre
Dernière intervention
19 février 2019
13
bonour
ord(n) peut être

Dubois77
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Bonjour

En 5 minutes, montre en main, j'ai écrit vite et bien( ou mal !!! qui sait ) le code suivant si cela peut aider :

program Project1;

{$APPTYPE CONSOLE}

uses
   TypInfo,
   SysUtils;

type
  TMonEnumeration =
    ( meElementParDefaut // Valeur par défaut de l'énumération (=0)
    , meElement1
    , meElement2
    , meElement3
    , meElement4
    , meElement5
    );

function NiemeElement ( const n : integer ) : TMonEnumeration ;
var
  i : integer ;
begin
  Result := meElementParDefaut ;
  for i := Integer(Low(TMonEnumeration)) to Integer(High(TMonEnumeration)) do
  begin
    if (i=n) then Result := TMonEnumeration(i) ;
  end;
end;

procedure ShowElement ( const E : TMonEnumeration ) ;
begin
  writeln( GetEnumName(TypeInfo(TMonEnumeration), integer(E)) );
  // Toutefois, Attention !!!
  // si des valeurs sont affectées à l'énumération, comme ci-dessous,
  // alors il me semble que la fonction GetEnumName ne fonctionnera plus !!
  // TMonEnumeration =
  //  ( meElementParDefaut
  //  , meElement1 = 10
  //  , meElement2 = 13
  //  , meElement3
  //  , meElement4 = 20
  //  , meElement5
  //  );
end;

begin
  try
    ShowElement( NiemeElement(3) );
    readln;
  except
    on E:Exception do
      Writeln(E.Classname, ': ', E.Message);
  end;
end.


N.B. Application console testée sous Delphi 2009 uniquement !

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein
Messages postés
1154
Date d'inscription
samedi 14 août 2004
Statut
Membre
Dernière intervention
5 avril 2012
2
Je n'ai pas précisé dans le post précédent, car cela me semblait aller de soi, qu'il faut utiliser le même principe pour le set.

Cordialement.[hr]"L'imagination est plus importante que le savoir." Albert Einstein