Use this card heap for the problem below class Card { public: enum Suit {spades,
ID: 3758086 • Letter: U
Question
Use this card heap for the problem below
class Card {
public:
enum Suit {spades, hearts, diamonds, clubs};
Card();
Card(int rank, Suit s);
string toString();
int GetRank(); // jack = 11, queen = 12, king = 13
Suit GetSuit();
private:
int myRank;
Suit mySuit;
};
ostream& operator << (ostream& out, Card& c);
bool operator == (Card& lhs, Card& rhs);
bool operator <= (Card lhs, Card rhs);
bool operator >= (Card lhs, Card rhs);
______________________________________________________________________________________
Card::Card(){
myRank = 1;
mySuit=spades ;
}
Card::Card(int rank, Suit s){
myRank = rank;
mySuit=s;
}
string Card::toString(){
string suitString;
if (mySuit == spades)
suitString="spades";
else if (mySuit == hearts)
suitString="hearts";
else if (mySuit == clubs)
suitString="clubs";
else
suitString = "diamonds";
stringstream ss;
ss << myRank;
ss << " of ";
ss << suitString;
return ss.str();
}
int Card::GetRank() {
return myRank;
}
Card::Suit Card::GetSuit(){
return mySuit;
}
ostream& operator <<(ostream& out, Card& c) {
out << c.toString();
return out;
}
bool operator == (Card& lhs, Card& rhs) {
return ((lhs.GetRank() == rhs.GetRank())
&& (lhs.GetSuit() == rhs.GetSuit()));
}
bool operator <= (Card lhs, Card rhs) {
return (lhs.GetRank() <= rhs.GetRank());
}
bool operator >= (Card lhs, Card rhs) {
return (lhs.GetRank() >= rhs.GetRank());
}
HeapPriorityQueue<Card> aHeap;
Card heart(5,Card::hearts);
aHeap.insert(heart);
Card diamond(8,Card::diamonds);
aHeap.insert(diamond);
Card min = aHeap.min();
cout << min.toString() << endl;
Question One– Heap Programming Problem – Create a program for scheduling work on homework assignments.
Each homework should have: an associated class, a due date (month and day), a point value, and a time estimate.
You should create a class corresponding to a homework assignment, and override the << operator and the needed comparison operators to store the homework in a heap.
The homework should be compared by due date, with a tiebreaker that if two homeworks are due on the same date you should complete the one where you get the most points per time spent (assume a linear relationship).
The program should repeatedly allow the user to either:
Enter a new homework assignment
Find out what they should work on next
Explanation / Answer
homeworkassignment.h
#ifndef HOMEWORKASSIGNMENT_H_
#define HOMEWORKASSIGNMENT_H_
#include <string>
using namespace std;
//This class defines a homework assignment
typedef struct {
int day; //should be in range 1 - 31
int month; //should be in range 1 - 12
}* date;
class HomeWorkAssignment {
private:
string className; //associated class
date dueDate; //due date of assignment
double pointValue; //point value
int elapsedTime; //time estimate
//checks the validity of a date(day, month)
bool validDate(int day, int month)
{
bool valid=false;
switch(month)
{
case 1:
if(day >= 1 && day <= 31)
valid=true;
break;
case 2:
if(day >= 1 && day <= 29)
valid=true;
break;
case 3:
if(day >= 1 && day <= 31)
valid=true;
break;
case 4:
if(day >= 1 && day <= 30)
valid=true;
break;
case 5:
if(day >= 1 && day <= 31)
valid=true;
break;
case 6:
if(day >= 1 && day <= 30)
valid=true;
break;
case 7:
if(day >= 1 && day <= 31)
valid=true;
break;
case 8:
if(day >= 1 && day <= 31)
valid=true;
break;
case 9:
if(day >= 1 && day <= 30)
valid=true;
break;
case 10:
if(day >= 1 && day <= 31)
valid=true;
break;
case 11:
if(day >= 1 && day <= 30)
valid=true;
break;
case 12:
if(day >= 1 && day <= 31)
valid=true;
break;
default:
valid=false;
break;
}
return valid;
}
//display date in day/month format
void displayDate(date dt)
{
cout<<dt->day<<"/"<<dt->month<<endl;
}
//checks whether two dates are equal
bool areDatesEqual(date dt1, date dt2)
{
bool isEqual=false;
if(dt1->month == dt2->month)
{
if(dt1->day == dt2->month)
isEqual=true;
}
return isEqual;
}
bool checkDatesForLessThan(date dt1, date dt2)
{
bool isLessThan=false;
if(dt1->month < dt2->month)
{
isLessThan=true;
}
else if(dt1->month == dt2->month)
{
if(dt1->day < dt2->month)
isLessThan=true;
}
return isLessThan;
}
public:
//constructors
HomeWorkAssignment();
HomeWorkAssignment(string cName, int day, int month, double pValue, int eTime);
//overloaded operators
ostream& operator << (ostream& out, HomeWorkAssignment& hwa);
bool operator == (HomeWorkAssignment& hwa1, HomeWorkAssignment& hwa2);
bool operator < (HomeWorkAssignment hwa1, HomeWorkAssignment hwa2);
bool operator > (HomeWorkAssignment hwa1, HomeWorkAssignment hwa2);
//string representation of home work assignment
string toString();
//getter functions
int GetClassName();
date GetDueDate();
double GetPointValue();
int GetElapsedTime();
};
#endif /* HOMEWORKASSIGNMENT_H_ */
homeworkassignment.cpp:
#include <iostream>
#include <cstdlib>
#include <sstream>
#include <homeworkassignment.h>
using namespace std;
//implementation of constructors
HomeWorkAssignment::HomeWorkAssignment()
{
className="";
dueDate->day=1;
dueDate->month=1;
pointValue=0.0;
elapsedTime=0;
}
HomeWorkAssignment::HomeWorkAssignment(string cName, int day, int month, double pValue, int eTime)
{
className=cName;
if(validDate(day,month))
{
dueDate->day=day;
dueDate->month=month;
}
else
{
cerr<<"Invalid due date. Can't proceed"<<endl;
exit(1);
}
pointValue=pValue;
elapsedTime=eTime;
}
//getter functions
int HomeWorkAssignment::GetClassName()
{
return className;
}
date HomeWorkAssignment::GetDueDate()
{
return dueDate;
}
double HomeWorkAssignment::GetPointValue()
{
return pointValue;
}
int HomeWorkAssignment::GetElapsedTime()
{
return elapsedTime;
}
//string representation of home work assignment
string HomeWorkAssignment::toString(){
string hwaString;
stringstream ss;
ss<<"Homework Assignment ";
ss<<GetClassName();
ss<<" due on ";
ss<<displayDate(GetDueDate());
ss<<" with points ";
ss<<GetPointValue();
ss<<" and elapsed time ";
ss<<GetElapsedTime();
return ss.str();
}
//implementation of overloaded operators
ostream& HomeWorkAssignment::operator <<(ostream& out, HomeWorkAssignment& hwa)
{
out << hwa.toString();
return out;
}
bool HomeWorkAssignment::operator == (HomeWorkAssignment& hwa1, HomeWorkAssignment& hwa2) {
return ((hwa1.GetClassName()==hwa2.GetClassName())
&&(areDatesEqual(hwa1.GetDueDate(),hwa2.GetDueDate()))
&&(hwa1.GetPointValue()==hwa2.GetPointValue())
&&(hwa1.GetElapsedTime()==hwa2.GetElapsedTime()));
}
bool HomeWorkAssignment::operator < (HomeWorkAssignment hwa1, HomeWorkAssignment hwa2) {
return (checkDatesForLessThan(hwa1.GetDueDate(), hwa2.GetDueDate()));
}
bool HomeWorkAssignment::operator > (HomeWorkAssignment hwa1, HomeWorkAssignment hwa2) {
return (checkDatesForGreaterThan(hwa1.GetDueDate(), hwa2.GetDueDate()));
}
Related Questions
drjack9650@gmail.com
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.