Précédent   Forum du club des développeurs et IT Pro > C et C++ > C
C Forum d'entraide technique sur le langage C. Avant de poster -> F.A.Q. C, Avant de poster.
Partagez cette discussion sur d'autres réseaux sociaux : Viadeo Twitter Google Facebook Digg Delicious MySpace Yahoo
Réponse
 
Outils de la discussion
Publicité
'
Vieux 09/01/2013, 15h12   #1
raugui
Invité de passage
 
Inscription : 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");
 
}
raugui est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 16h07   #2
diogene
Responsable Modération
 
Avatar de diogene
 
Homme Patrick Gonord
Enseignant Chercheur
Inscription : juin 2005
Messages : 5 435
Détails du profil
Informations personnelles :
Nom : Homme Patrick Gonord
Localisation : France, Essonne (Île de France)

Informations professionnelles :
Activité : Enseignant Chercheur
Secteur : Enseignement

Informations forums :
Inscription : juin 2005
Messages : 5 435
Points : 12 967
Points : 12 967
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 !
diogene est déconnecté   Envoyer un message privé Réponse avec citation 00
Vieux 09/01/2013, 16h42   #3
raugui
Invité de passage
 
Inscription : avril 2012
Messages : 2
Détails du profil
Informations forums :
Inscription : avril 2012
Messages : 2
Points : 0
Points : 0
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.
raugui est déconnecté   Envoyer un message privé Réponse avec citation 00
Réponse
Outils de la discussion

Navigation rapide


Fuseau horaire GMT +2. Il est actuellement 08h20.


 
 
 
 
Partenaires

Hébergement Web