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 :

Pb de raisonnement : A l'aide !


Sujet :

Delphi

  1. #1
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut Pb de raisonnement : A l'aide !
    Bonjour

    J ai un pb typiquement de raisonnement et comme j ai tendances à reinventer la roue, je parts dans tous les sens pour n arriver à Rien !

    Mon pb est le suivant :
    J ai 6 TstringList (de A à F) qui peuvent etre vides.
    Je souhaiterais pouvoir extraire toutes les association possibles.
    Par exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a1    c1  d1  f1
    a2    c2      f2
    a3            f3
    Je n ai rien dans la StringList B

    j aimerais donc obtenir les 18 associations possible (3*2*1*3=18) soit
    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
     
              a1 c1 d1 f1
              a1 c1 d1 f2
              a1 c1 d1 f3
              a1 c2 d1 f1
              a1 c2 d1 f2
              a1 c2 d1 f3
     
              a2 c1 d1 f1
              a2 c1 d1 f2
              a2 c1 d1 f3
              a2 c2 d1 f1
              a2 c2 d1 f2
              a2 c2 d1 f3
     
              a3 c1 d1 f1
              a3 c1 d1 f2
              a3 c1 d1 f3
              a3 c2 d1 f1
              a3 c2 d1 f2
              a3 c2 d1 f3
    je ne suis en rien fige sur l emploi des Tstringlist...

    Je suis ouvert à tout raisonnement car là...je ne sais plus...

    merci pour votre aide

    stephane

  2. #2
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    6 boucles imbriquées et le tour est joué
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  3. #3
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Ben c est evidement ce que j ai pensé au debut mais ici par exemple la list B est vide donc si je fais une boucle à partir de 0...rien ne se passe (list.count-1 = -1 !) et ce qui suit n est plus pris en compte...

  4. #4
    Expert éminent sénior
    Avatar de Paul TOTH
    Homme Profil pro
    Freelance
    Inscrit en
    Novembre 2002
    Messages
    8 964
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 54
    Localisation : France, Paris (Île de France)

    Informations professionnelles :
    Activité : Freelance
    Secteur : High Tech - Éditeur de logiciels

    Informations forums :
    Inscription : Novembre 2002
    Messages : 8 964
    Points : 28 445
    Points
    28 445
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    Ben c est evidement ce que j ai pensé au debut mais ici par exemple la list B est vide donc si je fais une boucle à partir de 0...rien ne se passe (list.count-1 = -1 !) et ce qui suit n est plus pris en compte...
    pourquoi ne pas simplement ajouter une chaîne vide dans la liste B ?
    Developpez.com: Mes articles, forum FlashPascal
    Entreprise: Execute SARL
    Le Store Excute Store

  5. #5
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Pourquoi ?

    Pke je n y ai tout simplement pas pensé !

    MERCI !

    Faut vraiment que j arrete de vouloir sans cesse reinventer la roue !!!

    Donc je vais boucler sur toutes mes listes pour en retenir la taille la plus importante. Je vais completer chaque liste afin qu elle atteigne cette taille

    je vais faire des boucles imbriquees et tester si la valeur est vide ou pas et si elle ne l est pas, effectuer mon traitement...

    merci encore

    stephane

  6. #6
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    Donc je vais boucler sur toutes mes listes pour en retenir la taille la plus importante. Je vais completer chaque liste afin qu elle atteigne cette taille

    je vais faire des boucles imbriquees et tester si la valeur est vide ou pas et si elle ne l est pas, effectuer mon traitement...
    Il faut juste que tu rajoute une chaine vide dans les listes vides, sinon tu va avoir des doublons.
    Pour ton exemple, tu disais (dans ton premier message) :
    "(3*2*1*3=18)", ce qui etait faux. Tu avais en fait 3*0*2*1*0*3=0.
    Si tu complete par une seule chaine vide, tu aura 3*1*2*1*1*3=18
    Si tu complete toutes tes listes, tu aura 3*3*3*3*3*3=729
    Si on concidere 1-3 des vraies valeurs, et X-Z des chaines vides, tu aura dans ton exemple :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
     
    a1  bX  c1  d1  eX  f1
    a2  bY  c2  dY  eY  f2
    a3  bZ  cZ  dZ  eZ  f3
    tu obtiendra, entre autres :
    a1 bY cZ d1 eX f3 (donc a1 f3 car les x y z sont vides), et
    a1 bZ cZ d1 eZ f3 (donc a1 f3 aussi)

  7. #7
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Citation Envoyé par guillemouze Voir le message
    tu obtiendra, entre autres :
    a1 bY cZ d1 eX f3 (donc a1 f3 car les x y z sont vides), et
    a1 bZ cZ d1 eZ f3 (donc a1 f3 aussi)
    Désolé mais là j'ai pas compris, ces deux series sont identiques non ?

  8. #8
    Membre expérimenté Avatar de guillemouze
    Profil pro
    Inscrit en
    Novembre 2004
    Messages
    876
    Détails du profil
    Informations personnelles :
    Âge : 41
    Localisation : France, Loire Atlantique (Pays de la Loire)

    Informations forums :
    Inscription : Novembre 2004
    Messages : 876
    Points : 1 448
    Points
    1 448
    Par défaut
    Citation Envoyé par sp2308 Voir le message
    Désolé mais là j'ai pas compris, ces deux series sont identiques non ?
    C'est justement ce que je veux te montrer, je vais te le refaire en plus concret :

    imaginons que ton code soit le suivant (les stringlist sont sa, sb, sc , sd, se, sf):
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    for a := 0 to sa.Count-1 do
      for b := 0 to sb.Count-1 do
        for c := 0 to sc.Count-1 do
          for d := 0 to sd.Count-1 do
            for e := 0 to se.Count-1 do
              for f := 0 to sf.Count-1 do
                Result.Add(sa[a] + sb[b] + sc[c] + sd[d] + se[e] + sf[f]);
    et que tes listes soient les suivantes (en les completant toutes avec nMax=3 elements) :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    sa = ('a1', 'a2', 'a3')
    sb = ('b1', '', '')
    sc = ('', '', '')
    sd = ('d1', 'd2', '')
    se = ('', '', '')
    sf = ('f1', 'f2', 'f3')
    alors,
    pour a=1, b=2, c=2, d=1, f=3, tu obtiendra 'a1d1f3', et
    pour a=1, b=3, c=2, d=1, f=3, tu obtiendra 'a1d1f3' aussi, donc tu aura des doublons dans ton résultat. Par contre, si tu ne fait qu'ajouter une seule chaîne vide dans les listes qui n'ont aucun élément, tu n'aura pas de doublon.

    EDIT: oups, j'ai décalé les indices de 1, mais le principe est le même.

  9. #9
    Membre actif
    Profil pro
    Inscrit en
    Décembre 2007
    Messages
    549
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Décembre 2007
    Messages : 549
    Points : 226
    Points
    226
    Par défaut
    Ok merci, j ai saisi ce que tu voulais dire.

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

Discussions similaires

  1. Aide en ligne
    Par étoile dans le forum Composants VCL
    Réponses: 2
    Dernier message: 07/08/2002, 14h00
  2. Ajouter une aide
    Par Mailgifson dans le forum C++Builder
    Réponses: 5
    Dernier message: 12/06/2002, 13h32
  3. Besoin d'aide pour l'I.A. d'un puissance 4
    Par Anonymous dans le forum C
    Réponses: 2
    Dernier message: 25/04/2002, 17h05
  4. Une petite aide pour les API ?
    Par Yop dans le forum Windows
    Réponses: 2
    Dernier message: 04/04/2002, 21h45

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