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

Delphi Discussion :

Manipulation des ensembles. Ajout d'éléments


Sujet :

Delphi

  1. #1
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut Manipulation des ensembles. Ajout d'éléments
    Bonjour
    Je sèche sur un pb de modification du contenu d'un ensemble
    J'ai cherché en vain, ce qui me fait penser que ce que je veux faire n'est pas possible
    Admettons que je déclare cette variable...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    var
      MonEnsemble: set of char;
    ...et que je lui affecte
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonEnsemble:=['A','B','C'];
    Je peux lui ajouter un élément comme ça...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonEnsemble:=MonEnsemble+['D'];
    C'est à dire en faisant MonEnsemble devient MonEnsemble union un autre ensemble, à savoir ['D']
    Mais alors comment faire pour une union avec un autre ensemble dont je ne connais pas, a priori, le contenu...
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonEnsemble:=MonEnsemble+chr(n);
    ne fonctionne pas
    Logique, chr(n) n'est pas un ensemble

    D'où mes questions:
    1) Comment je fais pour ajouter un élément à un ensemble, sans passer par un autre ensemble, un truc du genre 2) Comment je fais pour désigner un élément de l'ensemble, par exemple le 2ème (dans ['A','B','C'], je voudrais récupérer 'B' (un char), et non ['B'], un set of char...

    Merci pour votre aide
    Choisir, c'est renoncer...

  2. #2
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 794
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 794
    Points : 15 206
    Points
    15 206
    Par défaut
    Salustre !
    MonEnsemble:=MonEnsemble+chr(n);
    Ça peut pas le faire, mais
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
      MonEnsemble:=MonEnsemble+[chr(70)];
    se compile sans problème.
    Suis pas allé plus loin.

    HTH,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  3. #3
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Salut Jipété

    Citation Envoyé par Jipété
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonEnsemble:=MonEnsemble+[chr(70)];
    se compile sans problème.
    Eh ben voilà... tout simplement
    Des fois, on bute sur sur pas grand chose, un simple pb de syntaxe
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonEnsemble:=MonEnsemble+[chr(n)];
    ça le fait aussi

    Merci Jipété
    Choisir, c'est renoncer...

  4. #4
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Qqn aurait-il la réponse à la question 2

    Comment je fais pour désigner un élément de l'ensemble, par exemple le 2ème (dans ['A','B','C'], je voudrais récupérer 'B' (un char), et non ['B'], un set of char...
    1 soluce pourrait consister à récupérer tous les éléments de MonEnsemble dans un string

    Concrètement, je voudrais faire un truc du genre
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MaChaine:=string(MonEnsemble)
    dont le résultat serait 'ABC'

    Jipété mon ami, t'aurais pas un chtite ?
    Choisir, c'est renoncer...

  5. #5
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 794
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 794
    Points : 15 206
    Points
    15 206
    Par défaut ajout
    Non, désolé, j'ai jamais joué avec les "Set of ...".

    Mais d'après ce que j'en ai quand même lu ici et là (car je lis tout, ou presque : quand c'est écrit en sms et le reste plein de fautes d'orthographes, je peux pas), je ne comprends pas pourquoi tu parles de ['B'] comme un "set of char".
    Pour moi, c'est un élément de MonEnsemble, qui lui, est un "Set of char".
    Donc 'B' est un char, je dirais. Enfin, je chercherais à partir de là.

    Mais si tu relis ton post original, tu verras qu'il y a des trucs pas clairs pour un lecteur hors contexte, , essaye de reformuler le besoin.

    Il me semble avoir lu + ou - récemment des posts qui causaient de "Set of ..." : p'têt' qu'une 'tite recherche forumesque pourra t'aider également.

    Enfin, je vais tomber la machine :
    1. j'ai la dalle ;
    2. je veux écouter Nicolas Hulot sur France-Inter à 14 h 00 (France métropolitaine).

    Bon app' et mes 2 cts,
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  6. #6
    Membre éclairé
    Profil pro
    Inscrit en
    Octobre 2004
    Messages
    633
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Octobre 2004
    Messages : 633
    Points : 711
    Points
    711
    Par défaut
    Bonjour,

    vite fait sur le gaz:

    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
     
    type
      charset = set of char;
     
    function strFromCharset (var v : charset) : string;
    var
      i : integer;
    begin
      result = '';
      for i:=0 to 255 do
      begin
        if chr(i) in v then result := result + chr(i);
      end;
    end;
     
    ....
    var
      chset : charset;
      s : string;
    ....
      chset = ['A','B','C'];
      s := strFromCharset (chset);
    ....
    (je n'ai pas testé, mais ça devrait marcher, si je ne suis pas trop rouillé en Pascal).

    Bien évidemment, les limites de la boucle dans la fonction, soit
    0 à 255
    peuvent être adaptées à ton cas, mais deviendront alors moins générales
    Compilation sans erreur ne signifie pas programme sans erreur.
    L'indentation n'a pas été imaginée pour faire beau, mais pour faciliter la lecture des programmes.

  7. #7
    Expert éminent sénior

    Avatar de sjrd
    Homme Profil pro
    Directeur de projet
    Inscrit en
    Juin 2004
    Messages
    4 517
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 34
    Localisation : Suisse

    Informations professionnelles :
    Activité : Directeur de projet
    Secteur : Enseignement

    Informations forums :
    Inscription : Juin 2004
    Messages : 4 517
    Points : 10 154
    Points
    10 154
    Par défaut
    L'ajout d'un élément peut être fait plus rapidement (au sens exécution du terme) comme ceci :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    Include(MonEnsemble, chr(n));
    MonEnsemble doit être une variable, pas une propriété, tout comme avec inc et dec. Pour supprimer un élement, utilise Exclude.

    Même chose, pour coder plus rapidement (et plus proprement) la fonction CharSetToStr, je ferais 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
    function CharSetToStr(const CharSet : TSysCharSet) : string;
    var Count : integer;
        C : Char;
    begin
      SetLength(Result, 256);
     
      Count := 0;
      for C := #0 to #255 do if C in CharSet then
      begin
        inc(Count);
        Result[Count] := C;
      end;
     
      SetLength(Result, Count);
     end;
    sjrd, ancien rédacteur/modérateur Delphi.
    Auteur de Scala.js, le compilateur de Scala vers JavaScript, et directeur technique du Scala Center à l'EPFL.
    Découvrez Mes tutoriels.

  8. #8
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Jipété
    Citation Envoyé par Jipété
    je ne comprends pas pourquoi tu parles de ['B'] comme un "set of char".
    Pour moi, c'est un élément de MonEnsemble, qui lui, est un "Set of char".
    Donc 'B' est un char, je dirais. Enfin, je chercherais à partir de là.
    Non !
    ['B'] est un set of char qui ne contient qu'un élément qui est 'B', lui-même étant un char d'indice 66 chr(66)...
    On peut dire par ex que ['B'] est inclus dans ['A','B','C'], ou que ['C'] est un sous-ensemble de ['A','B','C']

    Merci quand même pour tes suggestions et bonne écoute sur FI

    Merci sjrd et thewho... ça commence à s'éclaircir dans ma chtite tête de développeur
    J'essaie ça au + vite
    Choisir, c'est renoncer...

  9. #9
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 794
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 794
    Points : 15 206
    Points
    15 206
    Par défaut
    Yop !
    et bonne écoute sur FI
    Super, ce Nicolas !
    - - -
    Et ça, tu le dirais comment, en français ? :
    C'est à dire en faisant MonEnsemble devient MonEnsemble union un autre ensemble
    C'est c'te phrase qui m'a posé problème.
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  10. #10
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Citation Envoyé par Jipété
    Et ça, tu le dirais comment, en français ? :

    C'est à dire en faisant MonEnsemble devient MonEnsemble union un autre ensemble
    C'est c'te phrase qui m'a posé problème.
    C'est écrit en français
    En Delphi, ça donne
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    MonEnsemble:=MonEnsemble+['D'];
    T'as jamais bossé en maths sur les ensembles : union, intersection ?
    Choisir, c'est renoncer...

  11. #11
    Expert éminent sénior
    Avatar de Jipété
    Profil pro
    Inscrit en
    Juillet 2006
    Messages
    10 794
    Détails du profil
    Informations personnelles :
    Localisation : France, Hérault (Languedoc Roussillon)

    Informations forums :
    Inscription : Juillet 2006
    Messages : 10 794
    Points : 15 206
    Points
    15 206
    Par défaut
    T'as jamais bossé en maths sur les ensembles : union, intersection ?
    Si, mais y a tellement loooooooooongtemps que bon...

    C'est à dire en faisant MonEnsemble devient MonEnsemble union un autre ensemble
    Quand je disais "en français", ça sous-entendait qqchse de grammaticalement correct, un peu comme ça :
    C'est à dire en faisant ce qui est écrit au-dessus dans le bloc de code, MonEnsemble devient MonEnsemble union un_autre_ensemble.
    Mais est-ce que ce que je viens d'écrire correspond à la réalité ?
    --
    jp
    Il a à vivre sa vie comme ça et il est mûr sur ce mur se creusant la tête : peutêtre qu'il peut être sûr, etc.
    Oui, je milite pour l'orthographe et le respect du trait d'union à l'impératif.
    Après avoir posté, relisez-vous ! Et en cas d'erreur ou d'oubli, il existe un bouton « Modifier », à utiliser sans modération
    On a des lois pour protéger les remboursements aux faiseurs d’argent. On n’en a pas pour empêcher un être humain de mourir de misère.
    Mes 2 cts,
    --
    jp

  12. #12
    Membre confirmé
    Avatar de OutOfRange
    Profil pro
    Inscrit en
    Avril 2005
    Messages
    533
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Avril 2005
    Messages : 533
    Points : 474
    Points
    474
    Par défaut
    Jipété, tu me tues !
    (sujet clos)
    Choisir, c'est renoncer...

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

Discussions similaires

  1. [XL-2003] ajout: manipulation des données des séries
    Par garheb dans le forum Macros et VBA Excel
    Réponses: 5
    Dernier message: 28/07/2011, 09h00
  2. Réponses: 1
    Dernier message: 02/06/2011, 16h17
  3. Liste des possibilités de n éléments dans un ensemble à p éléments
    Par fabrice91 dans le forum Algorithmes et structures de données
    Réponses: 12
    Dernier message: 25/01/2011, 20h41
  4. Réponses: 1
    Dernier message: 18/01/2011, 13h27
  5. Comment manipuler des contrôles ajoutés par code
    Par Claude_Azoulai dans le forum VB.NET
    Réponses: 5
    Dernier message: 17/04/2010, 16h30

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