Comment générer des nombres aléatoires dans la programmation de c

Une fonction mathématique dans la programmation C qui est relativement facile à saisir est la fonction rand (). Il génère des nombres aléatoires. Si cela peut sembler idiot, il est la base pour à peu près tous les jeux d'ordinateur jamais inventé. Les nombres aléatoires sont un gros problème dans la programmation.

Sommaire

Un ordinateur ne peut pas générer des nombres réellement aléatoires. Au lieu de cela, elle produit ce qu'on appelle faux-nombres aléatoires. Voilà parce que les conditions à l'intérieur de l'ordinateur peuvent être reproduits. Par conséquent, les mathématiciens se moquent graves que toute valeur un ordinateur appelle aléatoire est pas un nombre vraiment aléatoire. Pouvez-vous les entendre se moquer?

Comment générer des nombres aléatoires

La fonction rand () est le plus simple des nombres aléatoires fonctions C. Il nécessite le fichier d'en-tête stdlib.h, et il crache une valeur int qui est censé être aléatoire. Maintenant, Voilà aléatoire démontre l'exemple de code.

Maintenant, ce Random

#include #include int main () {int r, a, b-puts ("100 aléatoire Numbers")-for(a=0-alt;20-a++){for(b=0-blt;5-b++){r=rand()-printf("%dt",r)-}putchar('n')-}return(0)-}

Maintenant, voilà aléatoire utilise un imbriquée boucle pour afficher 100 valeurs aléatoires. La fonction rand () à la ligne 13 génère les valeurs. La fonction printf () à la ligne 14 affiche les valeurs en utilisant le caractère de conversion% d, qui affiche les valeurs int.

Exercice 1: Créez un nouveau projet en utilisant le code de source indiqué sur Maintenant, Voilà aléatoire. Construire et exécuter à voir 100 valeurs aléatoires.

Exercice 2: Modifiez le code de sorte que toutes les valeurs affichées sont dans la plage de 0 à 20.

Voici un indice pour l'instant, Voilà aléatoire: Utilisez l'opérateur d'affectation de module de limiter la gamme des nombres aléatoires. Le format ressemble à ceci:




r% =n-

r est le nombre de retour de la fonction rand (). % = Est l'opérateur d'affectation de module. n est la limite de portée, plus 1. Après la déclaration précédente, valeurs retournées sont dans la plage de 0 à n-1. Donc, si vous voulez générer des valeurs entre 1 et 100, vous pouvez utiliser cette formule:

value = (r% 100) + 1-

Comment faire pour augmenter le caractère aléatoire de la programmation C numbersin

Juste pour vous donner un certain crédit aux mathématiciens prétentieux qui prétendent que les ordinateurs générer des nombres pseudo-aléatoires, exécuter le programme que vous avez généré à partir de l'exercice 2. Observez la sortie. Exécutez de nouveau le programme. Voir tout ce familier?

La fonction rand () est bon à générer un grand nombre de valeurs aléatoires, mais ils sont les valeurs prévisibles. Pour rendre la sortie moins prévisible, vous devez graine le générateur de nombres aléatoires. Cela se fait en utilisant la fonction srand ().

Comme pour la fonction rand (), la fonction srand () nécessite l'en-tête stdlib.h, montré à la ligne 2 en encore plus aléatoire. La fonction nécessite une valeur unsigned int, graine, qui est déclarée à la ligne 6. La fonction scanf () à la ligne 10 se lit dans la valeur non signée en utilisant l'espace réservé% u. Ensuite, la fonction srand () utilise la valeur de départ à la ligne 11.

ENCORE PLUS RANDOMNESS

#include #include int main () {unsigned int r semences, a, b-printf ("Entrez un nombre aléatoire: ")-scanf("%u",seed)-srand(seed)-for(a=0-alt;20-a++){for(b=0-blt;5-b++){r=rand()-printf("%dt",r)-}putchar('n')-}return(0)-}

La fonction rand () est utilisé à la ligne 16, bien que les résultats sont maintenant basées sur la graine, qui est défini lors de l'exécution du programme.

Exercice 3: Créez un nouveau projet en utilisant le code de source indiqué sur encore plus aléatoire. Construire. Exécutez le programme à quelques reprises, en essayant différentes valeurs de semences. La sortie est différente à chaque fois.

Hélas, les valeurs aléatoires qui sont générés sont toujours prévisibles lorsque vous tapez le même nombre de graines. En fait, lorsque la valeur 1 est utilisée comme la graine, vous voyez la même “ aléatoire ” valeurs que vous avez vu dans l'exercice 1, lorsque vous ne l'avez même pas utiliser srand ()!

Il doit y avoir une meilleure façon.

La meilleure façon d'écrire un générateur de nombres aléatoires est de ne pas demander à l'utilisateur de saisir une graine, mais plutôt de chercher une graine d'ailleurs. En plus véritablement aléatoire que jamais, la valeur de départ est tiré de l'horloge système en utilisant la fonction time ().

PLUS QUE JAMAIS vraiment aléatoire

#include #include #include int main () {int r,a,b-srand((unsigned)time(NULL))-for(a=0-alt;20-a++){for(b=0-blt;5-b++){r=rand()-printf("%dt",r)-}putchar('n')-}return(0)-}

La fonction time () renvoie des informations sur l'heure de la journée, une valeur qui est en constante évolution. L'argument NULL permet de résoudre certains problèmes, mais le temps () retourne une valeur constante évolution.

La partie (non signé) de la déclaration assure que la valeur retournée par la fonction time () est un entier non signé. Voilà une technique connue sous le nom typecasting.

La ligne de fond est que la fonction srand () est passé d'une valeur de départ, avec l'aimable autorisation de la fonction time (), et le résultat est que la fonction rand () génère des valeurs qui sont plus aléatoires que vous obtiendriez autrement.

Exercice 4: Tapez le code source à partir de Plus Truly Random que jamais et construire le projet. Lancez-le à quelques reprises pour veiller à ce que les chiffres sont aussi aléatoire que l'ordinateur peut les obtenir.


» » » » Comment générer des nombres aléatoires dans la programmation de c