Degeim Skrevet 21. mars 2005 Del Skrevet 21. mars 2005 (endret) Hva er C++-koden for å lage et tilfeldig tall (rene tall) mindre enn x? Og hva er koden for tilfeldig tall (feks 45.6 eller 76.5, ikke rene tall) mellom x og y? Jeg kjenner til "rand()", mne den kan jo bare lage tilfeldige tall fra 0 til 32767, og det er ikke bra nok for meg. Endret 21. mars 2005 av Degeim Lenke til kommentar
Feynman Skrevet 23. mars 2005 Del Skrevet 23. mars 2005 [HJERTSUKK]Det er nok ikke C++-kunnskapen som har hull, men derimot mattekunnskapene.[/HJERTESUKK] tilfeldigTall0tilX = (rand() * X) / RAND_MAX // RAND_MAX definert som maksverdi. Evt. tilfeldigTall0tilX = rand() % (X+1) // Modulo-operasjon Resulatatet kan cast'es til float hvis du trenger desimaltall. Lenke til kommentar
hishadow Skrevet 23. mars 2005 Del Skrevet 23. mars 2005 (endret) Hva er C++-koden for å lage et tilfeldig tall (rene tall) mindre enn x? Og hva er koden for tilfeldig tall (feks 45.6 eller 76.5, ikke rene tall) mellom x og y? Jeg kjenner til "rand()", mne den kan jo bare lage tilfeldige tall fra 0 til 32767, og det er ikke bra nok for meg. HVA! Er ikke rand() bra nok for deg!?! Her er iallefall hva jeg pleier å gjøre. static const float RANDOM_MAX = 1.0f / (float)RAND_MAX; static const float RANDOM_MAX2 = 2.0f / (float)RAND_MAX; // Beregner et tilfeldig flyttall mellom 0.0 og 1.0. inline float random() { return (rand() * RANDOM_MAX); } // Beregner et tilfeldig flyttall mellom -1.0 og 1.0. inline float random2() { return ((rand() * RANDOM_MAX2) - 1.0f); } void test() { // Finn et tall mellom 0.0 og 295.8. float number1 = random() * 295.8f; // Finn et tall mellom -250.250 og 250.250. float number2 = random2() * 250.250f; } Endret 23. mars 2005 av hishadow Lenke til kommentar
Degeim Skrevet 23. mars 2005 Forfatter Del Skrevet 23. mars 2005 Til Feynman veil jeg gjerne si at mattekunnskapene mine er ok, og jeg har allerede tenkt ut koden dere har gitt meg, men jeg var ikke sikker på om det fantes noe enklere. Det største problemet jeg likevel hadde var at koden min alltid returnerte et heltal. Fordi jeg skrev "int" eller "float" foran variabelen der jeg definerte den. Hva jeg må skrive foran definisjonen er vel heller det jeg trenger å vite. Lenke til kommentar
hishadow Skrevet 23. mars 2005 Del Skrevet 23. mars 2005 Hva jeg må skrive foran definisjonen er vel heller det jeg trenger å vite. Ta å post koden din. Vanskelig å forstå helt fra forklaringen. Lenke til kommentar
Degeim Skrevet 23. mars 2005 Forfatter Del Skrevet 23. mars 2005 Her er den versjonen jeg har tilgjnegelig på denne pcen. Ikke bry dere med "verdi"-variabelen, og at det mangler den delen som gjør at tallet blir mellom x og y. int random (int min, int maks){ float verdi = (rand()/(RAND_MAX)); return verdi; } int main (){ srand(static_cast<unsigned>(time(0 ))); int windowsIdiotSikring = random(3,5); for(int i = 0;i<100;i++) cout<<random(0,100)<<endl; system("pause >nul"); return 0; } Det som er problemet her er at jeg bare får en flokk med nuller der det skulle vært desimaltall (rand()/RAND_MAX). Lenke til kommentar
hishadow Skrevet 23. mars 2005 Del Skrevet 23. mars 2005 (endret) Her er den versjonen jeg har tilgjnegelig på denne pcen. Ikke bry dere med "verdi"-variabelen, og at det mangler den delen som gjør at tallet blir mellom x og y. Det som er problemet her er at jeg bare får en flokk med nuller der det skulle vært desimaltall (rand()/RAND_MAX). Her har du feil: int random (int min, int maks) - funksjonen returnerer heltall, men inni funksjonen bruker du float. - rand()/RAND_MAX blir et flyttall (mellom 0.0 of 1.0) inni random funksjonen din og når denne returneres konverteres det til et heltall. Dette gjør at return verdien blir enten 0 eller 1. - du må bestemme deg for om du vil bruke flyttall eller heltall i random funksjonen din. Løsning 1 (heltall): int random(int min, int maks) { int differanse = maks - min; int verdi = rand() % differanse - min; return verdi; } Løsning 2 (flyttall): float random(float min, float maks) { float differanse = maks - min; int verdi = (rand() / (float)RAND_MAX) * differanse - min; return verdi; } Endret 23. mars 2005 av hishadow Lenke til kommentar
Degeim Skrevet 23. mars 2005 Forfatter Del Skrevet 23. mars 2005 ååååååååååååja Jeg la ikke merke til det! Takk! Lenke til kommentar
JBlack Skrevet 24. mars 2005 Del Skrevet 24. mars 2005 Og kanskje også kaste resultatet fra rand til float eller double også? Men bruk i stedet drand48() og dens venner. SYNOPSIS #include <stdlib.h> double drand48(void); double erand48(unsigned short xsubi[3]); long int lrand48(void); long int nrand48(unsigned short xsubi[3]); long int mrand48(void); long int jrand48(unsigned short xsubi[3]); void srand48(long int seedval); unsigned short *seed48(unsigned short seed16v[3]); void lcong48(unsigned short param[7]); Lenke til kommentar
hishadow Skrevet 24. mars 2005 Del Skrevet 24. mars 2005 (endret) Og kanskje også kaste resultatet fra rand til float eller double også? Men bruk i stedet drand48() og dens venner. Hvis en bruker Unix. Men hvis man er ute etter portabilitet, så kan den ikke brukes alt Endret 24. mars 2005 av hishadow Lenke til kommentar
Anbefalte innlegg
Opprett en konto eller logg inn for å kommentere
Du må være et medlem for å kunne skrive en kommentar
Opprett konto
Det er enkelt å melde seg inn for å starte en ny konto!
Start en kontoLogg inn
Har du allerede en konto? Logg inn her.
Logg inn nå