Answered step by step
Verified Expert Solution
Link Copied!

Question

1 Approved Answer

So far Chegg as been a tremendous help during my school years. Please look at the output below! I used the bubble sort on Date

So far Chegg as been a tremendous help during my school years.

Please look at the output below! I used the bubble sort on Date holiday[] array and it sorted correctly. The holidayName[] array which holds the string names of the holiday are sorted incorrectly with the dates or the days that the holiday falls under. What I would like to do is find a way to sort the holiday names with the holiday date so it all come out correct. I am just begging C++ II. I tried to pass the index or the holiday[] to the non Date class holidayNames[] but it did not work. I cant change the Date.h or Date.cpp unless the instructor states that. Please show me how to do it without adding thing or changing the Date.cpp or Date.h files.

image text in transcribed

// main.cpp

//Header Files

#include "Date.cpp" // Function Diffinitions

#include // For input and output

#include // For Holiday names

using namespace std;

// Function declaratios or prototypes

void bubbleSort(Date holidays[], int n); // Bubble sort on holidays array

// Start of main

int main() {

// Declare arrays and variables

const int SIZE = 7; // Size of array elements

const int COUNT = 6; // Number of holidays

Date weekDays[SIZE]; // Weekday array

Date holidays[COUNT]; // Holiday array

string holidayNames[COUNT]; // Array for holiday names

int year = 0;

// Populate Date Class with holidays

Date independenceDay(07, 04, 2018); // Independence Day

holidays[0] = independenceDay;

holidayNames[0] = "Independence Day";

Date memorialDay(05, 28, 2018); // Memorial Day

holidays[1] = memorialDay;

holidayNames[1] = "Memorial Day";

Date mothersDay(05, 13, 2018); // Mother's Day

holidays[2] = mothersDay;

holidayNames[2] = "Mother's Day";

Date fathersDay(06, 17, 2018); // Fathers Day

holidays[3] = fathersDay;

holidayNames[3] = "Father's Day";

Date easterSunday(04, 01, 2018); // Easter Sunday

holidays[4] = easterSunday;

holidayNames[4] = "Easter Sunday";

// Prompt the user for current year for Thanks Giving Day

cout

cin >> year; // Read in year

cout

// Search for the date of Thanks Giving and add it to

// the holiday array

Date giveThanks = giveThanks.thanksGiving(year);

holidays[5] = giveThanks;

holidayNames[5] = "Thanks Giving Day";

// Display the initial sort order

cout

//print the dates in original array

for (int index = 0; index

{

cout

}

cout

// Call the Bubble Sort program to sort the holiday array

bubbleSort(holidays, 5);

cout

for (int index = 0; index

{

cout

}

cout

// Loop through holidays to assign day of the week

for (int index = 0; index

{

// Display the holiday name and day of week

int day = holidays[index].weekday();

cout

// Display the day

switch (day) {

case 0: cout

case 1: cout

case 2: cout

case 3: cout

case 4: cout

case 5: cout

case 6: cout

}

}

cout

// Pause the syetem for a while

system("pause");

return 0; // Return int to main if all good

}// End of main

// Bubble Sort Function

void bubbleSort(Date holidays[], int n)

{

int i, j;

for (i = 0; i

// Last i elements will move in place

for (j = 0; j

if (holidays[j] > holidays[j + 1])

{

Date temp = holidays[j];

holidays[j] = holidays[j + 1];

holidays[j + 1] = temp;

}

}

// Date.h

#ifndef Date_H

#define Date_H

#include

#include

#include

#include

using namespace std;

class Date {

private:

int month, day, year;

int days[13];

public:

//constructors

Date(); //constructor for todays date

Date(int m, int d, int y); //constructor to assign date

Date(string str); //constructor for todays date as "mm/dd/year

Date(int gregorian); //constructor to convert a Gregorian date to Date

Date thanksGiving(int year); // Constructor for Thanks Giving

//methods

int getMonth() const; //returns the private variable month

int getDay() const; //returns the private variable day

int getYear() const; //returns the private variable year

string toString() const; //returns the string mm/dd/yyyy

bool leapYear() const; //determines if the year is a leap year

int dayofYear() const; //returns the day of the year: ie 2/1/???? is the 32 day of year

int julian() const;

int weekday() const; //returns 0 for Sunday, 1 for Monday, etc.

//overloaded operators

bool operator==(const Date& otherDate); //2 dates are equal if month, day and year are equal

bool operator

bool operator>(const Date& otherDate); //a date is > another date if it is later

Date operator=(const Date& otherDate); //let's you copy one date to another.

Date operator+(int); //Assign new values to the date after adding the number of days

friend ostream& operator

friend istream& operator >> (istream &input, Date &d);

};

bool validDate(int m, int d, int y); //test other date

bool leapYear(int y); //let's you test any year, not just the year for the instance

int julian(int m, int d, int y); //convert any date to Julian

void gregorian(int jd, int &mth, int &d, int &y);

static int days2[]={0,31,28,31,30,31,30,31,31,30,31,30,31};

#endif

// Date.cpp

#include "Date.h"

Date::Date() {

//constructor to assign todays date to date

char data[9]; //holder for the date

_strdate_s(data); //gets the current date mm/dd/yy

string date=data; //copy to a string for parsing

month=stoi(date.substr(0,2)); //gets characters 0 and 1 of date and converts to int

day=stoi(date.substr(3,2)); //gets characters 3 and 4 of date and converts to int

year=stoi(date.substr(6,2))+2000; //gets characters 6 and 7 of date and converts to int

if(leapYear()) days2[2]=29; else days2[2]=28;

for(int m=0;m

}//constructor for today

static bool validDate(int m, int d, int y) {

bool valid=true; //assume it is valid until found to be invalid

if(y

if(m12) valid=false;

if(leapYear(y)) days2[2]=29; else days2[2]=28;

if(ddays2[m]) valid=false;

return valid;

}//validDate

Date::Date(int m, int d, int y) {

//constructor to assign values to month day and year

if(validDate(m,d,y)) {

month=m;

day=d;

year=y;

}

else {

month=day=1;

year=1970; //Unix time starting point

} /ot valid: set to default valid date

for(int m=0;m

} //constructor with assigned values

Date::Date(int julian) {

//Fliegel-Van Flandern algorithm to convert Julian date to Gregorian number month, day, and year

gregorian(julian,month,day,year);

if(leapYear()) days2[2]=29; else days2[2]=28;

for(int m=0;m

}//Date Julian

Date::Date (string str) { //constructor for todays date as "mm/dd/year

//Parse str by adding one char at a s time to the token until a "/" is encounter.

//When "/" is encountered start the next token

//int p=0;

int count=0;

int num[3];

string token[3];

int len=str.length();

for(int p=0; p

if(str.substr(p,1)=="/") count++;

else token[count]+=str.substr(p,1);

}//parse str to create array of tokens

bool error=false;

for(int p=0;p

try {

num[p]=stoi(token[p]);

}//try to convert to int

catch(invalid_argument&) {

num[p]=-1;

error=true;

} //catch

}//each of the 3 tokens

if(!error && validDate(num[0],num[1],num[2])) {

month=num[0];

day=num[1];

year=num[2];

} /o error

else {

month=day=1;

year=1970; //Unix time starting point

} /ot valid: set to default valid date

for(int m=0;m

}//constructor with string such as "10/31/2016"

Date Date::operator=(const Date& otherDate) {

//assigns another instance of the date class to this.

month=otherDate.month;

day=otherDate.day;

year=otherDate.year;

return *this; //allows date1=date=date3;

}//overloaded operator =

Date Date::operator+(int numDays) {

//Adds the number of days to the Julian date.

Date other(month,day,year); //make copy of the date

int jd=other.julian(); //find the Julian date

jd+=numDays; //add the number of days to the Julian date

gregorian(jd,other.month,other.day,other.year); //Convert the Julian date back to Gregorian

if(other.leapYear()) days2[2]=29; else days2[2]=28;

for(int m=0;m

return other;

} //operator +

int Date::dayofYear() const {

//returns the day of the year, ie 2/1/???? is the 32 day of the year

int total=day;

for(int m=1;m

return total;

}//dayofYear

void gregorian(int julian, int &mth, int &d, int &y) {

//Fliegel-Van Flandern algorithm to convert Julian date to Gregorian month, day, and year

int p,q,r,s,t,u,v;

p = julian + 68569;

q = 4*p/146097;

r = p - (146097*q + 3)/4;

s = 4000*(r+1)/1461001;

t = r - 1461*s/4 + 31;

u = 80*t/2447;

v = u/11;

y = 100*(q-49)+s+v;

mth = u + 2 - 12*v;

d = t - 2447*u/80;

} //Gregorian

int Date::julian() const {

int jd= day-32075+1461*(year+4800+(month-14)/12)/4+

367*(month-2-(month-14)/12*12) /12-3*((year+4900+(month-14)/12)/100)/4;

return jd;

}

bool Date::leapYear() const {

bool leap=false;

if(year%4==0) leap=true;

if(year%100==0 && year%400!=0) leap=false;

return leap;

}//leapYear

bool leapYear(int yr) {

bool leap=false;

if(yr%4==0) leap=true;

if(yr%100==0 && yr%400!=0) leap=false;

return leap;

}//leapYear

int Date::weekday() const {

//returns 0 for Sunday, 1 for Monday, etc.

static int t[] = { 0, 3, 2, 5, 0, 3, 5, 1, 4, 6, 2, 4 };

int y =year;

y-= month

return ( y + y/4 - y/100 + y/400 + t[month-1] + day) % 7;

}//weekday

int Date::getMonth() const {

//private variables cannot be accessed directly but require "getter" functions

return month;

}//getMonth

int Date::getDay() const {

return day;

}//

int Date::getYear() const {

return year;

}//getYear

string Date::toString() const {

stringstream oss; //a stream to append the values

oss

return oss.str();

}

bool Date::operator==(const Date& otherDate) {

return (month==otherDate.month && day==otherDate.day && year==otherDate.year);

}//operator ==

bool Date::operator

//A date is less than another date if is earlier

bool result=false; //assume false until proven true

if(year

else if(year==otherDate.year && month

else if(year==otherDate.year && month==otherDate.month && day

return result;

}//operator

bool Date::operator>(const Date& otherDate) {

//Convert both dates to Julian and compare the Julian dates

int jd1=julian();

int jd2=otherDate.julian();

return jd1>jd2;

}//operator

ostream& operator

output

return output;

} // operator

istream& operator >> (istream &input, Date &d) {

string s;

input >> s;

Date other(s); //create a new Date

d=other; //assign the new Date to d

return input;

} // operator >>

Date Date::thanksGiving(int year)

{

Date turkeyDay(11, 01, year);

while (turkeyDay.weekday() != 4)

{

turkeyDay = turkeyDay + 1;

}

turkeyDay = turkeyDay + 21;

return turkeyDay;

}

G:\Montgomery College\C++Programs\Assignments\Holidays\Holidays\DebugHolidays.exe Please enter the current year: 2018 The initial order of the holiday array: 7/4/2018 5/28/2018 5/13/2018 6/17/2018 4/1/2018 The holiday array sorted after calling Bubble Sort: 4/1/2018 5/13/2018 5/28/2018 6/17/2018 7/4/2018 Independence Day falls on a Sunday Memorial Day falls on a Sunday other's Day falls on a Monday Father's Day falls on a Sunday Easter Sunday falls on a Wednesday Thanks Giving Day falls on a Thursday Press any key to continue

Step by Step Solution

There are 3 Steps involved in it

Step: 1

blur-text-image

Get Instant Access to Expert-Tailored Solutions

See step-by-step solutions with expert insights and AI powered tools for academic success

Step: 2

blur-text-image

Step: 3

blur-text-image

Ace Your Homework with AI

Get the answers you need in no time with our AI-driven, step-by-step assistance

Get Started

Recommended Textbook for

Spatial Databases With Application To GIS

Authors: Philippe Rigaux, Michel Scholl, Agnès Voisard

1st Edition

1558605886, 978-1558605886

More Books

Students also viewed these Databases questions