+ Répondre à la discussion
Affichage des résultats 1 à 3 sur 3
  1. #1
    Invité de passage
    Inscrit en
    avril 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 2
    Points : 0
    Points
    0

    Par défaut tirage unique soucis en c

    Bonjour à tous,
    Donc voila je dois crée un programme qui doit remplir de façon aléatoire un tableau d'entier mais avec l'unicité de chacun des nombres dans le tableau.
    Pourtant je pensé avoir bien écris le code et pourtant l'unicité des nombres n'y est pas. Pouvez vous me dire pourquoi ?

    Voici mon code :
    Code :
    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
    33
    34
    35
    # include <stdlib.h>
    # include <stdio.h>
    # include <time.h>
    void main ()
    {
    	int lotto[7];
    	int i,j,tirage;
     
    	srand ((unsigned)time(NULL));
     
    	for (i=0;i<7;i++)
    	{
    		tirage=(rand()%7)+1;
    		j=0;
    		for (j=0;j<i;j++)
    		{
    			if (lotto[i]==tirage)
    			{
    				tirage=(rand()%7)+1;
    				j=0;
    			}
    			else
    			{
    				j++;
    			}
    		}
    		lotto[i]=tirage;
    	}
    	for (i=0;i<7;i++)
    	{
    		printf ("%d\n",lotto[i]);
    	}
    	system ("pause");
     
    }

  2. #2
    Expert Confirmé Sénior
    Avatar de diogene
    Homme Profil pro
    Enseignant Chercheur
    Inscrit en
    juin 2005
    Messages
    5 705
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Essonne (Île de France)

    Informations professionnelles :
    Activité : Enseignant Chercheur
    Secteur : Enseignement

    Informations forums :
    Inscription : juin 2005
    Messages : 5 705
    Points : 13 706
    Points
    13 706

    Par défaut

    Parce que :

    1- Erreur d'indexation :if (lotto[j]==tirage) .

    2- Le else {j++;} n'a aucune raison d'être (double incrément avec le j++ du for)

    3- La remise à 0 de j est incorrecte : j sera incrémenté par le j++ du for et passera à 1. La nouvelle valeur de tirage ne sera donc pas comparée avec lotto[0]

    En reprenant la trame de ton programme :
    Code :
    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
    # include <stdlib.h>
    # include <stdio.h>
    # include <time.h>
    int main (void)
    {
    	int lotto[7];
    	int i,j,tirage;
    	srand ((unsigned)time(NULL));
    	for (i=0;i<7;i++)
    	{
    		tirage=(rand()%7)+1;
    		for (j=0;j<i;j++)
    		{
    			if (lotto[j]==tirage)
    			{
    				tirage=(rand()%7)+1;
    				j=-1;
    			}
     
    		}
    		lotto[i]=tirage;
    	}
    	for (i=0;i<7;i++)
    	{
    		printf ("%d\n",lotto[i]);
    	}
    	system ("pause");
    }
    Publication : Concepts en C

    Mon avatar : Glenn Gould

    --------------------------------------------------------------------------
    Une réponse vous a été utile ? Remerciez son auteur en cliquant le pouce vert !

  3. #3
    Invité de passage
    Inscrit en
    avril 2012
    Messages
    2
    Détails du profil
    Informations forums :
    Inscription : avril 2012
    Messages : 2
    Points : 0
    Points
    0

    Par défaut

    Merci beaucoup pour ta réponse et la rapidité de ta réponse, mais y'a une chose que je ne saisi pas, pourquoi " j=-1 " ? Et oui pour l'incrément j++ petite erreur d’inattention de ma part.
    Encore merci.

Liens sociaux

Règles de messages

  • Vous ne pouvez pas créer de nouvelles discussions
  • Vous ne pouvez pas envoyer des réponses
  • Vous ne pouvez pas envoyer des pièces jointes
  • Vous ne pouvez pas modifier vos messages
  •