Visualizzazione dei risultati da 1 a 6 su 6
  1. #1
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30

    [LINGUAGGIO C] numeri casuali

    Buongiorno a tutti. Volevo sapere la regola per la funzione generatrice dei numeri casuali rand()... mi spiego meglio:
    se io devo generare un numero casuale compreso tra 1 e 100 dovrò scrivere:
    x=rand()%100+1 oppure x=1+rand()%100.

    Ma se io dovessi generare un numero tra 2 e 6
    perchè se scrivo:
    x=rand()%6 +2 comprende anche il 7???
    oppure un numer tra 1000 e 2000
    x=rand()%2000 +1000 genera numeri oltre il 2000???

    Qual'è la regola???
    Grazie in anticipo....

  2. #2
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    http://www.cplusplus.com/reference/c.../cstdlib/rand/

    Da come puoi leggere dal precedente collegamento, la rand() funziona in questo modo:

    x = rand() % 6 + 2 // genera numeri a partire da 2 fino a 8, ossia 2 + 6.

    Se vuoi generare numeri tra 2 e 6, devi scrivere così:

    y = rand() % 4 + 2

  3. #3
    Utente di HTML.it
    Registrato dal
    Jan 2008
    Messaggi
    30
    .....aaaah!!!!!! Ok Perfetto... Sei stato veramente gentile e chiarissimo!!!! Finalmente ho capito la tattica :P

  4. #4
    Originariamente inviato da xshell

    x = rand() % 6 + 2 // genera numeri a partire da 2 fino a 8, ossia 2 + 6.
    No, x varrà da 2 a 7 in quel caso.

    Originariamente inviato da xshell

    Se vuoi generare numeri tra 2 e 6, devi scrivere così:

    y = rand() % 4 + 2
    No, così si generano numeri tra 2 e 5.

    In generale, per avere numeri compresi tra un minimo ed un massimo (inclusi) si può fare così:

    const int min = 2;
    const int max = 8;
    int num;

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

    Attenzione a non superare RAND_MAX ovviamente.

  5. #5
    Moderatore di Programmazione L'avatar di LeleFT
    Registrato dal
    Jun 2003
    Messaggi
    17,304
    Nessuno gli ha spiegato cosa fa l'operatore modulo ( % )? Senza sapere come funziona il modulo si fa poca strada. Il modulo è un operatore che restituisce il resto della divisione fra i suoi due argomenti:

    codice:
    a % b
    restituisce il resto della divisione intera (a / b). Ora, il resto della divisione (a / b) è sempre un numero compreso fra 0 e (b-1), per ovvie questioni matematiche.

    Ecco perchè, per generare un numero casuale fra 1 e x si usa

    codice:
    int numero = (rand() % x) + 1
    Il valore in grassetto è sempre un numero compreso fra 0 e (x-1). Ma a noi serve tra 1 e x, quindi aggiungiamo 1 (se il valore in grassetto è 0, infatti verrà generato 1, se è [x-1] verrà generato x).


    Ciao.
    "Perchè spendere anche solo 5 dollari per un S.O., quando posso averne uno gratis e spendere quei 5 dollari per 5 bottiglie di birra?" [Jon "maddog" Hall]
    Fatti non foste a viver come bruti, ma per seguir virtute e canoscenza

  6. #6
    Utente di HTML.it L'avatar di xshell
    Registrato dal
    Apr 2008
    Messaggi
    157
    Originariamente inviato da ESSE-EFFE
    No, x varrà da 2 a 7 in quel caso.



    No, così si generano numeri tra 2 e 5.

    In generale, per avere numeri compresi tra un minimo ed un massimo (inclusi) si può fare così:

    const int min = 2;
    const int max = 8;
    int num;

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

    Attenzione a non superare RAND_MAX ovviamente.
    Allora devo aver interpretato male quello che c'è scritto su cplusplus...

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 © 2024 vBulletin Solutions, Inc. All rights reserved.