Générateurs d'une suite de bits/ou hexadécimaux aléatoires

cs_maxidoh Messages postés 4 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 31 octobre 2009 - 23 oct. 2009 à 22:30
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 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.

4 réponses

cs_rt15 Messages postés 3874 Date d'inscription mardi 8 mars 2005 Statut Modérateur Dernière intervention 7 novembre 2014 13
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...

Doc de srand.
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
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;
}
0
cs_maxidoh Messages postés 4 Date d'inscription vendredi 13 juin 2008 Statut Membre Dernière intervention 31 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?
0
cptpingu Messages postés 3837 Date d'inscription dimanche 12 décembre 2004 Statut Modérateur Dernière intervention 28 mars 2023 123
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.
0
Rejoignez-nous