Nombre aléatoire dans variable

Fermé
jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 10 juillet 2019 - 11 mai 2019 à 15:01
jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 10 juillet 2019 - 9 juil. 2019 à 21:26
Bonjour,

Je cherche le moyen de mettre un nombre aléatoire (disons entre 1 et 500) dans une variable qui s’appellera "a".
Est-ce possible (je pense que oui : je ne suis pas désespéré à se point) ?

merci de vos réponses

2 réponses

[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
13 mai 2019 à 10:32
Salut,

La fonction
rand()
existe en C. Elle génère des nombres pseudo-aléatoires sous forme d'entier entre 0 et RAND_MAX.

Une façon simple d'obtenir un nombre entre 1 et 500, par exemple, est de faire comme cela :

int nombre = rand() % 500 + 1;

Avant de l'utiliser, il faut initialiser le générateur de nombres avec
srand()
, sinon, le générateur va toujours sortir la même séquence de nombres. Une façon de l'initialiser est de lui passer en paramètre le résultat de la fonction
time(NULL);
qui renvoie un type entier représentant la date et l'heure actuelle à la seconde près.

Par exemple, le code suivant génère 10 nombres entre 1 et 500 :

#include <stdio.h>
#include <stdlib.h>
#include <time.h>

int main(void) {
  int nombre;

  /* initialisation */
  srand(time(NULL));

  /* générer 10 nombres compris entre 1 et 500 */
  for (int i = 0; i < 10; i++) {
      nombre = rand() % 500 + 1;
      printf("%d ", nombre);
  }
  printf("\n");

  return 0;
}

Références :
http://www.cplusplus.com/reference/cstdlib/srand/
http://www.cplusplus.com/reference/cstdlib/rand/
http://www.cplusplus.com/reference/ctime/time/

Dal
3
cool c'est ce que je recherchait aussi !
Et il marche sans plafond (nombre max ou min ) ?
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 14 mai 2019 à 14:32
Là l'intervalle est de 1 à 500. Tu fais varier le minimum en modifiant le "+ 1" et le maximum sera l'addition du minimum et du reste de la division entière du nombre produit par
rand()
avec l'autre nombre (ici 500, qui donne un reste de 0 à 499).

rand()
peut produire un nombre de
0
à
RAND_MAX
, qui, selon le standard du C doit valoir au moins
32767
. Tu peux afficher la valeur de
RAND_MAX
(qui est une constante définie par une macro dans
stdlib.h
) pour ton implémentation du C, qui sera certainement supérieure, en faisant :

printf("pour ce compilateur RAND_MAX = %llu\n", (unsigned long long int) RAND_MAX);
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
Modifié le 14 mai 2019 à 14:50
un
printf("%d\n", RAND_MAX);
fonctionne aussi sur ma machine avec un compilateur GNU C, où RAND_MAX et INT_MAX sont les mêmes

les limites des types entiers sont accessibles par l'entête standard
limits.h
:

http://www.cplusplus.com/reference/climits/
0
jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 10 juillet 2019 1
28 juin 2019 à 19:36
Merci, mais...le programme ne fonctionne pas.

Voici ce qu'il m'affiche:


je me disait que se serait peut-etre la boucle mal placé,mais non
Une solution ?
0
[Dal] Messages postés 6174 Date d'inscription mercredi 15 septembre 2004 Statut Contributeur Dernière intervention 2 février 2024 1 083
1 juil. 2019 à 14:44
Il y a de nombreuses années que je n'ai pas utilisé DevC++, qui a connu un développement assez chaotique .. cela dit, dans ta capture, je ne vois pas de message d'erreur, juste une ligne marquée en rouge.

Le code fournit est du code valide en C99 (la révision du standard du C datant de 1999), qui permet la déclaration de variables dans la boucle for. Si ton compilateur est ancien, ne supporte pas C99, ou que tu ne veux pas faire du code C99 (c'est un peu dommage, mais tu as peut-être de bonnes raisons), tu peux écrire à la place de :

for (int i = 0; i < 10; i++) {

les deux lignes suivantes :

int i;
for (i = 0; i < 10; i++) {

Sinon, je n'ai pas de "solution" autre tant que tu ne donnes pas un vrai message d'erreur.

Dal
0
lugdanum Messages postés 108 Date d'inscription vendredi 13 mai 2005 Statut Membre Dernière intervention 14 novembre 2021 39
11 mai 2019 à 15:31
0
jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription lundi 25 mars 2019 Statut Membre Dernière intervention 10 juillet 2019 1
Modifié le 11 mai 2019 à 16:01
merci je suis allé sur le lien mais il y a beaucoup de "mais il peut y avoir des risque de ..." En gros, ces méthodes ne fonctionnent pas dans tout les cas.
N'y existe-il pas une ligne de code du style rand() ou intrandom() qui puisse etre utilisé pour définire une variable ?
0