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

  1. #1
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut Somme Nombre Aléatoire

    Bonjour

    Je désire générer 10 nombres aléatoires afin d'en faire la somme
    Mon programme fonctionne je génère bien 1O nombres et j'en fait bien la somme

    Mais lorsque je relance le programme je regénère les mêmes nombres donc je retrouve la même somme

    Je ne comprends donc pas pourquoi mon programme génère toujours les mêmes nombres aléatoires

    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
     
    int nbAlea;
    int tableau[10];
    int compteur = 0;
    int somme = 0;
     
    void setup() {
      Serial.begin(9600);
      Serial.println("Debut du programme");
    }
     
    void loop() 
    {
      if ( compteur < 10){
      nbAlea=random(1,100);
     
      Serial.print("Compteur = ");
      Serial.println(compteur);
      Serial.print("Le nbre aleatoire = ");
      Serial.println(nbAlea);//affichage du nombre
      delay (1000);
     
      tableau [compteur] = nbAlea;
      compteur ++;}
     
     
      else {
        for (int j=0 ; j<10 ; j++){
        somme = somme + tableau [j];}
        Serial.print("La somme est :");
        Serial.println(somme);
        delay(5000);
     }
     }

  2. #2
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Ancien développeur matériel électronique (Hard/Soft)
    Inscrit en
    avril 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ancien développeur matériel électronique (Hard/Soft)
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 2 342
    Points : 7 626
    Points
    7 626

    Par défaut

    Salut,
    C'est parce que random ne génère pas un nombre aléatoire mais un nombre pseudo-aléatoire.

    Voit du côté de randomSeed() https://www.arduino.cc/reference/en/...rs/randomseed/ si tu peux car ça va dépendre de ton montage. randomSeed() a besoin d'une broche de libre (donc en l'air) sur l'ADC pour faire une lecture du bruit, qui lui est réellement aléatoire.
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  3. #3
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    Bonjour

    J ai aussi essayé avec randomSeed() mais j ai le même problème

    Qu'entends par une broche en l air sur l'adc?

  4. #4
    Modérateur

    Avatar de Vincent PETIT
    Homme Profil pro
    Ancien développeur matériel électronique (Hard/Soft)
    Inscrit en
    avril 2002
    Messages
    2 342
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Âge : 38
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Ancien développeur matériel électronique (Hard/Soft)
    Secteur : Service public

    Informations forums :
    Inscription : avril 2002
    Messages : 2 342
    Points : 7 626
    Points
    7 626

    Par défaut

    Fait un copié/collé de l'exemple de chez Arduino

    Code C : Sélectionner tout - Visualiser dans une fenêtre à part
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    long randNumber;
     
    void setup() {
      Serial.begin(9600);
      randomSeed(analogRead(0));
    }
     
    void loop() {
      randNumber = random(300);
      Serial.println(randNumber);
      delay(50);
    }

    Dans cette exemple, ce qu'on traduit sauvagement par la "graine" (Seed) et qui servira pour la suite du calcul d'un nombre aléatoire est un échantillon de la tension présente sur une broche, connectée à rien du tout, du convertisseur analogique/numérique. Dans l'exemple, on vient lire la tension présente sur la broche A0 alors qu'elle n'est pas connectée à un montage électronique, ni à un capteur, etc. Pour améliorer ça tu peux aussi mettre un bout de fil dans la broche A0 et laisser ce fil en l'air, celui ci fera une antenne qui amènera une tension aléatoire sur A0.

    Normalement ça marche aussi sans ce bout de fil mais celui ci aura tendance à capter plus facilement la rayonnement proche.

    Nom : arduino%u00252Buno%u00252Banalog%u00252Bpin%u00252BA0%u00252B-%u00252BA5.png
Affichages : 57
Taille : 101,0 Ko
    La science ne nous apprend rien : c'est l'expérience qui nous apprend quelque chose.
    Richard Feynman

  5. #5
    Futur Membre du Club
    Homme Profil pro
    Enseignant
    Inscrit en
    octobre 2016
    Messages
    20
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : France, Pas de Calais (Nord Pas de Calais)

    Informations professionnelles :
    Activité : Enseignant

    Informations forums :
    Inscription : octobre 2016
    Messages : 20
    Points : 7
    Points
    7

    Par défaut

    J ai essayé mais cela ne fonctionne toujours pas
    Il génère 3 listes mais toujours les mêmes

  6. #6
    Membre confirmé

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    novembre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : novembre 2006
    Messages : 183
    Points : 594
    Points
    594

    Par défaut

    Si ton Arduino a un accès Internet, il y a plein de "variables" qui bougent tout le temps, comme la date voire les minutes et secondes de l'heure à mettre dans le randomSeed().

  7. #7
    Membre confirmé Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    février 2013
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : février 2013
    Messages : 208
    Points : 506
    Points
    506

    Par défaut

    Bonsoir college62137
    Citation Envoyé par Vincent PETIT Voir le message
    si tu peux car ça va dépendre de ton montage. randomSeed() a besoin d'une broche de libre (donc en l'air) sur l'ADC pour faire une lecture du bruit, qui lui est réellement aléatoire.
    J'ai testé la méthode de @Vincent PETIT et ça fonctionne plutôt pas mal!
    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
    Debut du programme
    Tirage 	0 =	283	134	30	58	147	272	144	248	53	75	total = 	1444
    Tirage 	1 =	253	168	25	51	223	34	277	183	138	73	total = 	1425
    Tirage 	2 =	253	188	56	165	3	232	119	142	150	213	total = 	1521
    Tirage 	3 =	8	8	70	87	199	241	126	293	173	49	total = 	1254
    Tirage 	4 =	67	208	152	58	198	197	230	96	141	26	total = 	1373
    Tirage 	5 =	108	230	67	211	28	209	196	185	65	191	total = 	1490
    Tirage 	6 =	206	89	50	155	199	121	7	66	276	146	total = 	1315
    Tirage 	7 =	147	222	290	70	120	267	61	251	296	29	total = 	1753
    Tirage 	8 =	100	156	6	299	289	11	54	163	163	69	total = 	1310
    Tirage 	9 =	120	298	174	286	3	252	83	224	224	188	total = 	1852
     
    Debut du programme
    Tirage 	0 =	129	77	92	191	224	125	81	225	240	24	total = 	1408
    Tirage 	1 =	29	208	95	14	42	157	258	33	48	235	total = 	1119
    Tirage 	2 =	210	116	118	204	55	121	157	71	221	234	total = 	1507
    Tirage 	3 =	9	13	227	27	28	216	282	272	287	116	total = 	1477
    Tirage 	4 =	40	284	36	274	81	129	252	69	69	238	total = 	1472
    Tirage 	5 =	120	298	174	286	3	252	83	224	224	188	total = 	1852
    Tirage 	6 =	248	169	122	248	211	161	129	134	67	25	total = 	1514
    Tirage 	7 =	82	31	139	181	120	67	216	149	119	257	total = 	1361
    Tirage 	8 =	231	16	143	184	251	90	289	111	96	120	total = 	1531
    Tirage 	9 =	86	58	154	230	276	67	66	154	64	98	total = 	1253
     
    Debut du programme
    Tirage 	0 =	48	58	150	186	120	27	94	38	271	7	total = 	999
    Tirage 	1 =	157	293	74	90	30	264	199	255	203	212	total = 	1777
    Tirage 	2 =	253	168	25	51	223	34	277	183	138	73	total = 	1425
    Tirage 	3 =	54	82	188	43	94	126	240	78	168	209	total = 	1282
    Tirage 	4 =	226	264	240	81	186	217	141	115	25	125	total = 	1620
    Tirage 	5 =	296	240	263	12	224	145	292	254	14	52	total = 	1792
    Tirage 	6 =	117	276	16	177	276	280	36	198	93	167	total = 	1636
    Tirage 	7 =	296	207	294	73	251	43	134	266	26	192	total = 	1782
    Tirage 	8 =	100	156	6	299	289	11	54	163	163	69	total = 	1310
    Tirage 	9 =	39	259	201	220	172	256	254	25	243	278	total = 	1947
    avec ton programme légèrement modifié
    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
    36
    37
    38
    39
     int nbAlea;
     int tableau[10];
     int compteur = 0;
     int somme = 0;
     
     void setup() {
    	 Serial.begin(9600);
    	 Serial.println("Debut du programme");
     }
     
     void loop()
     {
    	for (int t = 0; t < 10; t++)
    	{
    		Serial.print("Tirage \t" + String(t) + " =\t");
    		unTableauAleatoire();
     
    		for (int n = 0; n < 10; n++)
    		{
    				Serial.print(tableau[n]);
    				Serial.print("\t");
    		}
    		Serial.println("total = \t" +  String(somme));
    	}
    	Serial.println("");
    	delay(5000);
     }
     
     void unTableauAleatoire()
     {
    	randomSeed(analogRead(0));
    	somme = 0;
     
    	for (int i = 0; i < 10; i++)
    	{
    		tableau[i] = random(300);
    		somme += tableau[i];
    	}
     }
    Il y a un bout de fil de ~10 cm. sur A0.
    J'ai fait un reset de l'Arduino entre chaque tirage de 10 tableaux.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

  8. #8
    Membre confirmé

    Homme Profil pro
    Architecte de système d'information
    Inscrit en
    novembre 2006
    Messages
    183
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Architecte de système d'information
    Secteur : Transports

    Informations forums :
    Inscription : novembre 2006
    Messages : 183
    Points : 594
    Points
    594

    Par défaut

    Citation Envoyé par jpbbricole Voir le message
    J'ai fait un reset de l'Arduino entre chaque tirage de 10 tableaux.
    jpbbricole
    Est-ce nécessaire (c'est dommage) et pourquoi?

  9. #9
    Membre confirmé Avatar de jpbbricole
    Homme Profil pro
    Retraité des réseaux informatiques
    Inscrit en
    février 2013
    Messages
    208
    Détails du profil
    Informations personnelles :
    Sexe : Homme
    Localisation : Suisse

    Informations professionnelles :
    Activité : Retraité des réseaux informatiques
    Secteur : High Tech - Électronique et micro-électronique

    Informations forums :
    Inscription : février 2013
    Messages : 208
    Points : 506
    Points
    506

    Par défaut

    Bonjour boijea
    Citation Envoyé par boijea Voir le message
    Est-ce nécessaire (c'est dommage) et pourquoi?
    Non, bien sûre, j'ai fait ainsi suite à la remarque de college62137
    Citation Envoyé par college62137 Voir le message
    Mais lorsque je relance le programme je regénère les mêmes nombres donc je retrouve la même somme
    Mais ça fonctionne très bien sans.

    Cordialement
    jpbbricole
    L'expérience est la seule chose qu'il ne faut acheter que d'occasion!

Discussions similaires

  1. somme conditionnée avec nombres aléatoires
    Par djocin dans le forum Fortran
    Réponses: 1
    Dernier message: 26/06/2009, 17h27
  2. Nombres aléatoires
    Par Mat 74 dans le forum Assembleur
    Réponses: 20
    Dernier message: 29/08/2004, 13h31
  3. recherche algo de génération de nombre aléatoire
    Par Pascale38 dans le forum MFC
    Réponses: 2
    Dernier message: 26/01/2004, 14h20
  4. Nombre aléatoire en SQL
    Par sqlnet dans le forum Langage SQL
    Réponses: 8
    Dernier message: 19/08/2003, 12h38
  5. Générer un nombre aléatoire entre 0 et 1 (INCLUS !!!)
    Par haypo dans le forum Algorithmes et structures de données
    Réponses: 3
    Dernier message: 22/08/2002, 16h30

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