|
|||||||
|
|
|
![]() |
|
|
Strumenti |
|
|
#1 |
|
Member
Iscritto dal: Sep 2010
Messaggi: 153
|
problema generazione numeri casuali C++
LINK PROGRAMMA
ho creato un programma che deve generare 100 numeri casuali in due modi: 1. numeri casuali tutti diversi 2. numeri casuali con la possibilità di trovare alcuni uguali una volta generati deve salvarli in un file nella stessa directory del programma. se effettuo la seconda scelta mi crea il file ma trovo tutti i numeri generati uguali. Come mai ?? 1. la prima scelta non funziona in quanto essendo che genera tutti i i numeri uguali mi fa andare in loop l'algoritmo. |
|
|
|
|
|
#2 |
|
Senior Member
Iscritto dal: Oct 2005
Messaggi: 3306
|
srand dovresti chiamarlo 1 volta sola.
Dato che time ha la precisione di 1 secondo ci sta che richiami generaNumeri e che il seed sia sempre lo stesso, per questo ottieni sempre gli stessi numeri |
|
|
|
|
|
#3 |
|
Member
Iscritto dal: Sep 2010
Messaggi: 153
|
in pratica cosa devo spostare al codice ?
|
|
|
|
|
|
#4 |
|
Member
Iscritto dal: Sep 2010
Messaggi: 153
|
ecco il codice
#include<iostream>
#include<cstdlib> #include<fstream> #include<ctime> using namespace std; const int N=100; void stampaSuFile(int numeri[N]); bool schermoScelta(); void caricaNumeri(int numeri[N], bool diversi); int generaNumeri(); int main(){ int numeri[N]; bool diversi=schermoScelta(); caricaNumeri(numeri, diversi); stampaSuFile(numeri); } bool schermoScelta(){ int scelta; cout<<"Questo programma genera numeri casuali "<<endl; cout<<"--------------------------------------------"<<endl; cout<<"1. numeri casuali diversi"<<endl; cout<<"2. numeri casuali con la possibilita' di trovarne alcuni uguali"<<endl; cin>>scelta; if (scelta==1) return true; if (scelta==2) return false; } void caricaNumeri(int numeri[N], bool diversi){ if (diversi==false){ for (int i=0; i<N; i++) { numeri[i]=generaNumeri(); } }else{ for (int i=0; i<N; i++){ ripeti: numeri[i]=generaNumeri(); for (int j=i-1; j>=0; j--){ if (numeri[i] == numeri[j]){ goto ripeti; } } } } } int generaNumeri(){ srand(time(NULL)); int numero=rand()%100+1; return numero; } void stampaSuFile(int numeri[N]){ string nome = "numeri_casuali.txt"; ofstream flusso(nome.c_str()); for (int i=0; i<N; i++){ flusso << numeri[i] << endl; } flusso.close(); } |
|
|
|
|
|
#5 |
|
Senior Member
Iscritto dal: Jan 2012
Messaggi: 1267
|
Se usi Visual Studio 2012, o GCC 4.8, cmq un compilatore che supporti il nuovo standard C++11:
Codice:
#include <random>
using namespace std;
int my_rand()
{
int lowerBoundInclusive = 1;
int upperBoundInclusive = 6;
random_device rd; // Genera numeri casuali
mt19937 engine{ rd() }; // Motore di generazione di numeri casuali da passare ad una uniform_int_distribution
uniform_int_distribution<int> uid{ lowerBoundInclusive, upperBoundInclusive }; // Costruisco una uniform_int_distribution che restituisca numeri nel range indicato
int randomNumber = uid(engine); // Chiama l'operatore() della uniform_int_distribution, passandogli il motore
return randomNumber;
}
|
|
|
|
|
|
#6 |
|
Junior Member
Iscritto dal: Sep 2013
Messaggi: 24
|
|
|
|
|
|
| Strumenti | |
|
|
Tutti gli orari sono GMT +1. Ora sono le: 08:09.



















