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 :

Verifier l'unicite de chaque valeur d'un tableau


Sujet :

C

  1. #1
    Battosaiii
    Invité(e)
    Par défaut Verifier l'unicite de chaque valeur d'un tableau
    Tout d'abord randint gener uniformement une valeur entiere dans l'intervalle 0 8619 qui marche et qui fait partie d'une librairie que j'ai prise.
    J'aimerais creer dans le tableau tab[1200] des valeurs uniques. Pour cela j'ai creer une fonction recursive unicity pour verifier l'unicite de chaque valeur. Malheureusement Je sais plus loin dans le code que je n'obtiens pas 1200 valeurs unique dans le tableau. Comment faire pour y remedier ?

    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
    void Unicity(int tab[1200],int i)
    {
    	int j,x;
    	x=randint(0,8619);
    	for (j=0;j<i;j++)
    	{
    		if(x==tab[j]) 
    		{
    			Unicity(tab,i);
     
    		}
     
     
    	}
    	tab[i]=x;
     
    }
     
     
     
    void GenerateVoiceRandomly(int tab[1200])
    {
    int i;
    	for(i=0;i<1200;i++)
    		{
     
     
    		Unicity(tab,i);
     
    		}
    }

  2. #2
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Ton algorithme est faux. Ce n'est pas vraiment une question de C.... En plus, faire une récursive comme tu le fais n'est pas une bonne idée...

    L'algorithme correct serait plutôt:

    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
    Pour i allant de 0 à 1199
       pasencore = vrai 
     
       Tant que pasencore
           pasencore = faux
           irand = randint(0,8619);
           Pour j allant de 0 à i - 1
              Si irand==tab[j]
                  pasencore = vrai
              FinSi
           FinPour
        FinTantQue
     
      tab[i] = irand;
    FinPour
    Avec les optimisations possibles biensûr... Remarque bien les différences avec ce que tu fais...

  3. #3
    Battosaiii
    Invité(e)
    Par défaut
    En appliquant ta solution le programme reste a l'infini dans la boucle pour i=828. Je suppose que ca vient de randint mais si quealu'un a des idees/solution en regardant le programme ...

    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
    void GenerateVoiceRandomly(int tab[1200])
    {
    	int i,irand,j;
    BOOL not_yet;
    for(i=0;i<1200;i++)
    	{
    	not_yet=TRUE;
    	while(not_yet)
    		{
    		not_yet=FALSE;
    		irand=randint(0,8619);
    		printf("pour i=%d irand=%d\n",i,irand);
     
    			for(j=0;j<i;j++)
    				{
    				if(tab[i]==tab[j])
    					{
    					not_yet=TRUE;
    					}
     
    				}
    			}
     
     
    	tab[i] = irand;
     
    	}

  4. #4
    Expert éminent sénior

    Avatar de fearyourself
    Homme Profil pro
    Ingénieur Informaticien Senior
    Inscrit en
    Décembre 2005
    Messages
    5 121
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 44
    Localisation : Etats-Unis

    Informations professionnelles :
    Activité : Ingénieur Informaticien Senior
    Secteur : Industrie

    Informations forums :
    Inscription : Décembre 2005
    Messages : 5 121
    Points : 11 877
    Points
    11 877
    Par défaut
    Dans la boucle interne, la condition du Si était fausse, désolé... Petite erreur de placement du tab[i]=irand..

    Je l'ai corrigé dans le post de base...

    Jc

  5. #5
    Battosaiii
    Invité(e)
    Par défaut
    yes ca marche fearyourself thanks !

Discussions similaires

  1. Réponses: 9
    Dernier message: 06/06/2010, 14h22
  2. [RegEx] Afficher le chemin des balises xml avant chaque valeurs
    Par Barney06 dans le forum Langage
    Réponses: 5
    Dernier message: 13/02/2008, 19h54
  3. Repliquer chaque valeur d'un vecteur
    Par hidies dans le forum MATLAB
    Réponses: 2
    Dernier message: 26/04/2007, 16h19
  4. Tableau : retour chariot après chaque valeur
    Par kafifi dans le forum Langage
    Réponses: 3
    Dernier message: 13/07/2006, 17h54
  5. Réponses: 1
    Dernier message: 18/05/2005, 18h18

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