Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

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()));
}

Hire Me For All Your Tutoring Needs
Integrity-first tutoring: clear explanations, guidance, and feedback.
Drop an Email at
drjack9650@gmail.com
Chat Now And Get Quote