/* IFT1169 - 07-février -2010 v1.00 M.Lokbani énoncé et validation gcc 4.4.0 contact: lokbani@iro.umontreal.ca Copyright (C) 1999-2010 Université de Montréal Département d'informatique et de Recherche Opérationnelle Mohamed Lokbani -- Tous Droits Réservés -- All Rights Reserved -- Description: ------------ Utilisation de quelques fonctions pour la génération des nombres aléatoire. La fonction rand() permet de générer un nombre aléatoire entre [0,RAND_MAX[. Le nombre "0" est inclus alors que le nombre "RAND_MAX" ne l'est pas. "RAND_MAX" est une constante définie dans le fichier "cstdlib". Elle représente la valeur maximale que le générateur peut nous fournir int i = rand(); Pour éviter que cet appel retourne toujours la même valeur, afin donc de générer à chaque appel des nombres différents, nous utilisons la fonction srand. srand(static_cast(time(NULL))); srand sert à initialiser le générateur. En passant "NULL" à la fonction "time", cette dernière va retourner l'heure actuelle. Comme l'heure n'est pas la même après chaque appel, nous garantissons ainsi que le tirage du nombre n'est pas le même. Si on veut obtenir toujours la même valeur, il suffit d'initialiser srand comme suit: srand(1); Dans l'exemple qui suit, nous avons utilisé l'expression "longue" en tenant compte de la valeur de RAND_MAX". Nous évitons ainsi la probabilité d'avoir un tirage biaisé. La version "longue" // Nombre entier entre [0,100[ int d = (int) ((((double) rand())/((double) (RAND_MAX) + (double) (1)))*M); Attention: Faire attention à la manière avec laquelle le cast a été utilisé La version "courte" // Retourne une valeur aléatoire entre 0 et 99 int z = rand()%100; cout << "z: " << z << endl; */ #include #include #include using namespace std; int main() { const int M = 100; // Pour générer aléatoirement un nombre [0,100[ const int P = 52; // Pour générer aléatoirement une lettre de l'aphabet [azAZ] // Pour générer des nombres différents à chaque fois // Si on veut générer toujours la même valeur, il suffit // d'effectuer l'appel srand(1) srand(static_cast(time(NULL))); // Nombre réel entre [0,1[ double a = ( ((double) rand())/((double) (RAND_MAX) + (double) (1))); cout << "Nombre reel entre [0,1[ : " << a << endl; // Nombre réel entre [0,100[ double b = (((double) rand())/((double) (RAND_MAX) + (double) (1)))*M; cout << "Nombre reel entre [0,100[ : " << b << endl; // Nombre entier entre [0,1[ donc 0 int c = (int) (((double) rand())/((double) (RAND_MAX) + (double) (1))); cout << "Nombre entier entre [0,1[ : " << c << endl; // Nombre entier entre [0,100[ int d = (int) ((((double) rand())/((double) (RAND_MAX) + (double) (1)))*M); cout << "Nombre entier entre [0,100[ : " << d << endl; // Nombre entier entre [1,101[ int e = (int) ((((double) rand())/((double) (RAND_MAX) + (double) (1)))*M)+1; cout << "Nombre entier entre [1,101[ : " << e << endl; char tab[] = "abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ"; // Retourne une valeur aléatoire entre 0 et 51 qui va servir à récupérer // la lettre du tableau « tab » char f = tab[(int) ((((double) rand())/((double) (RAND_MAX) + (double) (1)))*P)]; cout << "Une des lettres de l'alphabet [azAZ]: " << f << endl; return 0; }