C++ - help in fixing card trick program -the program won\'t complie and I do not
ID: 3916191 • Letter: C
Question
C++ - help in fixing card trick program -the program won't complie and I do not know why - program posted below:
Read the instructions in the picture to have a better understanding of what I have coded:
#include
#include
#include
#include
using namespace std;
// Function prototypes
void BuildDeck( int deck[], const int size );
void PrintDeck( int deck[], const int size );
void PrintCard( int card );
void Deal( int deck[], int play[][3] );
void PickUp( int deck[], int play[][3], int column );
void SecretCard( int deck[] );
string Cap_Name(string word);
int main(void)
{
/* declare and initialize variables */
int column = 0, i = 0;
int SeeTheDeck = 0;
int PlayAgain = 0;
string name;
/* Declare a 52 element array of integers to be used as the deck of cards */
int deck[52] = {0};
/* Declare a 7 by 3 array to receive the cards dealt to play the trick */
int play[7][3] = {0};
/* Generate a random seed for the random number generator. */
srand(time(NULL));
/* Openning message. Ask the player for his/her name */
cout << "Hello, I am a really tricky computer program and " << endl
<< "I can even perform a card trick. Here's how." << endl
<< "To begin the card trick type in your name: ";
cin >> name;
/* Capitalize the first letter of the person's name. */
name = Cap_Name(name);
cout << endl << "Thank you " << name << endl;
do
{
/* Build the deck */
BuildDeck(deck, 52);
/* Ask if the player wants to see the entire deck. If so, print it out. */
cout << "Ok " << name << ", first things first. Do you want to see what " << endl << "the deck of cards looks like (1 = y/0 = n)? ";
cin >> SeeTheDeck;
if (SeeTheDeck == '1')
{
cout << endl;
PrintDeck(deck, 52);
}
cout << endl << name << " pick a card and remember it..." << endl;
/* Begin the card trick loop */
for(i = 0; i < 3; i++)
{
/* Begin the trick by calling the function to deal out the first 21 cards */
Deal(deck, play);
/* Include error checking for entering which column */
do
{
/* Ask the player to pick a card and identify the column where the card is */
cout << endl <<"Which column is your card in (0, 1, or 2)?: ";
cin >> column;
} while(column < 0 || column > 2);
/* Pick up the cards, by column, with the selected column second */
PickUp(deck, play, column);
}
/* Display the top ten cards, then reveal the secret card */
SecretCard(deck);
/* if the player wants to play again */
cout << name << ", would you like to play again (y =1 /n = 0)? ";
cin >> PlayAgain;
} while(PlayAgain == 'y');
/* Exiting message */
cout << endl << endl << "Thank you for playing the card trick!" << endl;
return 0;
} // End of main()
void BuildDeck( int deck[], const int size)
{
int used[52] = {0};
int card = 0, i = 0;
/* Generate cards until the deck is full of integers */
while(i < 52)
{
/* generate a random number between 0 and 51 */
card = rand() % 52;
/* Check the used array at the position of the card.
If 0, add the card and set the used location to 1. If 1, generate another number */
if(used[card] != 1)
{
}
}
return;
}
void PrintDeck( int deck[], const int size )
{
int i;
/* Print out each card in the deck */
for (i = 0; i < 51; i++)
{
PrintCard(deck [i]);
cout << endl;
}
}
void Deal( int deck[], int play[][3] )
{
int row = 0, col = 0, card = 0;
/* deal cards by passing addresses of cardvalues from
the deck array to the play array */
cout << endl;
cout << " Column 0 Column 1 Column 2";
cout << "======================================================="
<< endl;
for (row = 0; row < 7; row ++)
{
for (int column = 0; column < 3; column++)
{
cout.width(5);
play[row][column] = deck [card];
PrintCard(deck[card]);
card++;
}
cout << endl;
}
return;
}
void PrintCard( int card ) //Card will be between 0 and 51
{
int rank = 0;
int suit = 0;
// Determine the rank of the card and print it out i.e. Queen
rank = card % 13;
// Determine the suit of the card and print it out i.e. of Clubs
suit = card / 13;
switch (rank)
{
case 0:
if(rank == 0)
cout << " Ace";
break;
case 1:
if (rank == 12)
cout << " King";
break;
case 11:
if (rank == 10)
cout << " Jack";
break;
case 12:
if (rank == 11)
cout << "Queen";
break;
default:
cout << setw(5) << rank;
}
switch (suit)
{
case 0:
if (suit == 0)
cout << " of Clubs ";
break;
case 1:
if (suit == 2)
cout << " of Hearts ";
break;
case 2:
if (suit == 1)
cout << " of Diamonds ";
break;
case 3: //check and make sure though
cout << " of Spades ";
break;
}
return;
}
void PickUp( int deck[], int play[][3], int column )
{
int card = 0, row = 0;
int first = 0, last = 0;
switch(column)
{
case 0:
first = 1;
last = 2;
break;
case 1:
first = 0;
last = 2;
break;
case 2:
first = 0;
last = 1;
break;
}
for(int row = 0; row < 7; row ++)
{
deck[card++] = play[row][first];
}
for(int row = 0; row < 7; row++)
{
deck[card++] = play[row][column];
}
for(int row = 0; row < 7; row++)
{
deck[card++] = play[row][last];
}
return;
}
void SecretCard( int deck[] )
{
int card = 0;
cout << endl <<"Finding secret card...";
for(card = 0; card < 10; card++)
{
PrintCard(deck[card]);
cout << endl;
}
cout << endl <<"Your secret card is: ";
PrintCard(deck[card]);
cout << endl;
return;
}
Explanation / Answer
Code will be like
#include "stdafx.h"
#include <string>
#include<iostream>
#include "time.h"
#include <iomanip>
using namespace std;
// Function prototypes
void BuildDeck(int deck[], const int size);
void PrintDeck(int deck[], const int size);
void PrintCard(int card);
void Deal(int deck[], int play[][3]);
void PickUp(int deck[], int play[][3], int column);
void SecretCard(int deck[]);
string Cap_Name(string word);
int main(void)
{
/* declare and initialize variables */
int column = 0, i = 0;
int SeeTheDeck = 0;
int PlayAgain = 0;
string name;
/* Declare a 52 element array of integers to be used as the deck of cards */
int deck[52] = { 0 };
/* Declare a 7 by 3 array to receive the cards dealt to play the trick */
int play[7][3] = { 0 };
/* Generate a random seed for the random number generator. */
srand(time(NULL));
/* Openning message. Ask the player for his/her name */
cout << "Hello, I am a really tricky computer program and " << endl
<< "I can even perform a card trick. Here's how." << endl
<< "To begin the card trick type in your name: ";
cin >> name;
/* Capitalize the first letter of the person's name. */
name = Cap_Name(name);
cout << endl << "Thank you " << name << endl;
do
{
/* Build the deck */
BuildDeck(deck, 52);
/* Ask if the player wants to see the entire deck. If so, print it out. */
cout << "Ok " << name << ", first things first. Do you want to see what " << endl << "the deck of cards looks like (1 = y/0 = n)? ";
cin >> SeeTheDeck;
if (SeeTheDeck == '1')
{
cout << endl;
PrintDeck(deck, 52);
}
cout << endl << name << " pick a card and remember it..." << endl;
/* Begin the card trick loop */
for (i = 0; i < 3; i++)
{
/* Begin the trick by calling the function to deal out the first 21 cards */
Deal(deck, play);
/* Include error checking for entering which column */
do
{
/* Ask the player to pick a card and identify the column where the card is */
cout << endl << "Which column is your card in (0, 1, or 2)?: ";
cin >> column;
} while (column < 0 || column > 2);
/* Pick up the cards, by column, with the selected column second */
PickUp(deck, play, column);
}
/* Display the top ten cards, then reveal the secret card */
SecretCard(deck);
/* if the player wants to play again */
cout << name << ", would you like to play again (y =1 /n = 0)? ";
cin >> PlayAgain;
} while (PlayAgain == 'y');
/* Exiting message */
cout << endl << endl << "Thank you for playing the card trick!" << endl;
return 0;
} // End of main()
void BuildDeck(int deck[], const int size)
{
int used[52] = { 0 };
int card = 0, i = 0;
/* Generate cards until the deck is full of integers */
while (i < 52)
{
/* generate a random number between 0 and 51 */
card = rand() % 52;
/* Check the used array at the position of the card.
If 0, add the card and set the used location to 1. If 1, generate another number */
if (used[card] != 1)
{
}
}
return;
}
void PrintDeck(int deck[], const int size)
{
int i;
/* Print out each card in the deck */
for (i = 0; i < 51; i++)
{
PrintCard(deck[i]);
cout << endl;
}
}
void Deal(int deck[], int play[][3])
{
int row = 0, col = 0, card = 0;
/* deal cards by passing addresses of cardvalues from
the deck array to the play array */
cout << endl;
cout << " Column 0 Column 1 Column 2";
cout << "======================================================="
<< endl;
for (row = 0; row < 7; row++)
{
for (int column = 0; column < 3; column++)
{
cout.width(5);
play[row][column] = deck[card];
PrintCard(deck[card]);
card++;
}
cout << endl;
}
return;
}
void PrintCard(int card) //Card will be between 0 and 51
{
int rank = 0;
int suit = 0;
// Determine the rank of the card and print it out i.e. Queen
rank = card % 13;
// Determine the suit of the card and print it out i.e. of Clubs
suit = card / 13;
switch (rank)
{
case 0:
if (rank == 0)
cout << " Ace";
break;
case 1:
if (rank == 12)
cout << " King";
break;
case 11:
if (rank == 10)
cout << " Jack";
break;
case 12:
if (rank == 11)
cout << "Queen";
break;
default:
cout << setw(5) << rank;
}
switch (suit)
{
case 0:
if (suit == 0)
cout << " of Clubs ";
break;
case 1:
if (suit == 2)
cout << " of Hearts ";
break;
case 2:
if (suit == 1)
cout << " of Diamonds ";
break;
case 3: //check and make sure though
cout << " of Spades ";
break;
}
return;
}
void PickUp(int deck[], int play[][3], int column)
{
int card = 0, row = 0;
int first = 0, last = 0;
switch (column)
{
case 0:
first = 1;
last = 2;
break;
case 1:
first = 0;
last = 2;
break;
case 2:
first = 0;
last = 1;
break;
}
for (int row = 0; row < 7; row++)
{
deck[card++] = play[row][first];
}
for (int row = 0; row < 7; row++)
{
deck[card++] = play[row][column];
}
for (int row = 0; row < 7; row++)
{
deck[card++] = play[row][last];
}
return;
}
void SecretCard(int deck[])
{
int card = 0;
cout << endl << "Finding secret card...";
for (card = 0; card < 10; card++)
{
PrintCard(deck[card]);
cout << endl;
}
cout << endl << "Your secret card is: ";
PrintCard(deck[card]);
cout << endl;
return;
}
Check with the above code
If the above solution is helpful to you in any way please rate it Or if you have any concerns please comment it, I will help you through
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.