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