Newsgroup: it.comp.lang.c++
Titolo: numeri causali

Ho cominciato da poco a usare il c++ e prima avevo usato il pascal, mi
potreste dire come si chiama il corrispondente della funzione random() in
c++ e come si usa? Bisogna inizializzarla?


#include <cstdlib>
int rand();   // genera un numero casuale fra 0 e RAND_MAX
int srand(int seed);   // inizializza il generatore
	Mauro

random() in c++ e come si usa? Bisogna inizializzarla?
Il sistema é quasi uguale a quello del Pascal.Le funzioni da utilizzare
sono:
randomize();
Per inizializzare il generatore di numeri casuali.
int numero= random(limitenumero);
Per generare un numero casuale compreso fra 0 e limitenumero-1.
Ricorda che per poter utilizzare queste funzioni devi includere il file
header "stdlib.h".
Ciao!
Il Ghenio

 Per generare un numero casuale compreso fra 0 e limitenumero-1.
Non esistono, e se esistono non sono standard e
neanche portabili.  Dove le hai trovate?
Su alcuni sistemi c'e' una coppia simile (anche
questa non standard), di provenienza BSD:
  int random(); // niente parametro, numero in 0..RAND_MAX
  void srandom(unsigned int seed);  // inizializza
	Mauro

  void srandom(unsigned int seed);  // inizializza
Non esistono?Ma se le ho anche usate nel mio ultimo programma in
C++Builder.Non so che compilatore utilizzi te,ma queste funzioni
esistono eccome,fanno parte della libreria 'stdlib.h' e sono portabili
sia su DOS che su Win16,Win32 ed Ansi C++.Peraltro funzionano
alla perfezione e sono anche molto veloci.
Il Ghenio


Confermo quello che ha scritto Mauro: sicuramente non fanno parte della
stdlib.h.
EMG

alla perfezione e sono anche molto veloci.
int random(); // niente parametro, numero in 0..RAND_MAX
void srandom(unsigned int seed);  // inizializza
non sono standard (ne ANSI C ne ANSI C++)...
le corrispondenti funzioni standard sono
int rand(void);
void srand(unsigned seed);
D'altronde puoi verificarlo sugli help del BCB
Paolo
-----------------------------------------------------------------
  Paolo Marotta
  Computer Science, University of Pisa
  home:   
http://www.cli.di.unipi.it/~marotta
-----------------------------------------------------------------

della stdlib.h.
Ti stai sbagliando.Riporto l'esempio sulle funzioni randomize e
random fornito nell'help in linea del Turbo C++ 3.1
/* esempio random */
#include <stdlib.h>
#include <stdio.h>
#include <time.h>
/* stampa un numero random in un intervallo tra 0 e 99 */
int main(void)
 {
    randomize();
    printf("Random number in the 0-99 range: %d\n", random (100));
    return 0;
}
Il Ghenio

 random fornito nell'help in linea del Turbo C++ 3.1
Stai confondendo una caratteristica del tuo compilatore con lo standard.
Se leggi sul manuale vedrai che dice chiaramente che quelle funzioni
sono un'estensione del Borland.
EMG

random fornito nell'help in linea del Turbo C++ 3.1
Il BCB fornisce in effetti quelle funzioni come facenti parte della
stdlib.h, tuttavia semplicemente non sono standard!
Tanto per dirne una devi includere anche un altro header per
utilizzarle.


 Il Ghenio
Che il C++ builder li abbia inseriti in stdlib.h puo` anche essere, ma
il manuale di linux (anche sa magari non e` molto aggiornato) riporta:
SYNOPSIS
       #include <stdlib.h>
       long int random(void);
       void srandom(unsigned int seed);
       char *initstate(unsigned int seed, char *state, int n);
       char *setstate(char *state);
DESCRIPTION
       The random() function uses a non-linear additive  feedback
       ....
CONFORMING TO
       BSD 4.3
SEE ALSO
       rand(3), srand(3)
Marco Guidi. 
 

Vorrei porre fine alla discussione (che sembra stia diventando
una guerra santa), quindi consiglio agli utilizzatori di BCB 
di dare una occhiata alla voce "portability" nell'help, sia
per randomize & random che per la coppia rand & srand.
La formattazione non e` fatta bene, ma confrontandola per le
due coppie e` possibile capire che la prima (randomize &
random) e` portabile su dos, win16, win32 e os2 ma non
e` assolutamente standard ANSI. La seconda coppia
e` invece standard ANSI C e ANSI C++ ed e` portabile anche su
sistemi unix.
Lo stesso discorso  vale per qualsiasi altro s.o. (anche unix o linux)
lo standard prevede la coppia rand e srand e nessun altra.
Questo non vuol dire che altre funzioni siano inutilizzabili, 
semplicemente non sono standard, ma platform-dependend...
il che significa che se cambiate compilatore, probabilmente vi tocchera`
modificare anche il sorgente.


       rand(3), srand(3)
prova a vedere se in merito a queste funzioni il manuale
fa riferimento allo standard (bisognerebbe anche vedere quanto e`
vecchio...).


 una guerra santa)
Per porre fine, quale mezzo piu' opportuno per segnalare la risposta
definitiva (a questo stato della ricerca) per la generazione di numeri
casuali a 32 bits?
http://131.113.34.4/matumoto/emt.html
-- 
Maurizio Loreti                      
http://wwwcdf.pd.infn.it/~loreti/mlo.html
Un. of Padova, Dept. of Physics - Padova, Italy          
lor...@padova.infn.it

 Paolo
Forse mi ero spiegato male.
Io volevo proprio dire che secondo me quelle funzioni (random, srandom)
*non sono* standard, e a conferma di cio` riportavo la pagina di manuale di 
linux che non riporta ne' ANSI ne' ISO nel "CONFORMING TO".
Invece la pagina di manuale di rand riporta
RAND(3)             Linux Programmer's Manual             RAND(3)
NAME
       rand, srand - random number generator.
SYNOPSIS
       #include <stdlib.h>
       int rand(void);
       void srand(unsigned int seed);
 ...
CONFORMING TO
       SVID 3, BSD 4.3, ISO 9899
SEE ALSO
       random(3), srandom(3), initstate(3), setstate(3)
GNU                        18 May 1995                          1
Non so se ISO 9899 sia li standard oppure no (e tra l'altro il manuale e` del 
1995).
Per sapere come stanno le cose con certezza bisognerebbe avere il draft
ufficiale dello standard (non so se la 3. edizione dell Stroustrup riporti
qualcosa a riguardo)
Marco Guidi.


il mio contributo.
Ho sviluppato una applicazione console con BCB4 in cui utilizzavo
random(maxnum), poi ho cercato di compilarla con mingw32 che
prontamente mi diede errore. Lo standard prevede infatti solo rand()
come sostiene sia la guida del BCB4 come pure B. Stroustrup ;-) il
quale dice compe implementare l'equivalente di random(maxnum) con
rand(void):
in random_num = double(rand())/RAND_MAX*maxnum;
il_t@sso
il_t...@yahoo.com