Pagina 1 di 2 1 2 ultimoultimo
Visualizzazione dei risultati da 1 a 10 su 11
  1. #1
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511

    [C]Mi spiegate bene come funziona la funzione RAND

    come da titolo...utilizzare la funzione random...

    magari con un esempietto di un programma che sceglie numeri a caso...vi ringrazio!

  2. #2
    Utente di HTML.it L'avatar di ibykos
    Registrato dal
    Feb 2005
    Messaggi
    201
    per generare numeri casuali in C di solito si usa la funzione rand().
    Prima di tutto devi includere la libreria di utilità standard

    #include <stdlib.h>

    Da questo momento in poi puoi utilizzare la bellissima funzione

    rand()

    che genera numeri casuali interi da 0 a RAND_MAX (che è molto alto).
    Ora, poniamo chetu voglia simulare un dado, per cui ti servono numeri da uno a sei, ebbene la procedura standard è questa:

    roll= rand()%6+1;

    con questa istruzione generi numeri casuali da 1 a 6 abbastanza equiprobabili, se invece usi valori molto alti a destra del modulo, questa considerazione non è più valida.
    Un'altro problema non indifferente è che i numeri casuali sono sempre gli stessi ad ogni esecuzione del programma, perché l'algoritmo con cui vengono generati è deterministico.
    Pertanto occorre introdurre ogni volta un "seme" diverso, il quale sarà l'unico vero elemento casuale nel programma.
    La funzione che permette di "inseminare" rand() è

    srand(int)

    La scelta dell'intero può essere fatta in molti modi, ma molto spesso si usa

    #include <time.h>

    srand(time(NULL));

    Il secondo del giorno in cui il programma viene lanciato dovrebbe essere abbastanza casuale.

    ricapitolando, ecco un programma che lancia un dado ad ogni pressione del tasto invio

    codice:
    #include <stdio.h>
    #include <time.h>
    #include <stdlib.h>
    
    int main (){
       
       int count=0;
    
       srand(time(NULL));
    
       while (count <1000){
          printf ("%d",rand()%6+1);
          getchar();
       }
    
       exit(1);
    }

  3. #3
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    ti ringrazio...

    mi spiegheresti alcune righe...giusto per un po di chiarezza!

    allora...

    le varie librerie...
    poi inizializzi il contatore a 0...
    la funzione srand()viene "inseminata" dal tempo...
    finchè il contatore è inferiore a 1000 visualizza rand...
    getchar serve per cosa in questo caso?
    il cvontatore dove viene incrementato?
    exit(1) cosa significa?
    ti ringrazio sei stato gentilissimo...

  4. #4
    Originariamente inviato da Eris

    getchar serve per cosa in questo caso?
    il cvontatore dove viene incrementato?
    Si è dimenticato di aumentarlo
    aggiungi "count++" prima di getchar(), sennò va in loop infinito, perchè la condizione del while non si verifica mai.

    Getchar lo ha messo (ma puoi benissimo toglierlo) per farsì che tu debba premere invio (o qualsiasi altro tasto) prima di far apparire il nuovo numero. Se lo levi te li stampa tutti senza che tu debba far nulla...

    exit(1) cosa significa?
    http://crasseux.com/books/ctutorial/...-function.html

    Tra l'altro avrebbe dovuto scrivere exit(0), visto che 1 indica la presenza di errori (uguale a return 0/1).

  5. #5
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    ok provo...vediamo se riesco a fare una cosetta...

  6. #6
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    ecco...mi dice che null non è dichiarato...

  7. #7
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,463
    Metti 0 al posto di NULL

  8. #8
    Utente di HTML.it L'avatar di Eris
    Registrato dal
    Feb 2004
    Messaggi
    511
    non va

    codice:
    int main()
    {  int prodotto, prodBambino, num1, num2;
       num1 = srand(time(0));
       num2 = srand(time(0));
    
       printf("Quanto fa' %d per %d?\n", num1, num2);
       
       prodotto = num1*num2;
       
       scanf("%d", &prodBambino);
       
       if (prodotto==prodBambino)
       {printf("Bravo!!\n")
       getchar();
       }/*fine if*/
       
       else (prodotto!=prodBambino)
       {printf("Sbagliato prova ancora!\n")
       getchar();
       scanf("%d", &prodBambino)};

  9. #9
    NULL non va dichiarato, scrivilo tutto maiuscolo, in C c'è differenza tra maiuscolo e minuscolo.
    Inoltre fai come dice Ibykos:

    srand(time(NULL));
    ...
    Numero = rand();

    non

    Numero = srand(time(NULL));


  10. #10
    Utente di HTML.it L'avatar di oregon
    Registrato dal
    Jul 2005
    residenza
    Roma
    Messaggi
    36,463
    Originariamente inviato da Eris
    non va

    codice:
    int main()
    {  int prodotto, prodBambino, num1, num2;
       num1 = srand(time(0));
       num2 = srand(time(0));
    
       printf("Quanto fa' %d per %d?\n", num1, num2);
       
       prodotto = num1*num2;
       
       scanf("%d", &prodBambino);
       
       if (prodotto==prodBambino)
       {printf("Bravo!!\n")
       getchar();
       }/*fine if*/
       
       else (prodotto!=prodBambino)
       {printf("Sbagliato prova ancora!\n")
       getchar();
       scanf("%d", &prodBambino)};
    srand serve solamente ad inizializzare il generatore di numeri casuali e va usato una sola volta.

    Per generare i numeri devi usare la funzione rand cosi' come ti era stata mostrata ... ma tu l'hai eliminata senza motivo ...

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.