Generare numeri casuali...da neofita

di il
9 risposte

Generare numeri casuali...da neofita

Salve a tutti,
è da qualche giorno che mi sono messo a "smanettare" con il C++; al momento uso DEV-C++5.11; come esercizio mi sono messo a creare una funzione,ispirata al gioco del LOTTO, che genera un numero casuale da 1 a 90 e nel caso, se non già presente nell'array, me lo salva nella posizione.
Ho notato che i 5 numeri generati sono sempre gli stessi!?...cosa sbaglio? Ho provato a rifare lo stesso programma (come concetto) su l'IDE di Ardxxno e tutto funziona (lo so che non è proprio la stessa cosa del C++). allego il progetto.
#include<iostream>
#include<algorithm>
using namespace std;



int main(){
	
int cinquina[5] = {0,0,0,0,0};
int estratto=0;
int c5=0;
int tries=0;	

do{
	estratto = 1 + rand()%90;
	if(estratto!=cinquina[0] && estratto!=cinquina[1] && estratto!=cinquina[2] && estratto!=cinquina[3] && estratto!=cinquina[4]){
		tries++;
		cinquina[c5]=estratto;
		c5++;
	}
	
    else {
    	tries++;
	}
} while (c5!=5);

if(c5==5){
	for(int i=0; i<=4; i++){
		cout<<cinquina[i]<<endl;
	}
}
cout<<tries<<endl;
	return 0;
}
grazie a tutti.

9 Risposte

  • Re: Generare numeri casuali...da neofita

    Ciao, quando usi la funzione rand() ti genera un solo numero che, in un ciclo, viene quindi ripetuto più volte. Se utilizzi, assieme alla funzione rand(), la funzione srand(time(NULL)) fai in modo che il numero generato ad ogni ciclo sia diverso. Il frammento di codice che ci interessa diventerebbe così:
    
    do{
    	srand(time(NULL));
    	estratto = 1 + rand()%90;
       if(estratto!=cinquina[0] && estratto!=cinquina[1] && estratto!=cinquina[2] && estratto!=cinquina[3] && estratto!=cinquina[4]){
          	tries++;
    
  • Re: Generare numeri casuali...da neofita

    @JosAm93, la funzione srand serve per inizializzare il generatore, NON si inizializza ogni volta, ma SOLO UNA VOLTA prima di iniziare ad usare la funzione rand.

    Inoltre, la lunghezza del ciclo e' di circa 2.000.000.000 di numeri!
    Certo che si ripete, ma dopo giorni di esecuzione 24/24!

    Invece la sequenza di numeri dipende dal valore usato con srand.
  • Re: Generare numeri casuali...da neofita

    Intanto grazie per le risposte,
    ok...giusto per fare la cronistoria di quello che ho fatto dopo le vostre risposte: ho inserito srand(time(NULL)) come descritto da JosAm93 e mi dava errore perchè time non era dichiarato ...quindi ho inserito la libreria time.h (non capisco perchè per questa è necessario specificare .h....) ed ho visto che si mi generavano numeri casuali ma in un tempo esecuzione altissimo 3-4 secondi evidenziando qualche milione di tentativi...quindi seguendo le indicazioni di migliorabile ho spostato srand(time(NULL)) fuori dal ciclo do (prima) e adesso funziona.
    Immaginavo che la "generazione casuale" fosse legata al time e se non ho capito male srand(time(NULL)) lo azzera ad ogni inizio funzione main partendo con riferimento diverso ogni volta...giusto?
  • Re: Generare numeri casuali...da neofita

    Probabilmente, in seguito ai suggerimenti che ottieni, prima di applicarli senza comprenderli appieno, dovresti cercare la documentazione, leggerla e studiarla. Perderesti meno tempo e sarebbe tutto molto più utile per te...

    P.S. time.h è un file include, non una libreria ...
  • Re: Generare numeri casuali...da neofita

    @oregon: hai ragione; lo sto facendo ma ...sono fatto così portate pazienza...non riesco a d attendere la fine del libro prima di, in questo caso, scrivere qualche cosa...libro è una parola grossa visto che mi sto documentando in rete.
    Subito dopo aver scritto il mio ultimo post ho cercato del perchè ".h"...trovando la risposta.
    Ultima domanda, per il momento, che libro suggerite?...diciamo che non ho grosse difficoltà con l'inglese...ma se fosse in italiano meglio.
    ho fatto una ricerca ed ovviamente ne ho trovati diversi...
    grazie
  • Re: Generare numeri casuali...da neofita

    E cambia IDE, vai di Code::Blocks che migliori tantissimo
  • Re: Generare numeri casuali...da neofita

    @ramcrack: ...in cosa è migliore, o in cosa si differisce, secondo te, Code::Blocks da DEV? La domanda prendila come una "vera domanda" in quanto, praticamente, non conosco ne l'uno ne l'altro.
    grazie
  • Re: Generare numeri casuali...da neofita

    E' come chiedere perche' una Rolls Royce e' meglio di una Zastava.

    Prova!

    Ci sono n-mila dettagli!
  • Re: Generare numeri casuali...da neofita

    migliorabile ha scritto:


    @JosAm93, la funzione srand serve per inizializzare il generatore, NON si inizializza ogni volta, ma SOLO UNA VOLTA prima di iniziare ad usare la funzione rand.

    Inoltre, la lunghezza del ciclo e' di circa 2.000.000.000 di numeri!
    Certo che si ripete, ma dopo giorni di esecuzione 24/24!

    Invece la sequenza di numeri dipende dal valore usato con srand.
    Grazie per la spiegazione, avendo usato quella funzione raramente non sapevo questo dettaglio.
Devi accedere o registrarti per scrivere nel forum
9 risposte