Générateurs d'une suite de bits/ou hexadécimaux aléatoires
cs_maxidoh
Messages postés4Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention31 octobre 2009
-
23 oct. 2009 à 22:30
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023
-
31 oct. 2009 à 20:00
Bonjour,
J'ai un exercice qui consiste à programmer en c un générateur de bits/ou d'hexadécimaux aléatoires.Au départ,je croyais m'en sortir avec une fonction simple:
void ChiffreHasard( int Marge )
{
int Chiffre;
using namespace std;
srand ((unsigned) time (NULL));
Chiffre = rand() % Marge;
}
Mais je me rends compte que pour avoir en sortie une suite par exemple: 0,1,0001,1100,....,il m'en faudra plus comme programme.Si quelqu'un a une idée,qu'il me fasse signe avant mercredi.
Merci d'avance.
cs_rt15
Messages postés3874Date d'inscriptionmardi 8 mars 2005StatutModérateurDernière intervention 7 novembre 201413 25 oct. 2009 à 18:14
Salut,
J'ai rien compris.
Par contre, normalement, on appelle srand une seule fois au début de ton programme, et non à chaque rand.
En effet, si tu appelles srand avec la même valeur (Ce qui sera ton cas si tu appelles deux fois ChiffreHasard dans la même seconde, time renvoyant la même valeur), le rand te renverra la même valeur... Pas top pour de l'aléatoire...
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 26 oct. 2009 à 11:16
La question est incompréhensible, mais je pense qu'il veut dire:
Je cherche à avoir des nombres que se suivent, de plus en plus grand, tel qu'un nombre n, soit forcement plus grand qu'un nombre n - 1.
Dans ce cas, il y a deux méthodes qui me viennent à l'esprit:
- Faire une fonction qui prend un nombre aléatoire dans une plage donnée, et jouer sur les bornes.
- Faire une fonction qui va chercher un nombre aléatoire qui est forcément plus grand que le précédent.
#include <stdio.h>
#include <stdlib.h>
/*!
** Get a random number between from and to
**
** @param from Range begin
** @param to Range end
**
** @return A random number
*/
int rangeRand(int from, int to)
{
return rand () % (to - from + 1) + from;
}
/*!
** Get a random number starting from a given number
**
** @param from The start number
** @param limit The random number limit
**
** @return A random number
*/
int rangeFrom(int from, int limit)
{
return rand() % limit + from;
}
int main(void)
{
int i = 0;
int old = 0;
int r = 0;
srand(time(NULL));
for (i = 0; i < 10; ++i)
{
r = rangeRand(old, 2 * old + 1);
printf("[%i, %i] => %i\n", old, 2 * old + 1, r);
old = r + 1;
}
old = 0;
for (i = 0; i < 10; ++i)
{
r = rangeFrom(old, 1000);
printf("[%i, +00] => %i\n", old, r);
old = r + 1;
}
return 0;
}
cs_maxidoh
Messages postés4Date d'inscriptionvendredi 13 juin 2008StatutMembreDernière intervention31 octobre 2009 31 oct. 2009 à 19:01
En fait,je veux faire un programme qui génère de l'aléatoire (une série de bits ou des hexadécimaux).Voila si vous ne me comprenez pas.Le code que j'ai généré précédemment donne en sortie un nombre aléatoire qui n'est pas un bit mais un entier naturel.Comment corriger ça?
cptpingu
Messages postés3837Date d'inscriptiondimanche 12 décembre 2004StatutModérateurDernière intervention28 mars 2023124 31 oct. 2009 à 20:00
rt15 de l'a déjà expliqué: un entier naturel est affiché généralement en base 10 (décimal), rien ne t'empêche de l'afficher en base 16 (héxadécimal) ou en base 2 (binaire).
Printf sait faire cela, je t'invite à regarder la documentation, ou à rechercher sur google.