Newsgroup: it.comp.lang.c++
Titolo: un aiuto sui random...

Salve!
mi sono perso nelle faq!
io ho bisogno di trovare un numero a caso tra 0 e 1.000.000.
sono andato ai link scritti nelle faq, ma mi sono incasinato ancora di +.
Sarò idiota...
per favore aiutatemi...
il massimo che riesco a trovare( usando time e tutto il resto), sono numeri
tipo 230988, 230876 230876, tutti simili...
:(
--
[firma tolta in segno di protesta contro i caratteri a grandezza variabile]

please....
:-(

allura :)
se usi compilatore borland rnd(numero massimo) e genera un numero
compreso trà 0 e numero massimo (che se non ricordo male è un int)
se non utilizzi un compilatore borland ma invece per esempio il djgpp
allora il codice si fà più complesso. Esiste una macro chiamata RNDMAX
che è il numero massimo random che si può generare... si utilizza il
seguente codice
ti metto quà il codice che avevo utilizzato tempo fà per fare una cosa
simile:
rdisk *createseg(const unsigned long &max, const unsigned long &ano,
const unsigned long &rbuf)
{
  rdisk *temp = new rdisk(NULL, rd_ramonly, rd_boundary, sizeof(unsigned
long)*ano, 0, false);
  cout << " createseg(...): created segment of " << sizeof(unsigned
long)*ano << "bytes\n";
#ifdef EXPERIMENTAL
  cout << " createseg(...): WARNING: in compile activated EXPERIMENTAL
features\n";
  timeval timeseed;
  gettimeofday(&timeseed, NULL);
  srandom(timeseed.tv_sec);
  cout << " createseg(...): random seeded with " << timeseed.tv_sec <<
endl;
  int statecnt = 0;
#endif
  unsigned long  cnt;
  unsigned long c;
  for (cnt = 0; cnt < ano; cnt++)
    {
#ifdef EXPERIMENTAL
      if (statecnt > 0)
        {
          if (c > (rbuf/2) && c < (max-rbuf/2))
          { c = c +
(1+(long)((float)rbuf*random()/(RAND_MAX+1.0))-((long)rbuf/2)); }
              else
          { c = 1+(unsigned long)((float)max*random()/(RAND_MAX+1.0)); }
          statecnt--;
        } else {
#endif
          c = 1+(unsigned long)((float)max*random()/(RAND_MAX+1.0));
#ifdef EXPERIMENTAL
          statecnt = rbuf;
        }
#endif
      temp->ext_write((char*)&c, (unsigned long long)sizeof(unsigned
long));
    }
  cout << " createseg(...): segment filled\n";
  return temp;
}
dato che è un po' incasinato allora:
// vari include
#include <iostream.h>
#include <stdlib.h>
#include <sys/time.h>
// inizializzazione del generatore
timeval timeseed;
gettimeofday(&timeseed, NULL);
srandom(timeseed.tv_sec);
// generazione del numero casuale
long max = 100; // max è il numero massimo
long c; // c contiene il numero casuale
c = 1+(unsigned long)((float)max*random()/(RAND_MAX+1.0));
questa 'roba' ottiene un numero casuale compreso trà 1 e max :)
___________________________________________________________
                    _
 \ \// // //| | // |_ _|_|_ member of EventOrizon software
  \//\// // | |//  |_  | |   
http://members.xoom.it/wavexx
___________________________________________________________

graziegraziegraziegraziegraziegraziegraziegraziegraziegrazie
lo provo subito!

 il massimo sono numeri  tipo 230988, 230876 230876, tutti simili...
Prova a "Fargli pensare" un numero più grande di 10^6 poi dividilo per 10^6
e il resto ottenuto sarà compreso tra 0 e 10^6
N.B. 10^6 = 1.000.000
non so se mi sono spiegato chairamente... al massimo chiedi.