Nybörjar Hjälp i C++ [Slumpa fram ASCII-kod]

Permalänk
Medlem

Nybörjar Hjälp i C++ [Slumpa fram ASCII-kod]

Hej, en nybörjarprogrammerare här. Jag håller på att göra en kortlek och har ett problem, jag vet inte hur jag ska slumpa fram ASCII koden för hjärter (ASCII=3), ruter(ASCII=4), klöver(ASCII=5) och spader(ASCII=6) till de kort jag gjort. Jag vill gärna göra det så simpelt som möjligt eftersom jag är en riktig nybörjare.

Tack på förhand
/Jonas

Visa signatur

MOBO: MSI Z97I-AC, CPU: Intel i7 4770k, RAM: Crucial BallistiX 2X8GB, GPU: Gigabyte R9 390 G1, PSU: EVGA supernova GS 650W, Chassi: Fractal Node 304, OS: Windows 10

Permalänk
Medlem

För att få ett 'random' tal använder du först srand(time(0)) i början av programmet, du kan sedan använda dig utan rand() % 3 för att randomisera fram ett tal mellan 0 och 3. Behöver lägga till #include <stdlib.h> och #include <time.h>

Permalänk
Medlem
Skrivet av Pether:

För att få ett 'random' tal använder du först srand(time(0)) i början av programmet, du kan sedan använda dig utan rand() % 3 för att randomisera fram ett tal mellan 0 och 3. Behöver lägga till #include <stdlib.h> och #include <time.h>

Hur gör jag då om jag vill slumpa mellan 4 olika ASCII koder (dvs klöver, hjärter, spader och ruter)?

Visa signatur

MOBO: MSI Z97I-AC, CPU: Intel i7 4770k, RAM: Crucial BallistiX 2X8GB, GPU: Gigabyte R9 390 G1, PSU: EVGA supernova GS 650W, Chassi: Fractal Node 304, OS: Windows 10

Permalänk
Medlem
Skrivet av Jontebert:

Hur gör jag då om jag vill slumpa mellan 4 olika ASCII koder (dvs klöver, hjärter, spader och ruter)?

Aaaah jag slumpar fram ett tal och stoppar talet = en ascii kod!! tack så mycket!

Visa signatur

MOBO: MSI Z97I-AC, CPU: Intel i7 4770k, RAM: Crucial BallistiX 2X8GB, GPU: Gigabyte R9 390 G1, PSU: EVGA supernova GS 650W, Chassi: Fractal Node 304, OS: Windows 10

Permalänk
Medlem

Om du vill lära dig C++ (till skillnad från C) så finns <random> istället.
Använder man modulo något litet tal, som rand() % 3, så kommer distributionen skeva (inte lika stor chans att få samma värde).

Generatorerna och distributionerna i <random> borde fungera bättre.

Visa signatur

.<

Permalänk
Datavetare

Helt rätt att rent generellt så kan distributionen av tal något skev om man använder rand() % N. Om det är 4 olika värden man vill få fram så är det rand() % 4 man ska använda (som ger 0, 1, 2 eller 3) och just det specifika fallet har en korrekt distribution då 4 råkar vara en jämn multipel av RAND_MAX (största tal som rand() kan returnera).

I de lägen modulo inte ger en perfekt distribution (nämnaren är inte jämn multipel av RAND_MAX) så blir normalt sett mindre ju mindre tal man delar med, så rand() % 3 har ett väldigt litet fel.

Ditt specifika problem kan lösas med denna (ganska horribla då den har "magiska" tal) kod

int suite = 3 + rand() % 4;

Visa signatur

Care About Your Craft: Why spend your life developing software unless you care about doing it well? - The Pragmatic Programmer