Forum huvudsida -> Programmering -> Vad gör jag för fel?
NetNinja | 17:36 - 14:e Februari 2007 | Post #51 | |
Medlem Inlägg: 116 ![]() Skicka PM |
Cpp_skater: Ja fast han använder inte modulus någonstans. Om man bytar ut allt så står det: värde=rand() / (RAND_MAX / 6) + 2; Vet inte riktigt vad RAND_MAX gör, men om jag skulle gissa så skulle jag tro att RAND_MAX är det absolut störta möjliga rand() värdet, och i sänna fall betyder det att det slumpade talet delas med en sjättedel av det absolut strörsta rand talet och sen adderas med 2. Så erhm om du skulle ta och använda double istället för int (vilket jag bara antar att du gör) så får du antagligen många decimaler. Andy_yngel: Antagligen så har du skrivit '{' varken i main eller i en funktion. Ta och kolla så att alla dina kråkfötter sitter där dom ska. -------------------------
Senast redigerad 17:54 - 14:e Februari 2007 |
Andy_yngel | 19:54 - 14:e Februari 2007 | Post #52 | |
Medlem Inlägg: 22 ![]() Skicka PM |
så skrv jag och det blir fel! ------------------------- Jag är nybörjare i c++ programmering! Senast redigerad 19:55 - 14:e Februari 2007 |
NetNinja | 20:21 - 14:e Februari 2007 | Post #53 | |
Medlem Inlägg: 116 ![]() Skicka PM |
du ska skriva:
-------------------------
Senast redigerad 20:22 - 14:e Februari 2007 |
Smygis | 20:22 - 14:e Februari 2007 | Post #54 | |
Medlem Inlägg: 90 ![]() Skicka PM |
Du saknar en måsvinge på slutet ----> } ------------------------- Ingen signatur! <- OMG! Jag har inte någon signatur! Ge mig en signatur FFS! |
Andy_yngel | 20:25 - 14:e Februari 2007 | Post #55 | |
Medlem Inlägg: 22 ![]() Skicka PM |
det funkade men vad gjorde jag för fel? ------------------------- Jag är nybörjare i c++ programmering! |
agge89 | 20:45 - 14:e Februari 2007 | Post #56 | |
Medlem Inlägg: 13 ![]() Skicka PM |
NetNinja: Det stämmer som du sa i slump=rand()/(RAND_MAX/6+1)+1; så är RAND_MAX det absolut största värdet och den sista +1 är det minsta. Den första +1 medelar att det ska slumpa mellan alla tal som går att delas med 1 intervallet 1 till 6. skulle man ha skrivit +2 i mitten så skulle bara 2, 4 och 6 slumpas (Jag är inte 100, men jag tror att det är så). Den slumpar bara heltal. Jag har fått denna funktion från independence nybörjarkurs. På mitt inlägg innan om slumptal så hade jag redan testat att använd slump=(rand()%6)+1; men det gav samma problem. Grejen är också att jag är nästan helt säker på att det är någon bug, som gör att den slumpar fel. Jag gjorde nämligen så att man såg vilka tal den slumpa mellan. Jag löste dock problemet (dock inte så snyggt, men tillfälligt tills jag kommer på vad problemet är) med att lägga in slump=(rand()%6)+1; i en while loop, så att loopen körde enda tills det blev ett värde i intervallet. ![]() ------------------------- Augustismen |
NetNinja | 21:22 - 14:e Februari 2007 | Post #57 | |
Medlem Inlägg: 116 ![]() Skicka PM |
Ganska mysko sätt att göra slumpade tal, känns mindre jobbigt att använda modulus. Independence kan du förklara lite djupare så man förstår? Fattar inte hur det funkar. -------------------------
|
Independence | 22:06 - 14:e Februari 2007 | Post #58 | |
Administratör Inlägg: 1800 ![]() Skicka PM |
Jag har för mig att rand() brukar generera värden mellan 0 och 1. Sedan multiplicerar man med det värdet man får här med det värdet man vill kunna få som max, fast minus ett. Sedan lägger man på ettan igen i slutet för att man vill ha mellan 1 och någonting och inte 0 och någonting. Dock koden inte alls göra något som är i närheten av det här. Jag ska undersöka lite närmare och återkomma ![]() ------------------------- Vi är riddarna som säger fiskbulle! |
ozamosi | 22:08 - 14:e Februari 2007 | Post #59 | |
Administratör Inlägg: 1129 ![]() Skicka PM |
Vissa rand() genererar floats mellan 0 och 1 - C genererar integers mellan 0 och RAND_MAX. Tror det hela härstammar från någon sida du lyckades googla fram i högstadiet ![]() ------------------------- Ljusblå |
Independence | 22:12 - 14:e Februari 2007 | Post #60 | |
Administratör Inlägg: 1800 ![]() Skicka PM |
Mjo, men det förklarar inte varför den mittersta ettan är där. Jag tror helt ärligt att den inte ska vara där egentligen. Eller att den kompenserar för någonting som ändå inte spelar någon roll (ett är väldigt litet jämfört med RAND_MAX). ------------------------- Vi är riddarna som säger fiskbulle! |
Lajnold | 22:14 - 14:e Februari 2007 | Post #61 | |
Medlem Inlägg: 65 ![]() Skicka PM |
Har du råkat placera ett semikolon efter int main()? Visa kod annars. Ha som regel att visa den fallerande koden i samband med frågan. ------------------------- Ingen signatur! |
Independence | 22:17 - 14:e Februari 2007 | Post #62 | |
Administratör Inlägg: 1800 ![]() Skicka PM |
Tror jag är mer begriplig kod, den kan dock eventuellt innehålla ett fel som är i storleksordning 1*10^(-10) (på min dator). Ingen större fara med andra ord. Sammanfattningsvis tar man iaf rand() som genererar ett värde mellan 0 och RAND_MAX. Man delar sedan det värdet på kvoten av RAND_MAX och det maxvärde, minus ett, man vill få fram. Detta ger då att rand()/(RAND_MAX/max_val) genererar ett värde mellan 0 och sitt max-värde-1. Sedan lägger man på ettan och får ett värde mellan 1 och sitt maxvärde. Denna kod bör alltså generera värden mellan 1 och 7. Det är så jag uppfattar det hela iaf ![]() ------------------------- Vi är riddarna som säger fiskbulle! Senast redigerad 22:21 - 14:e Februari 2007 |
NetNinja | 22:23 - 14:e Februari 2007 | Post #63 | |
Medlem Inlägg: 116 ![]() Skicka PM |
Ska testa och skriva ut en massa tal jag fått av rand(): 21441, 23142, 17944, 4432, 7477, 10124, 23139, 30838, 13798, 17487. verkar som om rand har en tendens att ligger runt 20 000 och nästan alltid är under 30 000. EDIT: Känns simplare att använda modulus... -------------------------
Senast redigerad 22:27 - 14:e Februari 2007 |
Independence | 22:24 - 14:e Februari 2007 | Post #64 | |
Administratör Inlägg: 1800 ![]() Skicka PM |
Det som stod i koden kan ju eventuellt varit ett försök att kompensera för att det blir maxvärdet minus ett iofs:
Som ska ge värden mellan 1 och 7. Nu ser man lite tydligare var maxvärdet kommer in liksom. Dock en förvirrande extra etta ![]() ------------------------- Vi är riddarna som säger fiskbulle! |
agge89 | 14:31 - 15:e Februari 2007 | Post #65 | |
Medlem Inlägg: 13 ![]() Skicka PM |
void battletext(string ename, int ehp, int currenthp, int potion); void battletext(string ename, int ehp, int currenthp, int potion) { cout << \"you fight an \"<<ename <<\"\\n\"<<\"enemy HP: \"<<ehp; cout<<\"\\n\"<<\"--------------------\\n\"<<\"your HP: \"<<currenthp<<\"\\n\"; cout<<\"your potions: \"<<potion<<\"\\n\"; cout<<\"--------------------\\n\"<<\"command:\\n\"; cout<<\"kick[K] pounsh[P] throw a rock[T]\\n\"; cout<<\"restore HP with a potion[R]\\n\"; cout<<\"choose: \"; return; } Hej, den här funktionen ska jag anropa i en annan funktion (inte main). Men när jag försöker kompilera så säger kompilatorn: 28 C:\\Dev-Cpp\\crazy tunnel.cpp too few arguments to function `void battletext(std::string, int, int, int)\' 197 C:\\Dev-Cpp\\krazy tunnel.cpp at this point in file vet någon vad det kan vara för fel?, är det så att man inte kan anropa funktioner i andra funktioner? ------------------------- Augustismen |
Nissebosselasse | 14:34 - 15:e Februari 2007 | Post #66 | |
Medlem Inlägg: 490 ![]() Skicka PM |
Har du läst felet? "Too few arguments to function ...", översätt det: för få argument till funktionen! Ett argument (även kallat parameter) är ett värde du skickar med till funktionen när du anropar den. Din funktion battletext tar alltså fyra argument. Hur ser anropet ut? ------------------------- http://pushingcows.se Gula Nallen |
madah | 20:42 - 15:e Februari 2007 | Post #67 | |
Medlem Inlägg: 28 ![]() Skicka PM |
Citat av Independence:
Tror jag är mer begriplig kod, den kan dock eventuellt innehålla ett fel som är i storleksordning 1*10^(-10) (på min dator). Ingen större fara med andra ord. Sammanfattningsvis tar man iaf rand() som genererar ett värde mellan 0 och RAND_MAX. Man delar sedan det värdet på kvoten av RAND_MAX och det maxvärde, minus ett, man vill få fram. Detta ger då att rand()/(RAND_MAX/max_val) genererar ett värde mellan 0 och sitt max-värde-1. Sedan lägger man på ettan och får ett värde mellan 1 och sitt maxvärde. Denna kod bör alltså generera värden mellan 1 och 7. Det är så jag uppfattar det hela iaf ![]() Det kommer ju från din artikelserie (men här används iSlumptal = rand() / (RAND_MAX / 6 + 1) + 1): http://www.blinkenlights.se/articles/cplusplusnyborjarguide/part19/ Annars är ju det vanligaste att man vid tutorials som beskriver slumptal använder modulus. Ditt exempel med division har ju förbryllat ett antal personer, kanske läge att ändra även denna artikeln ![]() |
Independence | 21:01 - 15:e Februari 2007 | Post #68 | |
Administratör Inlägg: 1800 ![]() Skicka PM |
Jepp, jag ändrade i den delen nu. Stod förövrigt en hel del annan knas där så det var nog bra att jag gjorde en ändring ![]() ------------------------- Vi är riddarna som säger fiskbulle! |
agge89 | 02:19 - 4:e April 2007 | Post #69 | |
Medlem Inlägg: 13 ![]() Skicka PM |
Hej, undrar bara hur man tömmer buffringen (om jag uttryckte mig rätt). Det är så att jag ancänder getch() för att mata in värden, men innan jag matar in dem så visas en text i några sekunder. När texten försvunnit så ska man mata in värden. Grejen är bara det att om man kan mata in dem värdern innan texten försvinner. När den sedan gör det så är dessa värden redan inmatade. Vad ska man göra så att man måste vänta på att texten försvinner? ------------------------- Augustismen |
Forum huvudsida -> Programmering -> Vad gör jag för fel?
Du får inte posta i den här tråden | Till toppen
Datum
2025-03-16 07:32
Vecka: 11
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.