Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 16
  1. #1

    [ANSI C] Generatore di numeri casuali

    Ciao

    l'altro giorno ho avuto dei grossi problemi a creare un generatore di numeri casuali in C, tanto ke ho deciso di rinunciarci e di farlo in java (e l'ho già fatto)

    il mio problema è semplice semplice: come si fa a generare un numero casuale in C?

    a tal proposito guardando all'interno della documentazione delle librerie standard e ho trovato la seguente funzione:

    #include <stdlib.h>
    int rand (void);

    "La funzione rand() genera una sequenza di numeri pseudo-casuali. Ad ogni chiamata, rand() restituisce un intero compreso tra 0 e RAND_MAX"
    (cito testualmente dal libro)

    .-.-.-.-.-.-.-.-.-.-.-.-.-.-.-.-

    #include <stdlib.h>
    void srand(unsigned seed);

    "La funzione srand() definisce un punto iniziale per la sequenza generata da rand(), la funzione che restituisce numeri pseudo-casuali" (anche qua cito testualmente)


    guardando nell'header, RAND_MAX vale 2 miliardi e qualcosa (2^31) e fin qui tutto bene.

    quando però uso questa funzione mi genera sempre la stessa sequenza di numeri. in java invece la Math.random() restituisce sempre un numero diverso. Ho provato ad aggirare il problema creandomi un generatore di numeri casuali e funzionerebbe bene ma va inizalizzato con un numero casuale e il problema torna come da principio.

    Sono sicuro ke mi sto perdendo un bicchier d'acqua, ma son so propiro come andarci fuori. Voi come fareste?

    Grazie mille

    ciao!

  2. #2
    Utente di HTML.it L'avatar di br0tz
    Registrato dal
    Jun 2003
    Messaggi
    27
    prova con

    #include <time.h>

    void randomize(void);

    int random(int max);

    genera un numero (casuale se ricordo bene) tra 0 e max-1

    ciao

  3. #3

    Non sono pratico di c ma...

    ti consiglio di cercare tra le librerie del c, una libreria che gestica l'ora e di generare un numero casuale in funzione dell'ora ... es :
    se ti serve un numero tra 1 e 60 ti basta prendere il tempo in secondi in quell'istante ( variabilie aleatoria con probabilita uniforme 1/60) se ti serve un numero + grande ti basta una funzione che amplifichi la cosa lasciando uniforme la pribabilità ...
    60 / 6 e ottieni un numero casuale tra 1 e 10
    se prendi i millisecondi hai 1/1000
    se prendi (ore /2.4)(minuti/60)(secondi/6)millisecondi la tua v.a assume valori €[0;1000000] non so cosa tu debba rappresentare ma 1000000 di possibilità nn sono poche!
    ( non programmo in c e pochissimo in c++ quindi non so che libreria sia) ciao
    Salverò Kagome e diventerò un vero demone !

  4. #4
    Utente di HTML.it L'avatar di br0tz
    Registrato dal
    Jun 2003
    Messaggi
    27

    Re: Non sono pratico di c ma...

    Originariamente inviato da inuy4sha
    ti consiglio di cercare tra le librerie del c, una libreria che gestica l'ora e di generare un numero casuale in funzione dell'ora ...
    è proprio quello che fa il randomize(); inizialzza il generatore di numero casuali ad un valore casuale

    cmq prima ho scordato un #include <stdlib.h>
    per usare il random();

  5. #5
    grazie mille a tutti. dopo provo e stasera vi so dire.

    ciau!!!

  6. #6
    ho appena provato con la libreria time.h e come mi hai detto ma non funziona.

    innanzitutto mi dice ke la funzione randomize() non esiste nell'header e cmq, quando la tolgo, random(int) restituisce sempre lo stesso numero casuale quando chiamo il programma (lavoravo in ambiente Redhat 9)

    una soluzione ci sarebbe...ed è quella di implementare un thread che continua a generare la sequenza....e poi viene bloccato da una pressione di un tasto del'utente...purtroppo xò in windows questo nn si può fare...

    vabbè pazienza..grazie lo stesso.

  7. #7
    Moderatore di Windows e software L'avatar di URANIO
    Registrato dal
    Dec 1999
    residenza
    Casalpusterlengo (LO)
    Messaggi
    1,287
    La funzione rand FUNZIONA!
    Ti da sempre lo stesso risultato perchè non cambi il seme!
    Ora non ricordo se è seed o srand comq prima della funzione fai una cosa del genere
    srand(time)

    in questo modo inserisci un seme nuovo e "casuale"

  8. #8
    Utente di HTML.it
    Registrato dal
    Dec 2002
    Messaggi
    191
    Io ho dovuto sviluppare un gioco che simula l'estrazione del gioco del lotto! ho usato questo codice che mi è stato indicato su questo forum e credo che non mi ha dato problemi:

    srand( (unsigned)time( NULL ) );
    numero=(rand()%90+1) ;
    ciao

  9. #9
    Utente di HTML.it L'avatar di br0tz
    Registrato dal
    Jun 2003
    Messaggi
    27
    scusa....

    ma....

    #include <time.h>
    #include <stdio.h>
    #include <stdlib.h>

    void main ()
    {
    int n;

    randomize();

    n=random(100);
    printf("%d",n);

    }


    non funziona?????

  10. #10
    esiste il motore di ricerca del forum ( U S A T E L O )

    chiave: rand

    risultati:
    http://forum.html.it/forum/search.ph...by=&sortorder=

    questo fa giusto al caso tuo:
    http://forum.html.it/forum/showthrea...highlight=rand
    ...Terrible warlords, good warlords, and an english song

Permessi di invio

  • Non puoi inserire discussioni
  • Non puoi inserire repliche
  • Non puoi inserire allegati
  • Non puoi modificare i tuoi messaggi
  •  
Powered by vBulletin® Version 4.2.1
Copyright © 2025 vBulletin Solutions, Inc. All rights reserved.