Som besökare på Hamsterpaj samtycker du till användandet av s.k. cookies för att förbättra din upplevelse hos oss. Jag förstår, ta bort denna ruta!
Annons

C++ rand() mellan två tal

Skapad av TheHacker, 2009-02-22 17:08 i Webbutveckling & Programmering

897
10 inlägg
-2 poäng
TheHacker
Visningsbild
P -1333 Hjälte 396 inlägg
-2
Jag undrar hur man gör i c++ så att den tar ett slumptal mellan två tal tex. ett tal mellan 10 - 20
Jag får det inte att funka har gjort så här:

srand(time(0));
tal1 = (rand()%h_tal)+l_tal;

h_tal är det högsta talet och l_tal det lägsta.

Ingen status

Är reklamen ivägen? Logga in eller registrera dig så försvinner den!

Dudier_than_Dude
Visningsbild
P 36 Hovås Hjälte 1 055 inlägg
0

Svar till TheHacker [Gå till post]:

srand ( time(NULL) );
tal1 = rand() % h_tal + l_tal;

tal1 blir då inom intervallet [l_tal - (h_tal+l_tal)].

Vet inte hur stor skillnad NULL istället för 0 gör vid seedinitieringen iochförsig. Kodar aldrig C++. :p Vad var det som blev fel med din ursprungliga kod då?

TheHacker
Visningsbild
P -1333 Hjälte 396 inlägg
Trådskapare
0

Svar till Dudier_than_Dude [Gå till post]:

Om vi säger att l_tal är 10 och h_tal är 20 så får jag ändå ut tal under 10.
Det borde funka men det gör inte det :S

Ingen status

Dudier_than_Dude
Visningsbild
P 36 Hovås Hjälte 1 055 inlägg
0

Svar till TheHacker [Gå till post]:
Hm, 'kay. Skumt.
Om l_tal är 10 och h_tal är 20 och du vill ha ett slumptal mellan 1-20, så borde du subtrahera h_tal med l_tal också, btw. Kan nog tyvärr inte vara till mycket hjälp dock, då jag som sagt inte är kunnig inom C++s standardbibliotek och syntax. Lycka till iallafall. :p

TheHacker
Visningsbild
P -1333 Hjälte 396 inlägg
Trådskapare
0

Svar till Dudier_than_Dude [Gå till post]:

Nej, asså jag vill ha slumptalet mellan 10 - 20...

Ingen status

Dudier_than_Dude
Visningsbild
P 36 Hovås Hjälte 1 055 inlägg
0

Svar till TheHacker [Gå till post]:
Menade 10-20* whoops.

Som jag fattat det, så är:
rand() % 10; // =0-9
rand() % 10 + 1; // =1-10
rand() % 10 + 10; // =10-20

Så om du vill att h_tal ska var 20, l_tal 10, och tal1 ett tal mellan dessa två så borde satsen se ut enligt:

tal1 = rand() % (h_tal-l_tal) + l_tal;
alternativt att du initierar h_tal efter l_tal typ som h_tal = n-l_tal;
Eller om du läser in h_tal och l_tal via input så bör du köra h_tal-=l_tal; efteråt.


TheHacker
Visningsbild
P -1333 Hjälte 396 inlägg
Trådskapare
0

Svar till Dudier_than_Dude [Gå till post]:
Jo, eller hur borde det va så men det funkar inte. :S
Du kan få se koden till hela programmet ifall felet ligger någon annanstans.
För felet är att när man kommer till level 2 så fortsätter den att slumpa tal mellan 1 -10 :S

Visa spoiler

#include <iostream>
#include <cstdlib>
#include <ctime>

using namespace std;

int main()
{
int ant_f = 0;
int ant_r = 0;
int tal1;
int tal2;
int summa;
int svar;
int level = 1;
int h_tal = 10;
int l_tal = 1;
while(level != 0)
{
srand(time(0));
tal1 = rand() % (h_tal-l_tal) + l_tal;
tal2 = rand() % (h_tal-l_tal) + l_tal;
summa = tal1+ + tal2;
cout << tal1 << " + " << tal2 << " = ";
cin >> svar;

if(svar == summa)
{
++ant_r;
cout << "R\x84tt!\n";

if (ant_r == 5 || ant_r == 10 || ant_r == 20 || ant_r == 30 || ant_r == 50 || ant_r ==100)
{
system("CLS");
++level;
cout << "Grattis du har g\x86tt upp till level: " << level << endl;
h_tal + 10;
l_tal + 10;
}

}
else
{
++ant_f;
cout << "Det var tyv\x84r fel, r\x84tt svar: " << summa << endl;
--level;
h_tal -10;
l_tal -10;
cout << "Du gick nu ner till level" << level;
}
}

cout << "Du svarade r\x84tt p\x86 " << ant_r << " fr\x86gor!\n";

cin.get();
cin.get();
return 0;
}



Ingen status

Dudier_than_Dude
Visningsbild
P 36 Hovås Hjälte 1 055 inlägg
0
Svar till TheHacker [Gå till post]:
Ah.. du gör bara en operation, och ingen tilldelning på:

h_tal + 10;
l_tal + 10;

som bör vara.

h_tal+=10;
l_tal+=10;

Och samma för h_tal-=10; etc.



Tillägg av Dudier_than_Dude 2009-02-22 19:42

Vet inte om h_tal+=10 är korrekt i C++ iochförsig, men h_tal=h_tal+10 iallafall.

TheHacker
Visningsbild
P -1333 Hjälte 396 inlägg
Trådskapare
0

Svar till Dudier_than_Dude [Gå till post]:

Amen ååhh var det så lätt :P Tack! :D

Ingen status

Dudier_than_Dude
Visningsbild
P 36 Hovås Hjälte 1 055 inlägg
0

Svar till TheHacker [Gå till post]:
Hehe, blir lätt så. Sjukt jobbigt att debugga kod med något slarvfel så smått och enkelt att man lätt överblickar det. :p Lycka till


Forum » Datorer & IT » Webbutveckling & Programmering » C++ rand() mellan två tal

Ansvariga ordningsvakter:

Användare som läser i den här tråden just nu

1 utloggad

Skriv ett nytt inlägg

Hej! Innan du skriver om ett potentiellt problem så vill vi påminna dig om att du faktiskt inte är ensam. Du är inte onormal och världen kommer inte att gå under, vi lovar! Så slappna av och gilla livet i några minuter - känns det fortfarande hemskt? Skriv gärna ner dina tankar och frågor, vi älskar att hjälpa just dig!

Den här tråden är äldre än Rojks drömtjej!

Det senaste inlägget i den här tråden skrevs för över tre månader sedan. Är du säker på att du vill återuppliva diskussionen? Har du något vettigt att tillföra eller passar din fråga i en ny tråd? Onödiga återupplivningar kommer att låsas så tänk efter en extra gång!

Hjälp

Det här är en hjälpruta

Här får du korta tips och förklaringar om forumet. Välj kapitel i rullningslisten här ovanför.

Rutan uppdateras automagiskt

När du använder funktioner i forumet så visas bra tips här.


Annons
Annons
Annons
Annons