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

Algorithmes et structures de données Discussion :

Doublons dans un tableau


Sujet :

Algorithmes et structures de données

  1. #1
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut Doublons dans un tableau
    Bonjour à tous (tes),
    si quelqu'un a un algo (en pseudo-code ou en français vernaculaire de préférence) pour supprimer les doublons dans un tableau.
    Je serais preneur.
    Merci d'avance
    Savoir pour comprendre et vice versa.

  2. #2
    Membre expérimenté
    Homme Profil pro
    Chef de projet NTIC
    Inscrit en
    Juillet 2020
    Messages
    352
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 51
    Localisation : France, Moselle (Lorraine)

    Informations professionnelles :
    Activité : Chef de projet NTIC

    Informations forums :
    Inscription : Juillet 2020
    Messages : 352
    Points : 1 376
    Points
    1 376
    Par défaut
    Bonjour,
    Comment ferais-tu toi à la main si tu avais une liste de nombre écrite sur une feuille de papier au crayon en disposant d'un crayon et d'une gomme ?
    Ne ferais-tu pas quelque chose comme :

    «Je commence au début de la liste, je lis le nombre et de tous les nombres qui le suivent j'efface ceux qui ont la même valeur. S'il reste des nombres je passe au suivant et je recommence et s'il n'en reste pas c'est cool j'ai fini.»

    En décrivant ce que tu ferais tu obtiens un «algo, en français vernaculaire qui plus est» directement, même s'il est dit naïf. Après tu le transformes en algo plus «classique» pour au final l'implémenter dans un langage quelconque.
    Ensuite tu peux aussi te creuser la tête et te dire que si la liste est triée tu peux n'effacer que les doublons consécutifs … ou créer une autre liste en y ajoutant qu'une fois chaque valeur, ou …

    Enfin au pire tu demandes à google …

  3. #3
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Merci WhiteCrow, ça aide bien, je devrais m'en sortir.
    Savoir pour comprendre et vice versa.

  4. #4
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Avec des nombres c'est bon.
    Mais je voudrais faire pareil avec des chaînes.
    Et sans passer par les codes ASC (problèmes avec les accents).
    Ne faire que par comparaisons.
    Il va falloir plus que le conseil avisé de "WhiteCrow".
    Merci d'avance.
    Note: Ce n'est pas un devoir scolaire, j'ai passé l'âge.
    Savoir pour comprendre et vice versa.

  5. #5
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Avec des nombres, tu dis que c'est bon.
    Montre comment tu fais avec des nombres (parce que comme dit par WhiteCrow, il y a plein de solutions, et la difficulté est de choisir un plan parmi tous les plans d'attaque).
    Partant d'un truc qui marche avec des nombres, tu devrais pouvoir l'adapter à des chaines. Toutes les fonctions de comparaison (inférieur, inférieur ou égal etc ) marchent aussi bien avec des chaines qu'avec des nombres.
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  6. #6
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Citation Envoyé par tbc92 Voir le message
    Partant d'un truc qui marche avec des nombres, tu devrais pouvoir l'adapter à des chaines. Toutes les fonctions de comparaison (inférieur, inférieur ou égal etc ) marchent aussi bien avec des chaines qu'avec des nombres.
    Hum, ça doit dépendre du langage, en Basic ancestral, on est obligés de passer par les code ASC pour faire du "<, =, >".
    Mais il doit bien y avoir moyen de comparer les chaines entre elles telles quelles.
    Mais comment ? That's the question.
    J'en suis à trois tableaux provisoires (de transfert), j'hésite en mettre cinq de plus.
    Note: je ne dispose que de string$ = et <> string$
    Re-Note: Les chaines ne sont que des noms, ça ne devrait pas mouliner bien longtemps.
    Savoir pour comprendre et vice versa.

  7. #7
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    En VisualBasic, la comparaison de chaines existe. Cf Comparaison de chaines
    Mais tu parles de Basic Ancestral. Tu as un lien vers une documentation ?
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  8. #8
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    @: tbc92:
    Pour te dire combien je suis ancestral, quand j'ai cliqué sur ton lien, on m'a affiché en gros et gras que "Mon navigateur n'est plus compatible". WTF ?!
    La comparaison de chaines, je l'ai (stringA$ = ou <> de stringB$).
    J'en suis là:
    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
     
        a$="aa bb cc dd ee ff bb cc ee aa dd cc bb ee aa " '//Une chaine---
        for x=1 to n '// Mise dans deux tableaux ---
           t$(x)=word$(a$,x): temp$(x)=t$(x)
        next x
    '//---------------
        for x=n to 1 step-1 '//Stockage des index d'égalités
          for a=1 to n
            if t$(x)=temp$(a) then
              k(x)=x
            end if
          next a
        next x
    '//---------------
        for x=1 to n '// Remplacement des cases indexées---
          if k(x)=x then temp$(x)="/": goto [passa]
          def$(x)=t$(x)
          [passa]
        next x
    Et ben ça marche pôô.
    Savoir pour comprendre et vice versa.

  9. #9
    Rédacteur/Modérateur

    Homme Profil pro
    Ingénieur qualité méthodes
    Inscrit en
    Décembre 2013
    Messages
    4 057
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France

    Informations professionnelles :
    Activité : Ingénieur qualité méthodes
    Secteur : Conseil

    Informations forums :
    Inscription : Décembre 2013
    Messages : 4 057
    Points : 9 396
    Points
    9 396
    Par défaut
    Le programme que tu proposes est incomplet. En ligne 3, je vois for x=1 to n .
    et n n'apparaissait pas auparavant. Donc n vaut 0 dans le meilleur des cas.
    Par ailleurs, il doit bien y avoir au début des lignes où tu déclares tes tableaux. Ici ces lignes manquent.

    Donc je répète : Montre comment tu fais avec des nombres.
    Et on ajustera pour des chaines.

    Sinon, je propose ça, qui ne devrait pas être loin de fonctionner :
    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
     
    a$="aa bb cc dd ee ff bb cc ee aa dd cc bb ee aa " '//Une chaine---
    n=15
        for x=1 to n '// Mise dans un seul tableau ---
           t$(x)=word$(a$,x): 
        next x
    for i=1 to n 
      ok_nouveau =1
      for j = 1 to i-1 
         if t$(i) = t$(j) then ok_nouveau=0
      next j
      if ok_nouveau = 1 then 
         nb_dedoub = nb_dedoub+1
         resu$(nb_dedoub) = t$(i)
         print(resu$(nb_dedoub) )	 
      end if   
    next i
    N'oubliez pas le bouton Résolu si vous avez obtenu une réponse à votre question.

  10. #10
    Membre actif
    Homme Profil pro
    Développeur de jeux vidéo
    Inscrit en
    Février 2013
    Messages
    317
    Détails du profil
    Informations personnelles :
    Sexe : Homme

    Informations professionnelles :
    Activité : Développeur de jeux vidéo

    Informations forums :
    Inscription : Février 2013
    Messages : 317
    Points : 233
    Points
    233
    Par défaut
    Après de petites adaptations de syntaxe au langage;
    Et ben ça marche du feu de dios.
    Bravo et merci
    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
     
     
      dim t$(500)
    a$="aa bb cc dd ee ff bb cc ee aa dd cc bb ee aa " '//Une chaine---
    n=15
        for x=1 to n '// Mise dans un seul tableau ---
           t$(x)=word$(a$,x)
        next x
    for i=1 to n
      nouveau =1
      for j = 1 to i-1
         if t$(i) = t$(j) then nouveau=0
      next j
      if nouveau = 1 then
         dedoub = dedoub+1
         resu$(dedoub) = t$(i)
         print(resu$(dedoub))
      end if
    next i
    Je vais pouvoir me débarrasser des 40 lignes de ma procédure avec les codes ASC, un vrai caphanaüm (mais qui marchait, mais pas avec les accents)
    Savoir pour comprendre et vice versa.

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

Discussions similaires

  1. Réponses: 3
    Dernier message: 19/03/2007, 18h29
  2. [Tableaux] Rechercher les doublons dans un tableau
    Par jym_22 dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2006, 09h47
  3. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 18h04
  4. Eliminer les doublons dans un tableau d'entiers
    Par engi dans le forum Algorithmes et structures de données
    Réponses: 18
    Dernier message: 21/03/2006, 13h59
  5. verification de doublons dans un tableau
    Par bohemianvirtual dans le forum C
    Réponses: 11
    Dernier message: 25/05/2002, 12h21

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