anoniem Geplaatst: 25 april 2009 Delen Geplaatst: 25 april 2009 Ik ben net nieuw in c++, en ik wil een array vullen met random 1 of nul. Het grootste deel van arrays heb ik nu onder de knie, maar de random functie van c++ snap ik na flink wat goeglen nog steeds niet :cry: Kan iemand mij helpen aan een bool functie die random true of false oplevert? (zie dit niet als een 'doe dit voor mij'-post, door mij hiermee te helpen denk ik dat ik weer een heel stuk extra c++ snap) Quote Link naar reactie
anoniem Geplaatst: 25 april 2009 Auteur Delen Geplaatst: 25 april 2009 Hier staat het volgens mij goed uitgelegd: [url]http://www.daniweb.com/forums/thread1769.html[/url] Als de code op bovenstaande site je duidelijk is, dan zou je in staat moeten zijn om een functie te maken die random true of false returnt. (Dat zou je dus op kunnen lossen door in de functie een random getal in het bereik 0 tot 1 te laten genereren, waarbij een waarde van 0 false returnt en een waarde van 1 true.) Quote Link naar reactie
anoniem Geplaatst: 26 april 2009 Auteur Delen Geplaatst: 26 april 2009 waarom levert dit eigenlijk altijd 0 op? [code:1:8e70594398] int main() { float b; for(int a = 1; a <=11; a++) { b = rand() / RAND_MAX; cout << b << endl; } return 0; }[/code:1:8e70594398] dit is de manier waarop ik het zelf bedacht had, voor een float tussen 0 en 1... Quote Link naar reactie
anoniem Geplaatst: 26 april 2009 Auteur Delen Geplaatst: 26 april 2009 Omdat de rand() functie een integer (int) oplevert, en RAND_MAX is ook een integer-constante. Als je een int door een int deelt, verlies je alles achter de komma omdat integers alleen volledige getallen zijn. RAND_MAX is (bijna) altijd groter dan wat rand() oplevert (tenzij rand() een keer precies RAND_MAX oplevert), dus zal die deling bijna altijd een getal kleiner dan 1 opleveren. Als je alles achter de komma weghakt, houd je dus altijd 0 over. De conversie naar float gebeurt pas NA de berekening. Quote Link naar reactie
anoniem Geplaatst: 26 april 2009 Auteur Delen Geplaatst: 26 april 2009 ah dit werkt: [code:1:65d26ed91c] b = (float)rand() / (float)RAND_MAX; [/code:1:65d26ed91c][/code] Quote Link naar reactie
anoniem Geplaatst: 26 april 2009 Auteur Delen Geplaatst: 26 april 2009 Dat klopt. In principe hoef je maar één van de twee getallen te casten naar een float, omdat een berekening met 1 float en 1 integer ook een float als resultaat heeft. dus [code:1:37ce60b6bf]b = (float)rand() / RAND_MAX;[/code:1:37ce60b6bf] en [code:1:37ce60b6bf]b = rand() / (float)RAND_MAX;[/code:1:37ce60b6bf] zouden beiden ook moeten werken. Quote Link naar reactie
Aanbevolen berichten
Om een reactie te plaatsen, moet je eerst inloggen