[Pillola] Generare numeri casuali in C/C++
  • In diretta da GamesVillage.it
    • News
    • -
    • In Evidenza
    • -
    • Recensioni
    • -
    • RetroGaming
    • -
    • Anteprime
    • -
    • Video
    • -
    • Cinema

Pag 1 di 2 12 UltimoUltimo
Visualizzazione risultati da 1 a 15 di 25

Discussione: [Pillola] Generare numeri casuali in C/C++

Cambio titolo
  1. #1
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364

    [Pillola] Generare numeri casuali in C/C++

    o da poco cominciato a programmare in C evorrei sapereun po' di cosette...

    1) come si fa a generare un numero casuale?
    io faccio così:
    numero = 0||1||2|| eccc'èun modo + rapido?
    2) come sifa a far partire il programma in finestra win e non in dos?

    ty

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  2. #2
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Ma ti funziona in quel modo assurdo?

    Modi più "veloci" non ce ne sono, c'è però un modo più elegante, e consiste nell'utilizzare time.h e la funzione rand(), che è fatta apposta.
    A dire il vero l'ho usata solo una volta, e tra l'altro era C++ e non avevo nemmeno commentato il codice cmq in linea di massima è così:

    Codice:
    #include <stdio.h>
    #include <time.h>
    
    int main(void){
      int scelta;
    
    srand(time(0));
    
    	printf("Sta per essere stampato un numero a caso\n");
    
    	scelta = 1+rand() % 3;
    
    	switch(scelta){
    	case 1: printf("\t0\n");
    		break;
    	case 2: printf("\t1\n");
    		break;
    	case 3: printf("\t2\n");
    		break;
              }
    
      return(0);
    }


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  3. #3
    Utente L'avatar di devilheart
    Registrato il
    01-03
    Messaggi
    28.310
    il codice di phoenix è ottimo. però cosiglio di utilizzare la funzione random(int max) (stdlib.h) dove max è il numero più grande che si vuole avare. per utilizzare le finestre bisogna utilizzare la funzione WinMain() invece della main() ma è molto più complesso.

  4. #4
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    e per scegliere i limiti fra cui generare il numero?

    cioè ... 50 > x >0 ?

    ty

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  5. #5
    Utente L'avatar di IWBY
    Registrato il
    10-02
    Località
    Italia
    Messaggi
    715
    raga, la funzione rand() inizializzata con srand(time(0)) è una possibile soluzione... però è troppo condizionata dai secondi correnti. nn so se mi spiego. ad esempio se uno deve effettuare delle estrazioni casuali, nello stesso istante... gli uscirà lo stesso numero per ogni estrazione: questo perchè srand(time(0)) se nn sbaglio inizializza rand() al secondo corrente e quindi se le estrazioni (supponiamo 3 estrazioni) sono effettuate nello stesso istante, è chiaro che verrà estratto lo stesso numero! invece vi ripropongo un programma completo, che estrae 2 numeri per 5 iterazioni che avvengono nello stesso istante, per un totale di 10 numeri:
    #include <stdio.h>
    #include <stdlib.h>
    #include <sys\timeb.h>

    main()
    {
    int x;
    int nr_int_1, nr_int_2;
    struct timeb tempo;
    ftime(&tempo);
    srand(tempo.millitm);
    for(x=0;x<5;x++)
    {
    nr_int_1=rand();
    nr_int_2=rand()/10;
    printf("\nIterazione %d\n\nPrimo numero: %d\tSecondo numero: %d\n", x+1, nr_int_1, nr_int_2);
    }
    printf("\n\n\nPremere un tasto per terminare");
    getchar();
    }
    premetto che il programma è preso da un mio piccolo manualino, e che nn so nei dettagli come funziona, dato che nn conosco l'header sys/timeb.h e le sue relative strutture e funzioni. cmq fatto sta ke funziona e può essere usato... anche se nn so se è compatibile ANSI...
    ah alla riga:
    nr_int_2=rand()/10;
    può anche essere eliminato il "/10", serve solo per rendere i numeri più piccoli....

    cmq il programma funziona ed è davvero abastanza casuale... peccato che non si possa stabilire il limite massimo!
    Morte alle consolles e ai loro giochi schifosi che arrivano su pc!


  6. #6
    Utente L'avatar di Phoenix
    Registrato il
    10-02
    Località
    Midwich Street
    Messaggi
    6.699
    Beh, ma tutte le funzioni di casualità sono funzioni del tempo...

    Per scegliere i limiti ti basta mettere tanti case nello switch quanti sono i numeri tra cui vuoi beccare quello casuale; bel mio codice era 3 (0,1,2), ti basta aggiungerne fino a 50, e ovviamente modificare %3 in %50 nel valore di "scelta"


    He who is not bold enough to be stared at from across the abyss
    is not bold enough to stare into it himself.

  7. #7
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Quello che IWBY vuole dire e' che nel periodo di tempo compreso (estremi esclusi) tra, poniamo, le 17.20.00 e le 17.20.01, il seguente codice restituisce lo stesso num:
    Codice:
    srand(time(NULL));
    int num = rand();
    questo perche' time() ritorna il tempo in secondi.
    Un esempio non troppo brillante di funzione (in C++, sotto Windows) che restituisce un numero casuale tra 1 e l'argomento potrebbe essere:
    Codice:
    int num_casuale(int limite)
    {
    	static bool inizializzato = false;
    
    	if (!inizializzato) {
    		struct timeb tmp;
    
    		ftime(&tmp);
    		srand(tmp.millitm);	
    		inizializzato = true;
    	}
    	
    	return ((rand() % limite) + 1);
    }
    Ultima modifica di 3y34|v|31337; 27-09-2003 alle 22:18:17
    man is your friend

  8. #8
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    ????

    Ma non c'è la

    Randomize();
    Random(n);

    Perchè fate quel casino???

  9. #9
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    Che io sappia, in C standard esistono solo srand() e rand().
    Mi sembra di ricordare che i compilatori della Borland aggiungano random() e randomize(), ma e' una estensione non standard che non si ritrova di solito in altri compilatori.
    Ultima modifica di 3y34|v|31337; 28-09-2003 alle 11:03:58
    man is your friend

  10. #10
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    vi spiego per cosa mi serve...

    sto creando un gioco di ruolo testuale (in dos) usando le regole del gioco di ruolo cartaceo "la storia ancestrale" (quelle di D&D sono troppo un casino da elaborare in C x me...)

    ho bisogno din un num casuale per il trio x colpire o usare un abilita' (2Dadi da 6)
    e un num casuale x i danni, effetti casuali di incantesimi ecc...

    ho bisogno che l'istruzione si il + facile possibile...

    NN PENSAVO KE X UN RPG TESTUALE CI VOLLESSE COSì TANTO CODICE!!!
    HO GIà SCRITTO +DI 400 LINEE!!!
    CI AVRO' MESSO ALMENO 200 "IF"!!!

    ty a ttt cmq

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  11. #11
    Utente L'avatar di complicated
    Registrato il
    08-03
    Località
    villaggio dei puffi
    Messaggi
    364
    Inviato da Yubei
    ????

    Ma non c'è la

    Randomize();
    Random(n);

    Perchè fate quel casino???

    usi linux x caso?
    un mio amico prog mi a parlato di quelle library ma mi a detto ke esistono solo su linux!

    Una donna per domarli, Una donna per trovarli,
    Una donna per ghermirli e nel buio incantenarli.
    (motto del partito "Donne al Potere")


    non so cos'altro scrivere nella firma...

  12. #12
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    Che io sappia, in C standard esistono solo srand() e rand().
    Mi sembra di ricordare che i compilatori della Borland aggiungano random() e randomize(), ma e' una estensione non standard che non si ritrova di solito in altri compilatori.
    Ma come funzionano precisamente????

  13. #13
    Utente L'avatar di IWBY
    Registrato il
    10-02
    Località
    Italia
    Messaggi
    715
    Inviato da complicated
    usi linux x caso?
    un mio amico prog mi a parlato di quelle library ma mi a detto ke esistono solo su linux!
    infatti, in ke libreria si trovano per vc++6.0 della micro$oft?
    Morte alle consolles e ai loro giochi schifosi che arrivano su pc!


  14. #14
    Utente
    Registrato il
    12-02
    Località
    Venezia
    Messaggi
    110
    void srand(unsigned int i)

    Inizializza il generatore di numeri casuali con i.

    int rand()

    restituisce un intero (pseudo-casuale) tra 0 e RAND_MAX.
    Per le altre funzioni meglio chiedere a qualcuno che usa il Borland come compilatore.
    man is your friend

  15. #15
    Utente
    Registrato il
    10-02
    Messaggi
    2.367
    Inviato da 3y34|v|31337
    void srand(unsigned int i)

    Inizializza il generatore di numeri casuali con i.

    int rand()

    restituisce un intero (pseudo-casuale) tra 0 e RAND_MAX.
    Per le altre funzioni meglio chiedere a qualcuno che usa il Borland come compilatore.
    1) a che gli serve i a srand????
    2)Quanto vale RAND_MAX??

    t

Pag 1 di 2 12 UltimoUltimo

Regole di Scrittura

  • Tu non puoi inviare nuove discussioni
  • Tu non puoi inviare risposte
  • Tu non puoi inviare allegati
  • Tu non puoi modificare i tuoi messaggi
  •