Differences

This shows you the differences between two versions of the page.

Link to this comparison view

cs-142:help-queue [2015/05/26 18:06] (current)
cs142ta created
Line 1: Line 1:
 +=Help Queue=
 +==Problem==
 +* You have been hired to TA this fall
 +* You want to build a help queue where students can help each other! Thus, the program needs to be able to add and remove a student one at a time. The queue should allow multi-word names.
 +* Your program has two options:
 +# Ask for help
 +** This prompts for a name to add to the end of the queue
 +# Help a student
 +** This removes a name from the front of the queue
 +* You should display the queue as it changes ​
 +==Solution==
 +<code cpp>
 +/*
 +Test case 1
 +Input: option 1
 +Output: prompt for name, adds name when given
  
 +Test case 2
 +Input: option 2 (with empty queue)
 +Output: Nothing is removed from queue
 +
 +Test case 3
 +Input: option 2 (nonempty queue)
 +Output: Name in first position is removed
 +*/
 +
 +#include <​iostream>​
 +#include <​string>​
 +#include <​vector>​
 +
 +using namespace std;
 +
 +const int ASK_HELP_OPT = 1;
 +const int GIVE_HELP_OPT = 2;
 +
 +/*
 + Display the queue to the console
 + @param queue queue to display
 +*/
 +void display_queue(const vector<​string>​ & queue)
 +{
 + cout << "​CURRENT QUEUE:"​ << endl;
 + for (int i = 0; i < queue.size();​ i++)
 + {
 + // print out 1-based, labeled list of names who are waiting
 + cout << (i + 1) << ". " << queue[i] << endl;
 + }
 +}
 +
 +/*
 + Shows menu and gets user's menu choice. No input validation
 + @return user's menu choice
 +*/
 +int prompt_for_option()
 +{
 + cout << "​*************MENU***************"​ << endl
 + << ASK_HELP_OPT << ". Ask for help" << endl
 + << GIVE_HELP_OPT << ". Give help" << endl
 + << "​Option:​ ";
 +
 + int option;
 + cin >> option;
 +
 + cout << endl;
 +
 + return option;
 +}
 +
 +/*
 + Function checks if queue is non-empty and then removes next to be helped from the queue
 + @param queue the queue of those waiting for help
 +*/
 +void give_help(vector<​string>​ & queue)
 +{
 + if (queue.size() == 0)
 + {
 + return;
 + }
 + else
 + {
 + // Take out first person
 + string name_of_being_helped = queue[0];
 +
 + // Move everyone else up
 + // alternative:​ queue.erase(queue.begin());​
 + for (int i = 0; i < queue.size() - 1; i++)
 + {
 + queue[i] = queue[i + 1];
 + }
 + queue.pop_back();​ // reduce the size of the array
 + }
 +}
 +
 +/*
 + Function prompts for name of person needing help, then adds it to the queue
 + @param queue queue of those waiting to be helped
 +*/
 +void ask_help(vector<​string>​ & queue)
 +{
 + cout << "Name to add:";
 + string name;
 +
 + // Have to sync in case there'​s a \n character waiting in the cin buffer from cin>>​option
 + cin.sync();​
 + getline(cin,​ name); // this allows us to get names with multiple words
 +
 + queue.push_back(name);​
 +}
 +
 +int main()
 +{
 + vector<​string>​ help_queue;
 +
 + while (true)
 + {
 + // display the queue
 + display_queue(help_queue);​
 +
 + // prompt for an option
 + int option = prompt_for_option();​
 +
 + // either add to the queue or remove from the queue
 + if (option == ASK_HELP_OPT)
 + {
 + ask_help(help_queue);​
 + }
 + else if (option == GIVE_HELP_OPT)
 + {
 + give_help(help_queue);​
 + }
 + }
 +
 + system("​pause"​);​
 + return 0;
 +}
 +</​code>​
cs-142/help-queue.txt ยท Last modified: 2015/05/26 18:06 by cs142ta
Back to top
CC Attribution-Share Alike 4.0 International
chimeric.de = chi`s home Valid CSS Driven by DokuWiki do yourself a favour and use a real browser - get firefox!! Recent changes RSS feed Valid XHTML 1.0