+ 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 : 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
    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 761
    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 761
    Points : 14 007
    Points
    14 007

    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 : 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
    # 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
  •