Skip to main content



PROGRAMMING WITH C


7.12     (Card Shuffling and Dealing) Modify the program in Fig. 7.24 so that the card-dealing
function deals a five-card poker hand. Then write the following additional functions:
a) Determine whether the hand contains a pair.
b) Determine whether the hand contains two pairs.
c) Determine whether the hand contains three of a kind (e.g., three jacks).
d) Determine whether the hand contains four of a kind (e.g., four aces).
e) Determine whether the hand contains a flush (i.e., all five cards of the same suit).
f) Determine whether the hand contains a straight (i.e., five cards of consecutive face values)



ANSWER
7.12
#include<stdio.h>
#include<stdlib.h>
#include<time.h>

//main functions
void shuffle( int wDeck[][ 13 ] );
void deal( const int wDeck[][ 13 ], const char *wface[], const char *wSuit[], char *wfSuit[], char *wfFace[] );

//operation functions
void pair( const char *wfSuit[], const char *wfFace[]);
void twoPair( const char *wfSuit[], const char *wfFace[] );
void threeKind( const char *wfSuit[], const char *wfFace[] );
void fourKind( const char *wfSuit[], const char *wfFace[] );
void flush( const char *wfSuit[], const char *wfFace[] );
void straight( const char *wfSuit[], const char *wfFace[], const char *wFace[] );

//sub-operation functions
void result( const int compare, const int compareTo, const char *wfFace[], const char *wfSuit[], const char statement[] );

int main(void){
 //initilize 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 suit and face array for storing five-hand card
 char *fSuit[ 5 ] ;// Hearts
  char *fFace[ 5 ] ;// Seven, Ace, Ace, Four, Five

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

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

 shuffle( deck );//shuffle the deck
 deal( deck, face, suit, fSuit, fFace );//deal five-hand card
 pair( fSuit, fFace );//compute for pair
 twoPair( fSuit, fFace );//compute for two-pair
 threeKind( fSuit, fFace );//compute for three of a kind
 fourKind( fSuit, fFace );//compute for four of the kind
 flush( fSuit, fFace );//compute for flush
 straight( fSuit, fFace, face );//compute for straight

   system("pause");
 return 0;
}

void shuffle( int wDeck[][ 13 ] ){
 int row, column, card;

 for(card = 1; card <= 52; card++){
  do{
   row = rand() % 4;
   column = rand() % 13;
  }
  while(wDeck[ row ][ column ] != 0);

  wDeck[ row ][ column ] = card;
 }
}

void deal( const int wDeck[][ 13 ], const char *wFace[], const char *wSuit[], char *wfSuit[], char *wfFace[] ){
 int card, row, column, i;

 //deal 5-card poker hand
 for(card = 1, i = 0; card <= 5; card++, i++){
  for(row = 0; row < 4; row++){
   for(column = 0; column < 13; column++){
    if(wDeck[ row ][ column ] == card){
               wfSuit[ i ] = wSuit[ row ];
               wfFace[ i ] = wFace[ column ];
          }
   }
  }
 }

 //display 5-card poker hand
 printf("Your five-card poker hand...\n\n");
 for(i = 0; i < 5; i++){
  printf("%10s of %-8s\n", wfFace[ i ], wfSuit[ i ]);
 }
}

void pair(const char *wfSuit[], const char *wfFace[]){
    int card, i, j = 0, k;
    int pair[ 5 ] = { 0 };

    //compute whether the five-hand card contains a pair
    printf("\nPair...\n");
    for(card = 0; card < 5; card++){
       for(i = card + 1; i < 5; i++){
          if(wfFace[ card ] == wfFace[ i ]){
             j++;
             pair[ card ] = i;
        }
      }
    }
    
    //display result
    if(j == 1){
      for(card = 0; card < 5; card++){
         if(pair[ card ] != 0){
            k = pair[ card ];
            printf("\n%10s of %-8s and %5s of %-8s\n", wfFace[ card ], wfSuit[ card ], wfFace[ k ], wfSuit[ k ] );
         }
      }
   }
   else{
      printf("\n  Your five-hand card doesn't contains any pair.\n");     
   } 
}

void twoPair( const char *wfSuit[], const char *wfFace[] ){
    int card, i, j = 0, k;
    int pair[ 5 ] = { 0 };
    
    //compute whether the five-hand card contains two pair
    printf("\nTwo-pair...\n");
    for(card = 0; card < 5; card++){
        for(i = card + 1; i < 5; i++){
           if(wfFace[ card ] == wfFace[ i ]){
             j++;
             pair[ card ] = i;
         } 
        }
    }
    
    //display result
    if(j == 2){
       for(card = 0; card < 5; card++){
          if(pair[ card ] != 0){
             k = pair[ card ];
             printf("\n%10s of %-8s and %5s of %-8s\n", wfFace[ card ], wfSuit[ card ], wfFace[ k ], wfSuit[ k ] );
          }
       }
    }
    else{
       printf("\n  Your five-hand card doesn't contains two pair.\n");     
    }
}

void threeKind( const char *wfSuit[], const char *wfFace[] ){
    int card, i, j = 0, k, x;
    int pair[ 3 ] = { 0 };
    
    //compute whether the five-hand card contains three of a kind
    printf("\nThree of a kind...\n");
    for(card = 0; card < 3; card++){
        for(i = card + 1; i < 5; i++){
           if(wfFace[ card ] == wfFace[ i ]){
              for(x = i + 1; x < 5; x++){
                 if(wfFace[ i ] == wfFace[ x ]){
                    j++;
                    pair[ 0 ] = card;
                    pair[ 1 ] = i;
                    pair[ 2 ] = x;         
                 }     
              }
         } 
        }
    }
    
    //display result
    if(j == 1){
       for(card = 0; card < 3; card++){
             k = pair[ card ];
             printf("\n%10s of %-8s\n", wfFace[ k ], wfSuit[ k ] );
       }
    }
    else{
       printf("\n  Your five-hand card doesn't contains three of a kind.\n");     
    }     
}

void fourKind( const char *wfSuit[], const char *wfFace[] ){
    int card, i, indi = 0, pair[ 5 ] = { 0 };
    
    //compute whether your five-hand card contains four-of-a-kind
    printf("\nFour of a kind...\n");
    for(card = 0; card < 2; card++){
       for(i = card + 1; i < 5; i++){
          if(wfFace[ card ] == wfFace[ i ]){ 
             indi++;
             if(indi == 1)
                pair[ i - 1 ] = 1;
             pair[ i ] = 1;   
             
          }
       }        
       if(indi == 3)
          break;
       else if(indi > 3)
          break;
       else{
          indi = 0;
          for(i = 0; i < 5; i++)
             pair[ i ] = 0;
       }
          
    }    
    
    //display result
    if(indi == 3){
       for(i = 0; i < 5; i++){
         if( pair[ i ] == 1)
            printf("\n%5s of %-9s\n", wfFace[ i ], wfSuit[ i ] );
       }     
       printf("\n");
    }else{
       printf("\n  Your five-hand card doesn't contains four-of-a-kind.\n");     
    }
}

void flush ( const char *wfSuit[], const char *wfFace[] ){
   int i, j = 0;
   
   //compute whether your five-hand card contains a flush
   printf("\nFlush...\n");
   for(i = 1; i < 5; i++){
      if(wfSuit[ 0 ] == wfSuit[ i ] )
         j++;
   }
   
   //display result
   result( j, 0, wfFace, wfSuit, "\n  Not flush!\n" );
}

void straight( const char *wfSuit[], const char *wfFace[], const char *wFace[] ){
   int i, j, k, pass, count, hold, check = 1;
   int faceValue[ 5 ] = { 0 };
   
   printf("\nStraight...\n");
   //locate face value and store in an array
   for(i = 0 ; i < 5; i++){
      for(j = 0 ; j < 13; j++){
         if(wfFace[ i ] == wFace[ j ]){
            faceValue[ i ] = j;          
         }     
      }
   }
   
   //sort face value in ascending order using bubble sort
   for(pass = 0; pass < 4; pass++){
      for(count = 0; count < 4; count++){
         if(faceValue[ count ] > faceValue[ count + 1 ]){
            //swap
            hold = faceValue[ count ];
            faceValue[ count ] = faceValue[ count + 1 ];
            faceValue[ count + 1 ] = hold;              
         }         
      }        
   }
   
   //check if the hand contains a straight
   for(i = 0; i < 4; i++){
      if(faceValue[ i ] + 1 != faceValue[ i + 1 ]){
         check = 0;             
      }     
   }
   
   //display result
   result( check, 1, wfFace, wfSuit, "\n  Not a straight hand.\n" );
      
   printf("\n");
}

//sub-operation functions
void result( const int compare, const int compareTo, const char *wfFace[], const char *wfSuit[], const char statement[] ){
   int i;
   
   if(compare == compareTo){
      for(i = 0; i < 5; i++){
         printf("\n  %5s of %-8s\n", wfFace[ i ], wfSuit[ i ] );
      }
   }
   else{
      printf("%s", statement );  
   }
}

 Contact Adda Samuel

Comments

Popular posts from this blog

Hei guys ! Watch out for more on c plus plus

WhatsApp Tips and Tricks

Send Disappearing Messages Disappearing messages automatically delete themselves after a certain period of time. That way, you won’t have to worry about your message being saved or forwarded without your knowledge. WhatsApp gives you the option of having messages disappear after 24 hours, 7 days or 90 days. You can turn it on for specific conversations with anyone you choose. Keep in mind though that the preview of the message will remain viewable in the notifications panel until you open the app, even if the time lapses for the message period. To turn on disappearing messages, follow these steps: Open the WhatsApp chat you want to use disappearing messages on. Click on the contact’s name. Click on “disappearing messages.” Select your preferred duration. Alternatively, if you want to enable disappearing messages for all your contacts, you can do this: Open Settings. Tap Account, then go to Privacy. Select Default message timer and then select your preferred duration...