Newsgroup: it.comp.lang.c++
Titolo: aiuto!!! ho provato INDOVINA IL NUMERO ma...

Salve io ho provato con questa soluzione il problema posto da Archimedix in
data 17/10/2003  ma non mi funziona, probabilmente è perchè non so bene come
usare la funzione rand()...
qualcuno mi sa dire dove sbaglio???
grazie a tutti
Matteo
--------------------------------------------------------
#include <iostream.h>
#include <stdlib.h>
int chiedi()
      {
          cout << "scrivi un numero compreso tra 1 e 99\n";
          int i=0;
          cin >> i;
          return i;
      }
int main()
{
      int max = 10;
      int numero_utente = -1;
      int tentativi = 0;
      int numero = rand(99);
      numero_utente = chiedi();
      while (numero_utente != numero && tentativi < max)
      {
            if (numero_utente > numero)
            {
                cout << "il numero da indovinare è più grande di " << numero
<<"\n";
                int k = numero;
                numero = rand(k,99);       //è qui che non so se va bene!!!
            }
            else
            {
                cout << "in numero da indovinare è più piccolo di " <<
numero <<"\n";
                int h = numero;
                numero = rand(h,0);            // lo stesso vale qui
            }
            tentativi = tentativi + 1;
      }
      cout << "bravo hai indovinato!!!" ;
      system("PAUSE");
      return 0;
}

 Matteo
Penso che ci sono due problemi nel tuo codice.
(1)
Il primo è che bisogna prima assegnare un "seme" al generatore di numeri 
casuali, altrimenti ottieni sempre la stessa sequenza di numeri.
Questa funzione la ottieni con srand(unsigned int seed) da chimare solo una 
volta all'inizio.
dove il seed deve essere un numero diverso ogni volta che la chiami.
Un modo per fare questo è
#include <time.h>
srand(time(NULL));
(2)
Il secondo problema è che, almeno nella funzione rand standard, non accetta 
parametri, cioè
la rand e definita come
int rand(void)
e solitamente genera un intero tra 0 e 32767, ma per non sbagliare il 
limite massimo puoi usare RAND_MAX.
Ritornando al tuo esercizio, per avere un numero compreso tra 0 e 99 devi 
usare:
99*rand()/RAND_MAX
se lo vuoi tra k e 99
k+(99-k)*rand()/RAND_MAX.
Prova e fammi sapere.
Ciao,
Checco.

 limite massimo puoi usare RAND_MAX.
Mi sentirei di dire che attualmente
RAND_MAX e' piu' frequentemente 
2147483647
che non 32767.
Ormai gli interi sui compilatori recenti
sono su 32 bit.
ciao,
g.

grazie a tutti e due per le dritte!!! ;-))
stasera appena torno a casa mi metto all'opera e vi so dire...
ciao e grazie,
Matteo

ok funziona!!!!
grazie ragazzi...
ecco il codice finale...
----------------------------------------------------------------------------
-----------
#include <iostream.h>
#include <stdlib.h>
#include <time.h>
int chiedi()
      {
          cout << "scrivi un numero\n";
          int i=0;
          cin >> i;
          return i;
      }
int main()
{
      int max = 100;
      int numero_utente = -1;
      int tentativi = 0;
      srand(time(NULL));
      int numero = 99*rand()/RAND_MAX;
      time_t time;
      numero_utente = chiedi();
      while (numero_utente != numero && tentativi < max)
      {
            if (numero_utente > numero)
            {
                cout << "il numero da indovinare è più grande di " << numero
<<"\n";
                int k = numero;
                numero = numero+(99-numero)*rand()/RAND_MAX;
            }
            else
            {
                cout << "il numero da indovinare è più piccolo di " <<
numero <<"\n";
                int h = numero;
                numero = numero*rand()/RAND_MAX;
            }
            tentativi = tentativi + 1;
      }
      if (numero == numero_utente)
      cout << "bravo hai indovinato con " <<tentativi<< "tentativi";
      else
      cout << "spiacente ma non ce l'hai fatta.";
      system("PAUSE");
      return 0;
}
----------------------------------------------------------------------------
------------
saluti,
Matteo