Forum huvudsida -> Programmering -> Slumpfunktion i C++
Sidor: 1
Christhebalrog | 16:32 - 12:a Juli 2006 | Post #1 | |
Medlem Inlägg: 6 Skicka PM |
,,r det bara jag som har problem med slumpfunktionen i C++? har knaprat mig igenom C++-guiden på sidan, vilket har gått förhållandevis bra, då jag har grundläggande programmeringskunskaper i PHP. Men slumpfunktionen i C++ blir jag inte klok på, hur jag än gör... Min kod:
Grejen är att den alltid blir tre (maxvärde)... Jag vet inte varför, men koden verkar ju rätt? Skulle va schysst om någon förklarade varför funktionen är såpass avancerad (dvs. varför den ser ut som den gör)? Borde det inte finnas nåt snabbsätt att få upp ett slumpat tal på, eller måste man bygga den funktionen själv? ------------------------- Ingen signatur! |
Nissebosselasse | 18:43 - 12:a Juli 2006 | Post #2 | |
Medlem Inlägg: 490 Skicka PM |
Slumptalsfunktionen returnerar ett tal baserat på ett startvärde (ett s.k. frö) - om samma frö ges till slumptalsfunktionen varje gång, kommer samma serie "slumptal" att genereras. Genom att använda srand sätter du ett värde på detta frö. Men då måste man ju ha ett slumpmässigt valt frö också? Japp, men det brukar man fixa genom att använda klockan:
Anropa srand i början av ditt program (t.ex. precis i början av main). En enklare variant av att få slumptal, är att använda modulo (%, ger resten av en division):
------------------------- http://pushingcows.se Gula Nallen |
Christhebalrog | 03:34 - 14:e Juli 2006 | Post #3 | |
Medlem Inlägg: 6 Skicka PM |
Tar jag helt bort srand(time(0)) så funkar det ju också, och då slumpar den olika Varför är då den raden nödvändig? För mkt kod är väl nåt man skall akta sig för? ------------------------- Ingen signatur! |
Nissebosselasse | 13:13 - 14:e Juli 2006 | Post #4 | |
Medlem Inlägg: 490 Skicka PM |
Vad använder du för kompilator? Och för mycket kod behöver du inte oroa dig för; anropet till srand tar nog inte många mikrosekunder... Jag skrev följande program:
..och fick följande utskrift vid tre olika körningar: Testar rand... 1, 7, 14, 0, 9, 4, 18, 18, 2, 4, 5, 5, 1, 7, 1, Testar rand... 1, 7, 14, 0, 9, 4, 18, 18, 2, 4, 5, 5, 1, 7, 1, Testar rand... 1, 7, 14, 0, 9, 4, 18, 18, 2, 4, 5, 5, 1, 7, 1, Det vill säga, samma talserie. Jag kompilerade ändå om koden mellan varje körning. Du kan läsa mer om srand här: http://www.cplusplus.com/ref/cstdlib/srand.html och http://msdn2.microsoft.com/en-us/library/f0d4wb4t.aspx. Sedan förstår jag inte en grej; i första posten säger du att du får samma tal varje gång (talet tre), men i sista posten får du olika varje gång... Hur ska du ha det? Här är förresten en funktion du kan använda för att generera slumptal i ett givet intervall:
------------------------- http://pushingcows.se Gula Nallen |
Christhebalrog | 15:08 - 14:e Juli 2006 | Post #5 | |
Medlem Inlägg: 6 Skicka PM |
Se här:
Jag använder inte modulo för att få fram slumptalet, då jag läste guiden här, och där fanns det som jag skrev där... Anledningen till att jag sade att jag fick olika varje gång i andra posten, var för att jag tog bort raden srand(time(0)), och då slumpade den tal som jag ville, och då undrade jag varför den var nödvändig. Angående för mycket kod, så är väl det ganska generellt antaget att man skall ha minimalt med kod för maximal funktionalitet? ,,ven om det inte rör sig om så mycket? ------------------------- Ingen signatur! |
Nissebosselasse | 17:18 - 14:e Juli 2006 | Post #6 | |
Medlem Inlägg: 490 Skicka PM |
Man behöver inte använda modulo, jag skrev det bara för att det antagligen är snabbare om man vill ha ett intervall från 0 (noll) till det man delar med. Det där med att du får samma talserie när du använder srand låter både logiskt och ologiskt på samma gång; om man använder samma tal till srand (ex. srand (1);) så kommer samma talserie att genereras när man använder rand, men du använde ju time(0) som argument, och då borde det bli olika frö varje gång (såvida du inte kör programmet inom samma sekund, eftersom time(0) då ju returnerar samma värde - d.v.s., den aktuella sekunden). Kan du posta koden du använder här? Det där med minimal kod ==> maximal funktionalitet kan man tolka lite olika. Det är ändå kompilatorn som har sista ordet när den genererar maskinkoden, och du vet inte hur den kommer att optimera din C++-kod (såvida du inte skriver assemblerkoden själv inuti funktionerna). Att göra ett läsbart program (för människor) kan vara en bättre lösning många gånger, eftersom du/andra lättare och snabbare kan sätta sig in i vad som egentligen händer. ------------------------- http://pushingcows.se Gula Nallen |
Christhebalrog | 01:08 - 15:e Juli 2006 | Post #7 | |
Medlem Inlägg: 6 Skicka PM |
Hursomhelst så tackar jag för tipset. Du är förmodligen mer insatt i C++ än jag, då jag började för knappt en vecka sedan Här e koden:
------------------------- Ingen signatur! |
Sidor: 1
Forum huvudsida -> Programmering -> Slumpfunktion i C++
Du får inte posta i den här tråden | Till toppen
Datum
2025-01-02 16:43
Vecka: 01
Besökare
Inloggade: 0
Gäster: 605
Medlemmar
Medlemmar: 53576
Forum
Senaste inlägget: HAHA MÄNNISKAN LEVER ÄN (13:45 - 18:e Januari 2019, av Hetzz)
Wiki
Senaste ändringen:
3D (rev: 1, tid: 09:40 - 13:e November 2015)
Chatt
#blinkenlights @ Libera.Chat
Gratis shellkonton för IRC, webbsidor mm.