IdentifiantMot de passe
Loading...
Mot de passe oublié ?Je m'inscris ! (gratuit)
Navigation

Inscrivez-vous gratuitement
pour pouvoir participer, suivre les réponses en temps réel, voter pour les messages, poser vos propres questions et recevoir la newsletter

Langage Delphi Discussion :

Boucle : pour chaque élément d'un ensemble ?


Sujet :

Langage Delphi

  1. #1
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut Boucle : pour chaque élément d'un ensemble ?
    Bonjour,
    Je m'interesse depuis peut à la manipulation des ensemble et me demandait si il était prévu de pourvoir faire une boucle qui execute du code pour chaque élément d'un ensemble.

    Bien sur, il est possible de se débrouiller :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    procedure TForm1.Button4Click(Sender: TObject);
    type
      Ttruc=(bla,blabla,blablabla);
      Ttrucs=set of Ttruc;
    var
      truc:Ttruc;
      E:Ttrucs;
    begin
    E:=[bla,blablabla];
    for truc:= bla to blablabla do
     if truc in E then begin
       //code .....
     end;
    Je peux fonctionner comme ca mais je me demandait simplement si il n'y avait pas des solutions prévues. du genre :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    //code qui ne fonctionne pas:
    for truc in E do
       .....

  2. #2
    Membre averti

    Homme Profil pro
    Inscrit en
    Octobre 2003
    Messages
    908
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : Octobre 2003
    Messages : 908
    Points : 447
    Points
    447
    Par défaut
    Je ne suis pas sur qu'un tel code existe, mais tu peux combiner une boucle "pour" avec un "case" qui lui peut gerer des intervales.

  3. #3
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Sous Delphi 2005 c'est possible :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
    32
    33
     
    type
     
      TMyThing = (one, two, three);
      TMySet   = set of TMyThing;
      TCharSet = set of Char;
     
    var
      MySet:   TMySet;
      MyThing: TMyThing;
     
      CharSet: TCharSet;
      {$IF DEFINED(CLR)} // Indique si on compile pour DOT NET 
      C: AnsiChar;
      {$ELSE}
      C: Char;
      {$IFEND}
     
    begin
     
      MySet := [one, two, three];
      for MyThing in MySet do
       begin
        // Fait qq chose avec MyThing...
       end;
     
     
      CharSet := [#0..#255];
      for C in CharSet do
        begin
          // Fait qq chose avec C...
        end;
    end.
    Mais sur les versions précédentes je ne pense pas.

  4. #4
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Essaie ceci :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    24
    25
    26
    27
    28
    29
    30
    31
     
    program ForSet;
     
    {$APPTYPE CONSOLE}
     
    uses
      SysUtils,TypInfo;
     
    type
      Valeurs=(un,deux,trois,quatre,cinq);
      EnsembleDeValeurs=set of Valeurs;
     
    Const
     cstNombreDeValeurs=5-1;
     
    var
      MonEnsemble : EnsembleDeValeurs;
      InformationDeType : PTypeInfo;
      J : Integer;
     
    begin
     MonEnsemble:=[Un,trois,cinq];
     InformationDeType:=TypeInfo(Valeurs);
     
     For J:=0 to cstNombreDeValeurs do
     begin
      if Valeurs(J) in MonEnsemble
       then Writeln('La valeur ',GetSetElementName(InformationDeType, J),' est dans la variable MonEnsemble.');
     end;
     readln;
    end.
    Tout ce qui utilise InformationDeType peut être supprimé.

  5. #5
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    tu peux combiner une boucle "pour" avec un "case" qui lui peut gerer des intervales.
    Je n'y avait pas pensé mais ca revient un peut au "if in".

    Sous Delphi 2005 c'est possible :
    Pas sous D6, tampis...



    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    For J:=0 to cstNombreDeValeurs do
     begin
      if Valeurs(J) in MonEnsemble
       then Writeln('La valeur ',GetSetElementName(InformationDeType, J),' est dans la variable MonEnsemble.');
     end;
    C'est exactement comme ca que je procede (cf mon post d'origine).
    Je pense que je vais continuer comme ca...

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    GetSetElementName(InformationDeType, J)
    Je ne connaissais pas du tout. Merci !

  6. #6
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    "GetSetElementName" n'est pas reconu par mon D6
    Sais-tu si cette fonction existe sous D6 ?

  7. #7
    Rédacteur


    Profil pro
    Inscrit en
    Janvier 2003
    Messages
    7 171
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Janvier 2003
    Messages : 7 171
    Points : 15 060
    Points
    15 060
    Billets dans le blog
    1
    Par défaut
    Si tu a déclarée l'unité TypInfo dans la clause uses c'est qu'elle n'est pas implmentée sous D6, j'ai testé sous D2005.

  8. #8
    Membre régulier Avatar de monstroplante
    Profil pro
    Inscrit en
    Mai 2004
    Messages
    107
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2004
    Messages : 107
    Points : 76
    Points
    76
    Par défaut
    Alors ce n'est pas implémenté...

    Merci.

+ Répondre à la discussion
Cette discussion est résolue.

Discussions similaires

  1. menu : background-color pour chaque élément ?
    Par evevev dans le forum Mise en page CSS
    Réponses: 6
    Dernier message: 18/10/2009, 17h10
  2. [MySQL] boucle pour chaque entrée dans un champ
    Par boubourse92 dans le forum PHP & Base de données
    Réponses: 1
    Dernier message: 28/11/2008, 01h52
  3. Calcul de la Médiane pour chaque élément d'une table
    Par yuekerobero dans le forum Requêtes
    Réponses: 11
    Dernier message: 30/09/2008, 12h01
  4. [JList] JSlider pour chaque élément
    Par Paniez dans le forum Composants
    Réponses: 7
    Dernier message: 07/08/2008, 13h01
  5. [MySQL] Afficher une icône pour chaque élément trouvé
    Par cdevl32 dans le forum PHP & Base de données
    Réponses: 3
    Dernier message: 11/11/2007, 22h29

Partager

Partager
  • Envoyer la discussion sur Viadeo
  • Envoyer la discussion sur Twitter
  • Envoyer la discussion sur Google
  • Envoyer la discussion sur Facebook
  • Envoyer la discussion sur Digg
  • Envoyer la discussion sur Delicious
  • Envoyer la discussion sur MySpace
  • Envoyer la discussion sur Yahoo