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

  1. #1
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Points : 18
    Points
    18
    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...
    - les bonnes idees c'est tres rare, ayez en quelques unes et faites en profiter les autres...
    - L'imagination est plus importante que le savoir...

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

    Informations forums :
    Inscription : Mai 2002
    Messages : 56
    Points : 69
    Points
    69
    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 expérimenté
    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
    Points : 1 515
    Points
    1 515
    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;
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  4. #4
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Points : 18
    Points
    18
    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
    - les bonnes idees c'est tres rare, ayez en quelques unes et faites en profiter les autres...
    - L'imagination est plus importante que le savoir...

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

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

  6. #6
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Points : 18
    Points
    18
    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
    - les bonnes idees c'est tres rare, ayez en quelques unes et faites en profiter les autres...
    - L'imagination est plus importante que le savoir...

  7. #7
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    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
    Points : 1 515
    Points
    1 515
    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/
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  8. #8
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Points : 18
    Points
    18
    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
    - les bonnes idees c'est tres rare, ayez en quelques unes et faites en profiter les autres...
    - L'imagination est plus importante que le savoir...

  9. #9
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    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
    Points : 1 515
    Points
    1 515
    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 !!!
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  10. #10
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Points : 18
    Points
    18
    Par défaut ha bon
    tu es sur que cette reponse m'est destine?
    parce que là je ne te suis plus du tout!!!!!!!!!
    - les bonnes idees c'est tres rare, ayez en quelques unes et faites en profiter les autres...
    - L'imagination est plus importante que le savoir...

  11. #11
    DrQ
    DrQ est déconnecté
    Membre expérimenté
    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
    Points : 1 515
    Points
    1 515
    Par défaut
    Et bien après le while, au lieu de mettre if (j < nbElts) il faut mettre if (j == nbElts)
    1)http://www.developpez.com/cours/
    2)Recherche
    3)Posez votre question en suivant les règles
    _oOo-DrQ-oOo_

  12. #12
    Membre à l'essai
    Inscrit en
    Mai 2002
    Messages
    21
    Détails du profil
    Informations forums :
    Inscription : Mai 2002
    Messages : 21
    Points : 18
    Points
    18
    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 ;
    }
    - les bonnes idees c'est tres rare, ayez en quelques unes et faites en profiter les autres...
    - L'imagination est plus importante que le savoir...

+ 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