Slumpartade tal och variabler i C

Permalänk
Medlem

Slumpartade tal och variabler i C

Tja

Tänkte om man kunde få lite hjälp här. Jag ska göra ett program där användaren ska mata in hur många kulor han vill ta ur en påse. I påsen finns det kulor i olika färger som innehar olika siffror. Programmet ska visa möjligheterna på vilka färger och siffror jag kan få på kulorna jag tar ur påsen.

Jag har kommit så långt att jag kan välja till exempel 5 kulor och även få 5 slumpartade tal. Men jag kommer inte längre när jag ska få det att komma ut olika färger på kulorna. Någon som kan hjälpa lite på traven?
Tacksam för all hjälp jag kan få!

Permalänk
Medlem

Gör samma sak som med talen fast översätt en siffra till ett tal. T.ex. 1 = röd, 2 = blå, 3 = grön osv.

Permalänk
Medlem
Skrivet av jonke:

Gör samma sak som med talen fast översätt en siffra till ett tal. T.ex. 1 = röd, 2 = blå, 3 = grön osv.

Såhär ser min sats ut:

for(i=1; i<=tal; i++)
{
printf (" \n %d ", rand()%10+1);
if (i==1)
printf ("Grön ", rand()%10+1);
}

Men jag lyckas ändå inte få rätt deklaration gissar jag på...

Permalänk
Medlem
Skrivet av AleJo:

Såhär ser min sats ut:

for(i=1; i<=tal; i++)
{
printf (" \n %d ", rand()%10+1);
if (i==1)
printf ("Grön ", rand()%10+1);
}

Men jag lyckas ändå inte få rätt deklaration gissar jag på...

Har jag rätt om jag antar att siffran ett ska representera färgen grön? Som din loop ser ut nu räknar variabeln i från 1 till tal, och i första iterationen skrivs "grön" ut, eftersom i är 1 då. Din kod har ingen kontroll om ditt slumptal ("kulan") är 1, utan kontrollerar bara om loopen är i sin första iteration.

Du borde deklarera en ny variabel som du tilldelar "rand()%10 + 1", och sedan använda den i if-satsen. (samt i utskriften)

Visa signatur
Permalänk
Medlem

Under förutsättningen att påsen har begränsat antal kulor låt säga k st vita kulor samt n st svarta kulor så kan du gå tillväga enligt följande:
Initiera din "påse" genom att skapa en array av tal med storleken n+k
Sätt n st av elementen till 1 (för att indikera svart kula) t.ex. de n första elementen, resterande värden sett du till 0 (för att indikera vit kula).
När du nu drar slumptal så väljer du att skala så att du drar heltal mellan 0 och n+k-1, detta slumptal använder du för att kolla i din array om det är en etta eller nolla, om så är fallet så noterar du svart eller vit kula samt sätter värdet i arrayen till -1 eller något annat. Om värdet i arrayen är -1 så indikerar det att denna boll redan tagits, slumpa därför fram ett nytt tal och upprepa proceduren tills det inte blir -1

Kanske lite luddigt förklarat, men om du tänker igenom det själv så tror jag att du hänger med.

Ett annat alternativ är att efter initieringen av arrayen så blandar du den genom att välja två index på måfå och byt plats på elementen, gör så några hundra gånger och dra sedan de 5(eller hur många kulor du nu skulle dra) i följd.

Detta kan du utvidga till hur många färger du vill på kulorna.

Visa signatur

weeeee

Permalänk
Medlem

Motsvarar varje färg en siffra, eller har varje kula en färg och en siffra som båda väljs slumpmässigt?

Om varje färg motsvarar en siffra, skulle du kunna göra t.ex. en array med pekare till strängar där varje index i arrayen motsvarar en viss färg.

#include <stdio.h> #include <stdlib.h> #include <time.h> #define NUM_COLORS 3 /* Använd enumen för att koppla array-index mot faktisk färg */ enum COLORS { GREEN = 0, RED = 1, BLUE = 2 }; int main(void) { char const * const colors[NUM_COLORS] = { "Grön", "Röd", "Blå" }; int i; int num; /* Utan detta blir det samma "slumpade" tal varje gång programmet körs */ srand(time(NULL)); for(i = 0; i < 10; ++i) { num = rand() % NUM_COLORS; printf("Tal: %d = %s\n", num, colors[num]); } num = rand() % NUM_COLORS; if(num == GREEN) { printf("Du fick grönt!\n"); } return 0; }