C++ - program won\'t compile, please help Please fix and post WORKING code with
ID: 3911341 • Letter: C
Question
C++ - program won't compile, please help
Please fix and post WORKING code with modification.
The program is below:
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<ctime>
using namespace std;
// Function prototypes
void BuildDeck( int deck[], const int size );
void PrintDeck( int deck[], const int size );
void Deal( int deck[], int play[][3] );
void PickUp( int deck[], int play[][3], int column );
void SecretCard( int deck[] );
void PrintCard( int card );
string Cap_Name( string word );
int main(void)
{
/* declare and initialize variables */
int column = 0, i = 0;
string name;
char playAgain;
char seeDeck;
/* 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(0));
/* Opening message. Ask the player for his/her name */
cout << "Hello, I am a computer program that is so smart" << 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 (y/n)? ";
cin >> seeDeck;
if (seeDeck=='y')
{
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/n)? ";
cin >> playAgain;
} while(playAgain == 'y');
/* Exiting message */
cout << endl << endl << "Thank you for playing the card trick!" << endl;
return 0;
}
void BuildDeck( int deck[], const int size)
{
int used[52] = {0};
int card = 0, i = 0;
for(i = 0; i < 52; i++)
{
do
{
/* 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 */
} while(used[card] == 1);
used[card]++;
deck[i] = card;
}
return;
}
void PrintDeck( int deck[], const int size )
{
int i;
/* Print out each card in the deck */
for (i = 0; i < 51; i++)
{
if(i%3 == 0)
cout << endl;
PrintCard(deck[i]);
}
}
void Deal( int deck[], int play[][3] )
{
int row = 0, col = 0, card = 0;
for (row = 0; row < 7; row++)
{
play[row][col] = deck[card];
for (col = 0; col < 3; col++)
{
play[row][col] = deck[card];
card++;
}
}
/* deal cards by passing addresses of cardvalues from
the deck array to the play array */
cout << endl;
cout << " Column 0 Column 1 Column 2" << endl;
cout << "=======================================================" << endl;
for(int row = 0; row < 7; row++)
{
for(int col = 0; col < 3; col++)
{
//cout.width(5);
PrintCard(play[row][col]);
}
cout<<endl;
}
return;
}
void PrintCard( int card ) // WORKS
{
int rank = 0;
int suit = 0;
rank = card % 13, suit = (card - rank) / 13;
// Determine the rank of the card and print it out i.e. Queen
if (rank == 0)
cout <<right<<setw(7)<< " Ace";
else if (rank == 9)
cout <<right<<setw(7)<< " 10";
else if (rank == 10)
cout <<right<<setw(7)<< " Jack";
else if (rank == 11)
cout <<right<<setw(7)<< " Queen";
else if (rank == 12)
cout <<right<<setw(7)<< " King";
else
cout <<setw(6)<<" "<< rank;
cout << " of";
// Determine the suit of the card and print it out i.e. of Clubs
if (suit == 0)
cout <<left<<setw(10)<< " Clubs ";
else if (suit == 1)
cout <<left<<setw(10)<< " Diamonds ";
else if (suit == 2)
cout <<left<<setw(10)<< " Hearts ";
else
cout <<left<<setw(10)<< " Spades ";
return;
}
void PickUp( int deck[], int play[][3], int column )
{
int card = 0, row = 0;
for (row =0 ; row < 3; row++)
{
int pickupColumn = (column + row + 2) % 3;
for(int cardInColumn = 0; cardInColumn < 7; cardInColumn++)
{
deck[card++] = play[cardInColumn][pickupColumn];
}
}
return;
}
void SecretCard( int deck[] )
{
int card = 0;
cout << endl <<"Finding secret card..." <<endl;
for(card = 0; card < 10; card++)
{
cout.width(5);
PrintCard(deck[card]);
cout << endl;
}
cout << endl <<"Your secret card is: ";
PrintCard(deck[card]);
cout << endl;
return;
}
Error:
Please fix and post WORKING code with modification.
Explanation / Answer
#include<iostream>
#include<iomanip>
#include<cstdlib>
#include<string>
#include<ctime>
#include<cctype>
using namespace std;
// Function prototypes
void BuildDeck( int deck[], const int size );
void PrintDeck( int deck[], const int size );
void Deal( int deck[], int play[][3] );
void PickUp( int deck[], int play[][3], int column );
void SecretCard( int deck[] );
void PrintCard( int card );
string Cap_Name(string word );
int main(void)
{
/* declare and initialize variables */
int column = 0, i = 0;
string name;
char playAgain;
char seeDeck;
/* 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(0));
/* Opening message. Ask the player for his/her name */
cout << "Hello, I am a computer program that is so smart" << 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 (y/n)? ";
cin >> seeDeck;
if (seeDeck=='y')
{
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/n)? ";
cin >> playAgain;
} while(playAgain == 'y');
/* Exiting message */
cout << endl << endl << "Thank you for playing the card trick!" << endl;
return 0;
}
void BuildDeck( int deck[], const int size)
{
int used[52] = {0};
int card = 0, i = 0;
for(i = 0; i < 52; i++)
{
do
{
/* 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 */
} while(used[card] == 1);
used[card]++;
deck[i] = card;
}
return;
}
void PrintDeck( int deck[], const int size )
{
int i;
/* Print out each card in the deck */
for (i = 0; i < 51; i++)
{
if(i%3 == 0)
cout << endl;
PrintCard(deck[i]);
}
}
void Deal( int deck[], int play[][3] )
{
int row = 0, col = 0, card = 0;
for (row = 0; row < 7; row++)
{
play[row][col] = deck[card];
for (col = 0; col < 3; col++)
{
play[row][col] = deck[card];
card++;
}
}
/* deal cards by passing addresses of cardvalues from
the deck array to the play array */
cout << endl;
cout << " Column 0 Column 1 Column 2" << endl;
cout << "=======================================================" << endl;
for(int row = 0; row < 7; row++)
{
for(int col = 0; col < 3; col++)
{
//cout.width(5);
PrintCard(play[row][col]);
}
cout<<endl;
}
return;
}
void PrintCard( int card ) // WORKS
{
int rank = 0;
int suit = 0;
rank = card % 13, suit = (card - rank) / 13;
// Determine the rank of the card and print it out i.e. Queen
if (rank == 0)
cout <<right<<setw(7)<< " Ace";
else if (rank == 9)
cout <<right<<setw(7)<< " 10";
else if (rank == 10)
cout <<right<<setw(7)<< " Jack";
else if (rank == 11)
cout <<right<<setw(7)<< " Queen";
else if (rank == 12)
cout <<right<<setw(7)<< " King";
else
cout <<setw(6)<<" "<< rank;
cout << " of";
// Determine the suit of the card and print it out i.e. of Clubs
if (suit == 0)
cout <<left<<setw(10)<< " Clubs ";
else if (suit == 1)
cout <<left<<setw(10)<< " Diamonds ";
else if (suit == 2)
cout <<left<<setw(10)<< " Hearts ";
else
cout <<left<<setw(10)<< " Spades ";
return;
}
void PickUp( int deck[], int play[][3], int column )
{
int card = 0, row = 0;
for (row =0 ; row < 3; row++)
{
int pickupColumn = (column + row + 2) % 3;
for(int cardInColumn = 0; cardInColumn < 7; cardInColumn++)
{
deck[card++] = play[cardInColumn][pickupColumn];
}
}
return;
}
string Cap_Name(string name)
{
name[0]=toupper(name[0]);
return name;
}
void SecretCard( int deck[] )
{
int card = 0;
cout << endl <<"Finding secret card..." <<endl;
for(card = 0; card < 10; card++)
{
cout.width(5);
PrintCard(deck[card]);
cout << endl;
}
cout << endl <<"Your secret card is: ";
PrintCard(deck[card]);
cout << endl;
return;
}
Do give a thumbs up
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.