Il gioco d'azzardo e il C++: le funzioni rand e srand, La breve guida di Metal H sul C++ - Capitolo II/bis

« Older   Newer »
  Share  
xMandx
view post Posted on 9/2/2006, 08:42




Ciao a tutti!
sto cercando di fare un programmini che mi generi numeri casuali tra 0 e 1 e poi eventualmente che mi simuli illancio di un dado.

Questa è la bozza:
CODICE

#include <stdio.h>

#include <stdlib.h>

#include <math.h>

#include <time.h>

int main()
{
//devo creare un generatore di numeri casuali, eventualmente uno che simuli il lancio di un dado
printf("",RAND_MAX); // è il numero massimo fino a cui mi genera i numeri casuali
srand(time(0));
int risultato = ( ( rand ( ) % 32766 )+1 );
printf("\n\n%i",risultato);
float app = risultato;
float dado = app/RAND_MAX;
printf("\n\n",dado);
float a = (dado*6)/1;
printf("\n\n",a);
return(0);  
}



chiarmanete ci sono molte imprecisioni.

Ma il problema più grosso che ho notato è che in questo modo genera numeri in sequenza e non casuali tipo:
0.7695618
0.795709
0.795923
....
temo di non aver capito come come funzioni le funzioni rand e srand e in particolare quella legata al tempo.
io per scrivere i miei programmi uso dev c++ su winXP

didetemi dove sbaglio!

ci

Edited by Metal H - 9/2/2006, 14:17
 
Top
Metal H
view post Posted on 9/2/2006, 14:27




Ti ho sistemato il messaggio. D'ora in poi cerca di scrivere i tuoi programmi tra i tag CODE, probabilmente era quello che ti impediva di postare.
Comunque sia, analizziamo il programma. Non ho ben capito la logica da te utilizzata per costruire questo programma, ma ti do due consigli: primo, non usare funzioni del C nel C++, come printf, ma usa gli stream (cout, cin, cerr e clog). Secondo, non penso si possano estrarre numeri decimali con rand. Fra breve posterò una versione del programma che però permette di ottenerli lo stesso wink.gif!
Ciao!

Edited by Metal H - 9/2/2006, 14:28
 
Top
xMandx
view post Posted on 9/2/2006, 16:00




CITAZIONE (Metal H @ 9/2/2006, 14:27)
Ti ho sistemato il messaggio. D'ora in poi cerca di scrivere i tuoi programmi tra i tag CODE, probabilmente era quello che ti impediva di postare.
Comunque sia, analizziamo il programma. Non ho ben capito la logica da te utilizzata per costruire questo programma, ma ti do due consigli: primo, non usare funzioni del C nel C++, come printf, ma usa gli stream (cout, cin, cerr e clog). Secondo, non penso si possano estrarre numeri decimali con rand. Fra breve posterò una versione del programma che però permette di ottenerli lo stesso wink.gif!
Ciao!

il fatto è che dividendo il numero casuale per il numero massimo che si può ottenere ottengo un numero compreso tra zero e uno.
Il fatto è però che i numeri non sono casuali ma sono sempre crescenti, volevo sapere se è normale (non credo) e come fare per rimediare
 
Top
Metal H
view post Posted on 9/2/2006, 22:06




Potresti provare così:
CODICE


#include <cstdlib>


#include <iostream>

#include <cmath>


#include <ctime>


using namespace std;

int main()
{
srand (time(0));
for (int i=0; i<10;i++)
{
float as;
as = rand () % 100;
as /= 100;
cout << as<< endl;
}
system ("pause");
return 0;
}

Non è scritto molto bene ma rende l'idea. Provalo!
 
Top
xMandx
view post Posted on 9/2/2006, 23:51




è proprio quello che volevo!
grazie
mi potresti cercare di spiegare il modo in cui funzionano le funzioni rand/srand/time?
"cout << as<< endl;" -> cosa significa?
 
Top
Metal H
view post Posted on 10/2/2006, 13:28




Allora, il programma è scritto alla ca**o, quindi as è un nome di variabile scritto così per dire.
Per quanto riguarda
CODICE
cout << as << endl;

si limita a visualizzare il valore di as e ad andare a capo. Per saperne di più, iscriviti alle lezioni postando qui e consulta questi topic:
- Prima lezione
- Seconda lezione
- Lezione facoltativa
 
Top
intuscio
view post Posted on 5/3/2006, 17:02




BUONASERA sono nuovo qui.. huh.gif ascolti io non sono tanto esperto di c++ vorrei chiederti se mi compili un paio di cosuccie unsure.gif ... che per te forse sono ca**ate secondo me happy.gif ma io non ci ho capito un tubo allora in pratica devo fare un programma che simuli il gioco del birdcage sai qual'è? dai attendo una risosta poi ti dico il resto ok grazie in anticipo

huh.gif allora anticipo un pò... si punta un dollaro a partita..il numero di partite è di 1.575.536
in ogni partita si lanciano 3 dadi..
se esce un 6 vinco un dollaro, due 6 due dollari, tre 6 tre dollari
se non ne escono non si vince.
alla fine devo calcolare la vincita media , devo indicare le partite in cui è uscito un 6, due 6, tre 6, zero 6.......
e in più ho le idee un po confuse perkè sul compito c'è scritto di utilizzare un seme = 3898 ke significa??? booh wacko.gif
mi potete delucidare le idee ?? ....grazieee
 
Top
Metal H
view post Posted on 6/3/2006, 13:17




Uhm... non ci ho capito molto, comunque sarò felice di aiutarti.
Apri un topic a parte con la richiestae poi vediamo cosa fare. Se è un compito mi puoi postare il testo?
 
Top
Don[ITA]
view post Posted on 11/3/2006, 16:56




Credo di essere l'ultimo arrivato...però ho fatto i compiti tongue.gif
Ecco il codice sorgente del mio giochino:
CODICE
#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main ( void )
{
 int var1 = 0;
 int var2=0;
 cout << "Indovina il numero che penso!!! ";
 srand ( time ( NULL ) );
 var1 = ( ( rand ( ) % 50 ) + 1 );
 
 cout<<"Scrivi un numero intero compreso tra 0 e 50: ";
 cin>>var2;
do
{

 if (var1>var2)
{
    cout<<"Troppo basso...Ritenta: ";
    cin>>var2;
}//sultato minore
 if (var1<var2)
{
    cout<<"Troppo alto...Ritenta: ";
    cin>>var2;
}//risultato maggiore
}
while (var2!=var1);

if (var2=var1)
{
    cout<<"Esatto!!! ";
}//risultato corretto

 system ( "pause" );
 return 0;
}
 
Top
Don[ITA]
view post Posted on 11/3/2006, 20:52




Mi è piaciuto talmente tanto il giochino dei numeri che ne ho fatto uno un pochino diverso:

CODICE
//Nuovo Gioco

#include <iostream>
#include <ctime>
#include <cstdlib>
using namespace std;

int main(void)
{
int var1 = 0;
int var2=0;
int var3=0;
int var4=0;
int var5=0;
int var6=0;
 cout << "Scoprite la combinazione del lucchetto\n";
 srand ( time ( NULL ) );
 var1 = ( ( rand ( ) % 9 ) + 1 );
 var2 = ( ( rand ( ) % 9 ) + 1 );
 var3 = ( ( rand ( ) % 9 ) + 1 );
 cout << "La combinazione e\' composta a 3 serie di numeri\nche vanno dallo 0 al 9.\nInserite la combinazione.\n\n";
 cout<<"Primo numero:   ";
 cin>>var4;
 cout<<"Secondo numero: ";
 cin>>var5;
 cout<<"Terzo numero:   ";
 cin>>var6;  
 
do
{
 
 
  if (var1!=var4 && var2==var5 && var3==var6)
  {
  cout<<"Il primo numero e\' errato.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//primo num scorretto
 
  if (var1==var4 && var2!=var5 && var3==var6)
  {
  cout<<"Il secondo numero e\' errato.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//secondo num scorretto

  if (var1==var4 && var2==var5 && var3!=var6)
  {
  cout<<"Il terzo numero e\' errato.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//terzo num scorretto
 
  if (var1!=var4 && var2!=var5 && var3==var6)
  {
  cout<<"Solo il terzo numero e\' corretto.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//terzo num corretto
 
  if (var1!=var4 && var2==var5 && var3!=var6)
  {
  cout<<"Solo il secondo numero e\' corretto.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//secondo num corretto
 
  if (var1==var4 && var2!=var5 && var3!=var6)
  {
  cout<<"Solo il primoo numero e\' corretto.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//primo num corretto
 
  if (var1!=var4 && var2!=var5 && var3!=var6)
  {
  cout<<"Nessun numero corretto.\nRiprova\n";
  cout<<"Reinserire primo numero:   ";
 cin>>var4;
 cout<<"Reinserire secondo numero: ";
 cin>>var5;
 cout<<"Reinserire terzo numero:   ";
 cin>>var6;
  }//combinazione errata
}//possibilità
while (var1!=var4 or var2!=var5 or var3!=var6);

 if (var1==var4 && var2==var5 && var3==var6)
  {
  cout<<"complimenti hai trovato la combinazione corretta!!!\n\n";
  }//combinazione corretta

 system ( "pause" );
 return 0;
}


Ditemi cosa ne pensate (lo so è una ca****a però mi son divertito come un matto a farlo...lol)!!!
 
Top
view post Posted on 11/3/2006, 21:17

Senior Member

Group:
Amministratore
Posts:
22,566
Location:
Roma

Status:


Carino biggrin.gif
 
Web  Top
IlGenioNero
view post Posted on 18/4/2006, 11:46




Volevo fare qual cosa col C++ e quindi ho creato questo semplice giochino:
CODE
// Gioco.cpp
// Game by IlGenioNero
#include <iostream>  
using namespace std;


int main ( void )
{
 double soldi = 10;
 double puntata =0;
 int risultato = 0;
 char regole = 0;
 // regole
  cout << "\a Regole\n" << "Selezioni una quantita di $ da puntare se il numero"
  << "che esce è maggiore di 5 (6-7-8-9)vinci il doppio della puntata,\n";
  system ("pause");
  cout << " se il numero è minore di 6 (5-4-3-2-1) perdi i soldi puntati,"
  << " se il numero è 10 Fai Jeckpot è vinci mille volte la puntata...\n"
  << "Il Gioco Finisce qundo perdi tutti i soldi...\n"
  << "E' possibile puntare anche numeri decimali!!!\n\n"
  << "NON PUNTARE MAI PIU' DI QUELLO CHE POSSIEDI O PERDERAI TUTTO SEMPRE E COMUNQUE...\a\a\a\n\n\n\n" ;    
  system ("pause");
      cout << "\n\n\n";
// inizio gioco
 while ( soldi > 0 )
{
//scelta puntata
 cout << "Hai " << soldi <<"$\n\n\n";
 cout << "Scegli quanto puntare...\n\n";
 cin >> puntata;
 cout <<"\n";
 soldi=soldi-puntata;
// non si puo puntare + di quello ke si ha
 if (soldi < 0)
{
  cout << "Non Puoi Puntare più di quello che hai!!! \n";
  system ("pause");
  return 0;
}
//calcolo numero
 cout << "Hai " << soldi <<"$\n\n";
 system ("pause");
 srand ( time ( NULL ) );
 risultato = ( ( rand ( ) % 9 ) + 1 );
 cout << "Risultato lancio simulato: "
     << risultato
     << "\n\n";
// Vinci  
if ( risultato > 5&&risultato <10 )
{
  int raddoppio=0;
  cout << "Bravo, hai vinto " << puntata+puntata <<"$\n";
  //scelta raddoppio
  cout << "Vuoi raddoppiare la tua vincita?\n"
  << "1 SI\n 2 NO\n";
  cin >> raddoppio;
  soldi=soldi+puntata+puntata;
  //raddoppio
  if (raddoppio==1)
  {
      int raddoppion=0;
      cout << "Raddoppio!!!\n\n";
      srand ( time ( NULL ) );
      raddoppion = ( ( rand ( ) % 4 ) + 1 );
      cout << "\n Il Numero per il raddoppio è: " << raddoppion << "\n\n";
// il raddoppio è riuscito
          if (raddoppion > 3 )
          {
             cout << "Hai fatto Raddoppiato!\n" << puntata*4 <<"$\n";
             soldi=soldi+(puntata*4);
             }
// ilraddoppio non è riuscito perdi la vincita              
          if (raddoppion < 3 )
          {
             cout << "Non hai raddoppioto, ha perso la vincita: " << puntata <<"$\n";
             soldi= soldi-puntata;
             }
// il raddoppio non è riuscita ma non perdi la vincita              
          if (raddoppion == 3 )
          {
             cout << "Non hai raddoppioto, ma non perdi la vincita: \n" << puntata <<"$\n";
             }              
      }  
}
// Fai Jeckpot
if (risultato == 10)
  {
      cout << "Hai fatto Jeckpot!\n" << puntata*1000 <<"$\n";
      soldi=soldi+(puntata*1000);
  }
// Perdi
if ( risultato < 6 )
{
  cout << "Mi Dispiace, hai perso " << puntata <<"$\n";
}
 cout << "Hai " << soldi <<"$\n";
 system ( "pause" );
 }
// Hai finito i soldi  
 cout << "\n\n \a\a\a\a\a\a\a\a\HAI PERSO !!!\n\n";
system ("pause");
 return 0;
}

dite ke vene pare...

Edited by IlGenioNero - 18/4/2006, 12:57
 
Top
26 replies since 5/1/2006, 16:22   2520 views
  Share