Pagina 1 di 3 1 2 3 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 21
  1. #1
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258

    [c] num casuale da min a max

    ciao a tutti, come faccio a fare una funzione che restituisca un numero casuale compreso fra un minimo e un massimo?

  2. #2

  3. #3
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Io in passato ho usato sempre un'istruzione simile:

    codice:
    num = min + (max-min) * rand() / RAND_MAX;
    dove min e max sono appunto rispettivamente il valore minimo e il valore massimo dell'intervallo che ti interessa ( RAND_MAX è invece la variabile definita in stdlib.h equivalente a 32767, massimo valore ottenibile con rand() ).

    Dovrebbe funzionare sempre, anche per i numeri negativi.

    Ho scritto a volo un main:

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    int main(void) {
        
        short min, max, num;
        
        printf("Immettere il valore minimo dell'intervallo: ");
        scanf("%hd%*c", &min);
        
        printf("Immettere il valore massimo dell'intervallo: ");
        scanf("%hd%*c", &max);
    
        srand( (unsigned int)time(NULL) );
    
        num = min + (max-min) * rand() / RAND_MAX;
        
        printf("\nIl numero generato e': %hd\n", num);
        
        getchar();
        return 0;
    }
    Fammi sapere se hai problemi

  4. #4
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    prova la tua funzione con numero minimo = 2 e numero massimo = 5, viene sempre 2! VVoVe:

  5. #5

  6. #6
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    come devo mettere quindi?

  7. #7
    Originariamente inviato da Lucked
    come devo mettere quindi?
    Ragionare un po'

    http://www.cppreference.com/stdother/srand.html

  8. #8
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    ok...ma non mi convince tanto una formula giusta, per trovare il mio numero casuale..uff..

  9. #9
    Utente di HTML.it
    Registrato dal
    Jul 2008
    Messaggi
    1,326
    Veramente la srand() c'è, e come argomento ha il valore restituito da time() che quindi è sempre variabile.

    Il problema è di distribuzione di numeri, infatti se si sceglie un intervallo ampio (come 1 - 1000) si ottengono valori diversi, anche se di pochissime unità.

    Basta cambiare formula: sostituisci quella con

    num = min + rand()%(max+1);

    una volta spiegai proprio su questo forum la differenza tra questa formula e l'altra... in effetti pur conoscendo la differenza in teoria, non avevo mai avuto la possibilità di coglierla in pratica. Ora mi rendo conto dell'importanza della differenza

    Comunque usa questa formula che ti ho scritto e non avrai problemi (anche con 2 - 5 vengono valori diversi).

  10. #10
    Utente di HTML.it
    Registrato dal
    Oct 2003
    Messaggi
    1,258
    forse ce l'ho fatta, mi date un occhiata?

    codice:
    #include <stdio.h>
    #include <stdlib.h>
    #include <time.h>
    
    #define MIN_VAL 2
    #define MAX_VAL 5
    
    int main(void) {
        srand( time(NULL) );
        int num = (rand () % (MAX_VAL-1))+MIN_VAL;
        printf("%d \n", num);
    }

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.