user
En C, comment tirer un nombre aléatoire dans un intervalle ?
alphonsio

Pour tirer un nombre aléatoire dans un intervalle donné en langage C, vous pouvez utiliser la fonction rand() de la bibliothèque standard C (stdlib.h). La fonction rand() génère un nombre entier pseudo-aléatoire entre 0 et RAND_MAX, une constante définie dans stdlib.h. Pour générer un nombre dans un intervalle donné (entre min et max), on peut utiliser l'une des solutions suivantes :

Entier :

// Génère un entier pseudo-aléatoire compris entre min et max (inclus)
int x = min + rand() % (max + 1 - min);

Flottant :

// Génère un nombre réel pseudo-aléatoire dans compris entre min et max (inclus)
float x = min + (float)rand() / ((float)RAND_MAX/(max-min));

Lors de l'utilisation penser à initialiser la graine du générateur avec srand() pour ne pas générer les mêmes tirages à chaque exécution. Pour plus de détails, consulter cette question : En C, comment tirer un nombre aléatoire dans un intervalle ?

Explication

Pour obtenir un nombre aléatoire dans un intervalle spécifique [min,max][min, max], on utilise ici la formule suivante :

random_number=rand()%(maxmin+1)+min\text{random\_number} = \text{rand()} \% (\text{max} - \text{min} + 1) + \text{min}

Voici les étapes à suivre pour implémenter cela :

  1. Inclure les bibliothèques nécessaires :
    Vous aurez besoin de stdlib.h pour rand() et time.h pour time().

  2. Initialiser le générateur de nombres aléatoires :
    Utilisez srand() pour initialiser le générateur avec une valeur de départ (généralement basée sur le temps actuel pour assurer des résultats différents à chaque exécution).

  3. Tirer un nombre aléatoire dans l'intervalle souhaité :
    Appliquez la formule mentionnée ci-dessus.

Voici un exemple de programme en C qui tire un nombre aléatoire dans l'intervalle [min,max][min, max] :

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

int main() {
    int min = 10;  // Valeur minimale de l'intervalle
    int max = 20;  // Valeur maximale de l'intervalle

    // Initialiser le générateur de nombres aléatoires avec la valeur de temps actuelle
    srand(time(NULL));

    // Tirer un nombre aléatoire dans l'intervalle [min, max]
    int random_number = rand() % (max - min + 1) + min;

    // Afficher le nombre aléatoire
    printf("Nombre aléatoire entre %d et %d : %d\n", min, max, random_number);

    return 0;
}

Explications :

  • srand(time(NULL)) : Initialise le générateur de nombres aléatoires avec la valeur actuelle de l'horloge. Cela garantit que les nombres générés sont différents à chaque exécution du programme.
  • rand() % (max - min + 1) + min : Cette expression limite le résultat de rand() à l'intervalle [min,max][min, max].

Points à noter :

  • RAND_MAX : C'est la valeur maximale que rand() peut retourner. Cette valeur est définie dans stdlib.h et est généralement une constante élevée, mais dépend de l'implémentation spécifique de la bibliothèque standard C.
  • Pseudo-aléatoire : Les nombres générés par rand() sont pseudo-aléatoires, ce qui signifie qu'ils sont déterminés par une séquence prédéfinie basée sur la graine donnée à srand().