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

C Discussion :

verification de doublons dans un tableau


Sujet :

C

Vue hybride

Message précédent Message précédent   Message suivant Message suivant
  1. #1
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut verification de doublons dans un tableau
    salut a tous,
    je suis en train de me casser la tete voila deux jours sur une betise mais qui n'aboutit nulle part avec moi
    j'espere que quelqu'un pourra m'aider...
    je cree un tableau que j'initialise avec la fonction random et puis je veux verifier que chaque element est bien <>
    mon prog est

    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
     
    # include <stdio.h>
    # include <conio.h>
    # include <stdlib.h>
     
    main ()
    {
    int temp,i,j,tab[10] ;
     
      clrscr () ;
      srandom ((unsigned) time (NULL)) ;
      for (i=0;i<10;i++)//initialisation
        tab[i] = random () % 15 ;
      for (i=0;i<10;i++)//verification
      {
        temp = tab[i] ;
       for (j=0;j<10;j++)
         if (tab[j] == temp) tab[i] = random () % 15 ;
      }
      for (i=0;i<10;i++) //affichage du resultat
        printf ("%d\t",tab[i]) ;
     
    system ("PAUSE") ;
    return 0 ;
    }
    merci beaucoup parce que la j'en peux plus...

  2. #2
    Ol'
    Ol' est déconnecté
    Membre actif
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    56
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Par défaut
    Tu n'as qu'à copier ton tableau, le trier et verifier que tu n'as pas deux éléments consécutifs égaux.

  3. #3
    DrQ
    DrQ est déconnecté
    Membre émérite
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Par défaut
    J'ai une méthode qui marche mais qui n'est pas la plus rapide je pense.

    Avant d'effectuer ton insertion tu fais ça:

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
     
      maValeur = random() % 15;
      i=0;
      while(tab[i]!=maValeur && i<nbElts) i++;
      if(i < nbElts)
        tab[nbElts++] = maValeur;

  4. #4
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut re
    merci le trier j'y ai pense mais j'ai besoin que les chiffres restent desordonnes je vais essayer l'algo de DRQ
    merci

  5. #5
    fd
    fd est déconnecté
    Membre éprouvé
    Profil pro
    Inscrit en
    Mai 2002
    Messages
    131
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mai 2002
    Messages : 131
    Par défaut find
    Regarde les fnc : lsearch() et/ou lfind()

  6. #6
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut alalalala
    DRQ j'essaie ton idee mais je n'arrive pas a la faire fonctionner
    pourrais tu etre un peu plus explicite merci...
    si quelqu'un d'autre a une idee qu'il m'en fasse part parce que la j'ai beau cherche je trouve que dalle
    j'ai meme envoye un mail a mon prof de c qui m'a repondu un truc j'ai rien compris
    tiens juste pour le fun et pour qui ca interesse je vais poster ca reponse ca vaut la peine...et puis on ne sait jamais si quelqu'un a comprend il pourra toujours me l'expliquer!!!
    je mettrai sa reponse en ligne dans la soiree
    en attendant si quelqu'un a une idee qu'il n'hesite surtout pas
    merci

  7. #7
    DrQ
    DrQ est déconnecté
    Membre émérite
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Par défaut
    Mon idée est la suivante :

    Tu récupères ta valeur via le random:
    maValeur = random() % 15;

    Ensuite tu cherches si la valeur est déjà dans le tableau. Pour celà tu parcours le tableau jusque tu trouves la valeur ou que tu arrives au bout de ton tableau.
    i=0;
    while(tab[i]!=maValeur && i<nbElts) i++;


    Si l'élement n'est pas dans ton tableau alors ton index de parcours sera nécessairement plus grand que le nombre d'élément. Ce qui veut dire que tu peux rajouter ton élément à la fin de ton tableau.
    if(i > nbElts) (j'avais fait une faute ici tiens )
    tab[nbElts++] = maValeur;

    Ce qui donne comme résultat final :
    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
     
    # include <stdio.h> 
    # include <conio.h> 
    # include <stdlib.h> 
     
    main () 
    { 
      int temp,i,j,nbElts,tab[10] ; 
     
      clrscr () ; 
      nbElts=0;
      srandom ((unsigned) time (NULL)) ; 
      for (i=0;i<10;i++)//initialisation 
      {
        temp = random () % 15 ; 
        j=0;
        while(tab[j]!=maValeur && j<nbElts) j++; 
        if(j > nbElts) 
          tab[nbElts++] = temp;
      } 
      for (i=0;i<10;i++) //affichage du resultat 
        printf ("%d\t",tab[i]) ; 
     
      system ("PAUSE") ; 
      return 0 ; 
    }
    Si tu veux en savoir plus je te conseille de lire les tutoriels et cours de formation pour apprendre le langage C : http://c.developpez.com/cours/

  8. #8
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut re
    # include <stdio.h>
    # include <conio.h>
    # include <stdlib.h>

    main ()
    {
    int temp,i,j,nbElts,tab[10] ;

    clrscr () ;
    nbElts=0;
    srandom ((unsigned) time (NULL)) ;
    for (i=0;i<10;i++)//initialisation
    {
    temp = random () % 15 ;
    j=0;
    while(tab[j]!=maValeur && j<nbElts) j++; //tu utilises maValeur mais elle n'est pas declaree je suppose que c'est temp?
    if(j > nbElts) //nbElts est toujours a 0 ne faut il pas l'incrementer un moment ou un autre?
    tab[nbElts++] = temp;
    }
    for (i=0;i<10;i++) //affichage du resultat
    printf ("%d\t",tab[i]) ;

    system ("PAUSE") ;
    return 0 ;
    }
    j'essaie mais ca ne marche pas je cherche sur la case que tu m'as donne parce que ca m'a l'air correct mais qu'il y a une erreur quelque part
    si tu la voit avant moi tiens moi au courant merci pour ton aide

  9. #9
    DrQ
    DrQ est déconnecté
    Membre émérite
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Par défaut
    vi je l'ai trouvé :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
     
    if(j == nbElts) //nbElts est toujours a 0 ne faut il pas l'incrementer un moment ou un autre? 
       tab[nbElts++] = temp;
    Excuses pour l'erreur !!!

  10. #10
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut ha bon
    tu es sur que cette reponse m'est destine?
    parce que là je ne te suis plus du tout!!!!!!!!!

  11. #11
    DrQ
    DrQ est déconnecté
    Membre émérite
    Avatar de DrQ
    Profil pro
    Inscrit en
    Mars 2002
    Messages
    388
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Mars 2002
    Messages : 388
    Par défaut
    Et bien après le while, au lieu de mettre if (j < nbElts) il faut mettre if (j == nbElts)

  12. #12
    Membre averti
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Par défaut enfin!!!!
    voici donc la version final de mon petit probleme
    je remercie specialement DRQ pour m'avoir aider et repondu

    # include <stdio.h>
    # include <conio.h>
    # include <stdlib.h>

    main ()
    {
    int i,j,k,temp,nb,tab[10] ;

    clrscr () ;
    nb = 0 ;
    srandom ((unsigned) time (NULL)) ;
    for (i = 0 ; i < 10 ; i++)
    {
    temp = random () % 10 ;
    i = 0 ;
    while (tab[i] != temp && i < nb) i++ ;
    if (i == nb) tab[nb++] = temp ;
    }
    for (i = 0 ; i < 10 ; i++)
    printf ("%d\t",tab[i]) ;
    printf ("\n") ;

    system ("PAUSE") ;
    return 0 ;
    }

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

Discussions similaires

  1. Supression de doublon dans un tableau
    Par Blo0d4x3 dans le forum C
    Réponses: 4
    Dernier message: 18/05/2007, 01h47
  2. Réponses: 3
    Dernier message: 19/03/2007, 18h29
  3. [Tableaux] Rechercher les doublons dans un tableau
    Par jym_22 dans le forum Langage
    Réponses: 5
    Dernier message: 15/11/2006, 09h47
  4. [Tableaux] Retirer des doublons dans un tableau
    Par Xunil dans le forum Langage
    Réponses: 2
    Dernier message: 07/11/2006, 18h04
  5. 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

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