Forum: Vad gör jag för fel?

Forum huvudsida -> Programmering -> Vad gör jag för fel?

Sidor: 1 2 3

Till botten

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
  1. [/SOURCE]
  2. #include <iostream>
  3.  
  4. int main();
  5.  
  6. {
  7. using namespace std;
  8.  
  9. cout << "Hej!";
  10.  
  11. return 0;
  12. [SOURCE=cpp]



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:
  1. #include <iostream>
  2. using namespace std;
  3.  
  4. int main()
  5. {
  6. cout<<"Hej!";
  7. return 0;
  8. }


-------------------------



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.
Smiley

-------------------------
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 Smiley

-------------------------

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 Smiley

-------------------------
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
  1. slumptal = rand() / (RAND_MAX / 6) + 1;


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 Smiley

-------------------------

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:

  1.  
  2. slumptal = rand() / (RAND_MAX / (7 - 1)) + 1;


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 Smiley

-------------------------

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:
  1. slumptal = rand() / (RAND_MAX / 6) + 1;


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 Smiley


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 Smiley




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 Smiley

-------------------------

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



Sidor: 1 2 3

Forum huvudsida -> Programmering -> Vad gör jag för fel?
Atom feed

Du får inte posta i den här tråden | Till toppen