E' possibile utilizzare la funzione random inserendo dei valori più probabili di altri? A me serve una funzione che assegni al vettore valori 1 e 0; come faccio a dire di assegnare a questi un numero maggiore di 0 rispetto agli 1?
E' possibile utilizzare la funzione random inserendo dei valori più probabili di altri? A me serve una funzione che assegni al vettore valori 1 e 0; come faccio a dire di assegnare a questi un numero maggiore di 0 rispetto agli 1?
Fermo restando che si parla di numeri pseudocasuali, non esiste un metodo standard per fare ciò che chiedi ma puoi crearti una tua *logica*: supponiamo per esempio che il numero 0 debba uscire 4 volte su 5, cerchi un numero random da 1 a 5 e, in caso di uscita di 1,2,3,4 consideri l'uscita di 0, altrimenti di 1.
Questo non significa necessariamente che, su n uscite, 4/5 siano rappresentate da 0 e 1/5 da 1 ma è comunque un buon punto da cui partire.
Ciao![]()
[/quote]A me serve una funzione che assegni al vettore valori 1 e 0[/quote]
Per generare solo 0 o 1
vedi grassetto. In questo caso % 2 vuol dire che genera numeri casuali in un rango compreso da 0 a 1.codice:#include <time.h> #include <stdio.h> #include <stdlib.h> int main(void) { srand(time(NULL)); int i; for(i = 0; i < 100; i++) printf("%d\n", rand() % 2); return 0; }
Per maggiori chiarimenti vedi qui.
Devi implementare una funzione..come faccio a dire di assegnare a questi un numero maggiore di 0 rispetto agli 1
![]()
Stabilisci che percentuale di 0 e di 1 vuoi. Diciamo che vuoi il 40% di zeri e (di conseguenza) il 60% di uni.
Dato che la rand() restituisce una distribuzione teoricamente omogenea di valori tra 0 e MAX_RAND, ti basterà considerare il risultato dell'estrazione come 0 se rand() ti restituisce un valore compreso tra 0 e MAX_RAND/10*4 e 1 altrimenti.
Oppure, per maggiore chiarezza, puoi fare
ottenendo così un numero compreso tra 0 e 1; se esso è minore di 0.4, allora consideri uno 0, altrimenti un 1.codice:double r=rand()/(double)MAX_RAND;
Amaro C++, il gusto pieno dell'undefined behavior.
Per esempio se vuoi avere piu' probabilita' di avere un 1 fai:
In questo caso c'è il 1/8 di posibilità che esca 1.codice:x=rand()%2*rand()%2*rand%2;
Oppure se vuoi piu' 0 fai:
Poi ci sarebbero altre mille varianti.codice:x=rand()%2+rand()%2+rand%2; if(x>=1) x=1;
Grazie mille a tutti per avermi fatto capire il meccanismo... penso che seguirò quello che ha detto MdE2005...
Consiglio: per ottenere un numero compreso tra 1 e 5 non usare il metodo dell'operatore modulo, otterresti numeri non troppo casuali (le cifre più basse dei numeri forniti da rand() sono le meno casuali). Dai una letta a questa mia risposta per avere una panoramica dell'uso corretto di rand().
Amaro C++, il gusto pieno dell'undefined behavior.
Sicuramente, l'algoritmo da utilizzare è proprio quello:Originariamente inviato da MItaly
Consiglio: per ottenere un numero compreso tra 1 e 5 non usare il metodo dell'operatore modulo, otterresti numeri non troppo casuali (le cifre più basse dei numeri forniti da rand() sono le meno casuali). Dai una letta a questa mia risposta per avere una panoramica dell'uso corretto di rand().
codice:int GetRandomInt(int Min, int Max) { return (rand()%(Max-Min+1))+Min; } //e ovviamente si usa così: int main (){ int ret; ret = GetRandomInt(1,5) if (ret<=4)//... else //.... }
Ciao![]()
Ho scritto precisamente di non usarlo se servono dati piuttosto random, perché l'operatore modulo tiene in considerazione le cifre meno casuali del numero generato.Originariamente inviato da MdE2005
Sicuramente, l'algoritmo da utilizzare è proprio quello:![]()
Amaro C++, il gusto pieno dell'undefined behavior.
Ho sbagliato il copia-incolla, la versione giusta era quella sotto..![]()
La sera non connetto..
Ciao![]()