Visualizzazione dei risultati da 1 a 6 su 6

Discussione: numeri casuali in c++

  1. #1

    numeri casuali in c++

    Ciao...

    ho bisogno di generare numeri casuali...voi direte "semplice !!!"...e invece non lo è proprio...almeno per me !!!

    Diciamo che mi sono creato una classe chiamata titolo e quasta classe ha una proprietà chiamata prezzo.

    Poi ho creato un metoto chiamato "aumenta_prezzo" dove genero un numero casuale e lo moltiplico per il prezzo.
    -----------------------
    class titolo ecc......
    void agg_valore(){
    randomize();
    a=rand()%2;
    if(a==0){
    valore=valore*(1+(rand()%10.0));
    }
    if(a==1 && valore > 0){
    valore=valore*(1-(rand()%10.0));
    }
    if(valore<=0){
    valore = 5.3;
    a=0;
    }
    if(valore>150){
    valore=5.125;
    a=1;
    }
    }
    ----------------------------------
    poi nella funzione principale istanzio 3 oggetti "titolo"
    es. : Titolo T1,T2,T3;

    e poi dico di aumentare il prezzo :

    T1.aumenta_prezzo();
    T2.aumenta_prezzo();
    T2.aumenta_prezzo();

    A questo punto io mi aspetto che i tre valori siano aumentati di percentuali diverse, ma invece aumentano tutti e tre in egual misura. Perche??

  2. #2
    Azzardo una risposta che mi sembra di aver letto:

    i numeri casuali sono riprodotti sempre nella stessa sequenza, questo per facilitare il debug dei programmi, a meno che vengano legati all'orario di sistema. Quindi prova ad inserire nel tuo pgm il file di intestazione <time.h> e legare la funzione rand all'orario di sistema con questo comando "srand(time(0));" prima di ricevere nella variabile "a" il valore casuale......

    dimmi se funziona....


  3. #3
    prova con:

    srand( (unsigned)time( NULL ) ); // invece di randomize()
    a=rand()%2;




    -------------------------------------------
    :quote: cacchio!!!... fregato sul tempo
    -------------------------------------------
    ...Terrible warlords, good warlords, and an english song

  4. #4
    ok, i numeri ora sono "più casuali", ma rimane ancora il fatto che il nuero generato dal metodo di un oggetto, rimane uguale anche per gli altri...cioè se ad esemprio T1.valore=5 e dopo l'esecuzione del metodo diventa T1.valore=7.5, allora è aumentato del 50%, il problema è che quel 50% me lo trovo su tutti gli altri oggetti: T2.valore ecc...

    io dovrei fare in modo che quando richiamo il metodo di aumento del prezzo di un oggetto, il numero casuale deve essere generato solo per quell'oggetto, e che non sia lo stesso per tutti....

    Quando io aumento i prezzo chiamo distintamente il metodo per ogni oggetto:
    T1.aumenta();
    T2.aumenta();
    ecc...

    Quindi dovrebbe generare un nuero diverso ogni volta....e invece non lo fà.

    Mi sapete aiutare ???

  5. #5
    prova a mettere srand( (unsigned)time( NULL ) );
    all'interno di ogni condizione... prima di rand()
    ...Terrible warlords, good warlords, and an english song

  6. #6
    Prova a vedere questo esempio che crea 10 copie di oggetti con valori random:

    codice:
    #include <iostream>
    #include <stdlib.h>
    #include <time.h>
    
    class prova
    {
    public:
    void valore()
    { 
        a=rand()%10; 
    }
    void print()
    { 
        cout << "Il valore di a è: " << a << endl;
    }
    private:
    int a;
    };
    
    void main()
    {
      srand(time(0)); 
      prova t1;
      prova t2;
    
      for (int i = 0; i < 10; i++)
     {   
      t1.valore();
      t1.print();
      
      t2.valore();
      t2.print();
      
      cout << endl;
      }
      
      system("PAUSE");	
      return 0;
    }
    Ciao

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.