Nombre aléatoire dans variable

jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -  
jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   -
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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
Rudy
 
cool c'est ce que je recherchait aussi !
Et il marche sans plafond (nombre max ou min ) ?
0
[Dal] Messages postés 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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   Statut Membre Dernière intervention   1
 
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 6205 Date d'inscription   Statut Contributeur Dernière intervention   1 105
 
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 116 Date d'inscription   Statut Membre Dernière intervention  
 
0
jenaipasdideepourlenomdutilisate Messages postés 20 Date d'inscription   Statut Membre Dernière intervention   1
 
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