Tek-Tips is the largest IT community on the Internet today!

Members share and learn making Tek-Tips Forums the best source of peer-reviewed technical information on the Internet!

  • Congratulations Rhinorhino on being selected by the Tek-Tips community for having the most helpful posts in the forums last week. Way to Go!

indefinite postponement

Status
Not open for further replies.

snowedin

Technical User
Joined
Mar 18, 2004
Messages
2
Location
US
What is it? I need to modify a card shuffling program to make it more efficient that uses indefinite postponement. I need to make the program to avoid indefinite postponement! I am not sure of what to take out?

#include <iostream>

using std::cout;
using std::left;
using std::right;

#include <iomanip>

using std::setw;

#include <cstdlib> // prototypes for rand and srand
#include <ctime> // prototype for time

// prototypes
void shuffle( int [][ 13 ] );
void deal( const int [][ 13 ], const char *[], const char *[] );

int main()
{
// initialize suit array
const char *suit[ 4 ] =
{ "Hearts", "Diamonds", "Clubs", "Spades" };

// initialize face array
const char *face[ 13 ] =
{ "Ace", "Deuce", "Three", "Four",
"Five", "Six", "Seven", "Eight",
"Nine", "Ten", "Jack", "Queen", "King" };

// initialize deck array
int deck[ 4 ][ 13 ] = { 0 };

srand( time( 0 ) ); // seed random number generator

shuffle( deck );
deal( deck, face, suit );

return 0; // indicates successful termination

} // end main

// shuffle cards in deck
void shuffle( int wDeck[][ 13 ] )
{
int row;
int column;

// for each of the 52 cards, choose slot of deck randomly
for ( int card = 1; card <= 52; card++ ) {

// choose new random location until unoccupied slot found
do {
row = rand() % 4;
column = rand() % 13;
} while( wDeck[ row ][ column ] != 0 ); // end do/while

// place card number in chosen slot of deck
wDeck[ row ][ column ] = card;

} // end for

} // end function shuffle

// deal cards in deck
void deal( const int wDeck[][ 13 ], const char *wFace[],
const char *wSuit[] )
{
// for each of the 52 cards
for ( int card = 1; card <= 52; card++ )

// loop through rows of wDeck
for ( int row = 0; row <= 3; row++ )

// loop through columns of wDeck for current row
for ( int column = 0; column <= 12; column++ )

// if slot contains current card, display card
if ( wDeck[ row ][ column ] == card ) {
cout << setw( 5 ) << right << wFace[ column ]
<< " of " << setw( 8 ) << left
<< wSuit[ row ]
<< ( card % 2 == 0 ? '\n' : '\t' );

} // end if

} // end function deal
 
Modify do-while loop: place the next card on the next free slot after random selected one (by modulo 52). You may also randomize the initial deal with some kind of a shuffling simulation (see Knuth's book). For example, get 2 random positions (0..51: treat the matrix as 1D array) and swap cards. Repeat this swapping N times.
It's a finit alg with rather good distribution parameters.

 
Tell me more about Knuth's book?

Where could I get it?
 
Knuth's book is actually several volumes, very big, very deep, and definitely worth a look. But I'd try the local library first. If you're lucky they'll have it. I think it's called the art of computer programming or something. Very hot on theory of algorithms, and particularly good on "real-world" examples that make it easy to understand the problem. E.g. memory allocation done by considering best way for restaurant-staff to seat customers in order to maximise efficient use of restaurant!
 
snowedin, nice to see u have a copy of deitel + deitel c++ how to program! Snap!
 
Status
Not open for further replies.

Part and Inventory Search

Sponsor

Back
Top