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 :

Comment éviter de mettre 2 fois le même entier dans un tableau


Sujet :

C

  1. #1
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 60
    Points : 55
    Points
    55
    Par défaut Comment éviter de mettre 2 fois le même entier dans un tableau
    Bonjour
    - je dois tirer 10 entiers aléatoires entre 0 et 99
    - ensuite je dois les mettre dans un tableau de taille 10
    - tous les entiers dans le tableau doivent être différents

    J'ai fait le code suivant :

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    #include<stdlib.h>
    #include<time.h>
     
    int *tab = malloc(10*sizeof(int));
    srand((unsigned int) time(NULL)); /* pour initialiser rand() */
    int aleatoire;
    int k;
    for(k=0;k<10;k++){
      aleatoire = rand()%(10); /* tire un entier entre 0 et 10 inclus */
      tab[k] = aleatoire;
    }
    J'ai du mal à tester si cet entier aleatoire a déjà été tiré, auquel cas il faut en choisir un autre et vérifier encore qu'il n'est pas dans le tableau déjà, puis le mettre dans le tableau.

    Si quelqu'un peut m'aider, merci.

    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    /* En somme, comment faire pour ne pas avoir ce cas de figure : */
    tab -> [5,12,56,48,42,78,98,12,45,63]
    
    /* Avoir plutôt cela : */
    tab -> [5,12,56,48,42,78,98,55,45,63]

  2. #2
    Membre régulier
    Inscrit en
    Avril 2007
    Messages
    82
    Détails du profil
    Informations forums :
    Inscription : Avril 2007
    Messages : 82
    Points : 72
    Points
    72
    Par défaut
    Avant de l'ajouter, tu compares sa valeur avec chaque case du tableau , si elle s'y trouve deja , tu ne l'ajoutes pas et tu n'incrémente pas ta variable k , et l'inverse .. une bete boucle imbriquée et if else devrait faire l'affaire

  3. #3
    Membre éprouvé Avatar de orfix
    Homme Profil pro
    Inscrit en
    Avril 2007
    Messages
    707
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Maroc

    Informations professionnelles :
    Secteur : High Tech - Produits et services télécom et Internet

    Informations forums :
    Inscription : Avril 2007
    Messages : 707
    Points : 1 132
    Points
    1 132
    Par défaut
    Salut,
    Tu peux ajouter un test sur 'aleatoire' avant de le stocker dans ton tableaux :
    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
    27
    28
    29
    30
    31
    32
     
      #include<stdio.h>
      #include<stdlib.h>
      #include<time.h>
     
      int existe_deja( int [],int,int );
     
      int main( void )
      {
          int *tab = malloc(10*sizeof(int));
          int aleatoire;
          int k;
     
          srand((unsigned int) time(NULL)); /* pour initialiser rand() */
          for(k=0;k<10;k++){
              aleatoire = rand()%(10); /* tire un entier entre 0 et 10 inclus */
              if( existe_deja(tab,k,aleatoire) )
              {
                  k--;    /*Réessayer*/
              }
              else
              {
                  tab[k] = aleatoire;
              }
          }
     
          for(k=0;k<10;k++)
          {
              printf("%d\n",tab[k]);
          }
          return EXIT_SUCCESS;
      }
    Et il ne reste plus qu'a coder cette fonction :
    Code : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
     
      int existe_deja( int [],int,int );
    Elle bouclera sur 'tab' de 0 à 'k' si elle trouve 'aleatoire' ,elle devra retourner une valeur autre que 0, sinon 0

    Bonne Chance
    To start press any key. (reading screen) Where's the "any" key? I see Esc, Catarl, and Pig Up. There doesn't seem to be any "any" key. Wo! All this computer hacking is making me thirsty. I think I'll order a Tab. (presses TAB key). -- HOMER --

  4. #4
    Membre du Club
    Profil pro
    Inscrit en
    Février 2008
    Messages
    60
    Détails du profil
    Informations personnelles :
    Localisation : France

    Informations forums :
    Inscription : Février 2008
    Messages : 60
    Points : 55
    Points
    55
    Par défaut
    Merci à tous les 2 ! Je vais essayer ça.

Discussions similaires

  1. Réponses: 6
    Dernier message: 19/02/2010, 13h11
  2. Réponses: 7
    Dernier message: 30/10/2008, 11h31
  3. [MySQL] Éviter de faire 2 fois la même requête
    Par fey dans le forum PHP & Base de données
    Réponses: 9
    Dernier message: 19/06/2008, 15h40
  4. Comment attraper tous les noeud d'un même type dans un tableau
    Par lodan dans le forum Général JavaScript
    Réponses: 13
    Dernier message: 01/04/2007, 16h36
  5. comment éviter de mettre sqlite dans le path de windows
    Par vivelesgnous dans le forum Général Python
    Réponses: 3
    Dernier message: 18/07/2006, 20h38

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