Jump to content
  • Advertisement
Sign in to follow this  
stringmyname

Total newbie

This topic is 3795 days old which is more than the 365 day threshold we allow for new replies. Please post a new topic.

If you intended to correct an error in the post then please contact us.

Recommended Posts

Hi, I have been learning C++ for 3 days now, so I am still very noob. I have started to work through a book by Michael Dawson, "Beginning C++ Game Programming". There is one bit of code I cant understand any help would be very welcome! So this is part of a word game where the program randomly picks a word and then rearranges it, for the user to figure out. This is the part where it rearranges the word it picked, wich i do not understand... :( please help! string jumble = theWord; //the word is the picked word int length = jumble.size(); //jumble is the rearranged version for (int i = 0; i < length; ++i) { int index1 = (rand() % length); int index2 = (rand() % length); char temp = jumble[index1]; jumble[index1] = jumble[index2]; jumble[index2] = temp; }

Share this post


Link to post
Share on other sites
Advertisement

make a copy of the word, call it 'jumble'
count the letters in 'jumble', call it 'length'
repeat the following 'length' times
{
get a random number from 0 to 'length', call it 'index1'
get a random number from 0 to 'length', call it 'index2'

swap the letter at position 'index1' in jumble with the letter at 'index2' in jumble
}




I'm guessing that the bit that confused you was the '%' sign?
"%" is the modulo operator. The % operator goes hand-in-hand with the / operator (division). It returns the remainder of the division of the left/right values.
e.g. 24 divided by 10 is equal to 2 and 4 remainder, or in code:
24 / 10 == 2
24 % 10 == 4


So back to your code, "rand() % length" gives us a random number from 0 to length, because "rand()" gives us a random number from 0 to [really big number], then you divide it by 'length' and find the remainder, which is guarenteed to always be bigger or equal to 0 and smaller than 'length'.


N.B. This is only true for integer math though (i.e. when you're using variables of type 'int' or similar). The % operator cannot be used for floating-point math.
e.g.
24.0f / 10.0f == 2.4f

To find the remainder of a floating-point division, you'd have to do it yourself:
float div = 24.0f / 10.0f;//2.4f
float mod = (div - int(div)) * 10.0f; //4.0f

Share this post


Link to post
Share on other sites
Sign in to follow this  

  • Advertisement
×

Important Information

By using GameDev.net, you agree to our community Guidelines, Terms of Use, and Privacy Policy.

We are the game development community.

Whether you are an indie, hobbyist, AAA developer, or just trying to learn, GameDev.net is the place for you to learn, share, and connect with the games industry. Learn more About Us or sign up!

Sign me up!