C HELP To gain experience and practice using passbyvalue and
C++ HELP
To gain experience and practice using pass-by-value and pass-by-reference functions.
For your program, you will need to implement the following functions:
void calcDeltaFutr(int h, int m, int deltaH, int deltaM, int& hNew, int& mNew); h and m are the current times. deltaH and deltaM are the amount of time into the future you are trying to calculate. hNew and mNew will store the future time once all the necessary calculations are done.
void calcDeltaPast(int h, int m, int deltaH, int deltaM, int& hNew, int& mNew); h and m are the current times. deltaH and deltaM are the amount of time into the past you are trying to calculate. hNew and mNew will store the past time once all the necessary calculations are done.
void getTime(int &h, int &m, bool mode); h and m store the time that the user enters. mode is used to decide if you allow the user to enter the time in 12h mode or 24h mode.
void rollTimeForward(int& h, int& m); h and m are the hours and minutes for a time. This function will take values of h and m that are larger than 24 and 60, respectively, and roll them around until they are on the intervals [0,23] and [0,59], respectively. Note than you can use the % operator to take the remainder when dividing by a number. For instance, if m = 70, then this should be converted to m = 10 and h = h + 1. To achieve this, you could do h = h + m % 60 and then m = m % 60. This function should be called right at the end of the calcDeltaFutr function.
void rollTimeBack(int& h, int& m); Similar to rollTimeForward, this function deals with values of h and m that are negative and rolls them around so that they are on the intervals [0,23] and [0,59], respectively. This function should be called right at the end of the calcDeltaPast function. Make sure you work though all the edge cases that this function might encounter. This function can get messy if not all situations are taken into account.
void printTime(int h, int m, bool mode); h and m are the hours and minutes component of the time to be printed. mode specifies if the time should be printed in 12-hour or 24-hour format. In this project, the “current time” should be stored in 24-hour format. Only when the user actually interacts with the program will the output and input be sometimes in 12-hour format. Implement a main menu that will allow the user to (1) enter the current time, (2) add a forward delta to the “current time”, (3) add a backwards delta to the “current time”, (4) display the current time, (5) toggle the interface mode between 24-hour and 12-hour (should impact both getTime and printTime). The program should identify invalid input for the main menu. When entering the current time, only allow hours between 0 and 23 and minutes between 0 and 59. Accept only ‘a’ and ‘p’ when entering the time in 12-hour mode. When entering time deltas, only allow positive values or 0 (this is true for both forward and backwards time deltas).
1 - Enter a time
2 - Add delta to time
3 - Subtract delta from time
4 - Display current time
5 - Toggle 24-hour mode
6 - Exit
> 1
Enter the time with whitespace separating the hours and minutes: 5 50
1 - Enter a time
2 - Add delta to time
3 - Subtract delta from time
4 - Display current time
5 - Toggle 24-hour mode
6 - Exit
> 4
The current time is 05:50
1 - Enter a time
2 - Add delta to time
3 - Subtract delta from time
4 - Display current time
5 - Toggle 24-hour mode
6 - Exit
> 2
Enter an increment of hours and minutes (separated by a space): 0 120 The new time would be 07:50
Solution
#include<iostream>
using namespace std;
void calcDeltaFutr(int h, int m, int deltaH, int deltaM, int& hNew, int& mNew);
void calcDeltaPast(int h, int m, int deltaH, int deltaM, int& hNew, int& mNew);
void getTime(int &h, int &m, bool mode);
void rollTimeForward(int& h, int& m);
void rollTimeBack(int& h, int& m);
void printTime(int h, int m, bool mode);
int current_h=-1,current_m=-1;//current time..
bool mode=true;//24 hr format
int main()
{
int choice=-1,c=0;
while(choice!=6)//loop.. exits when user gives 6
{
cout<<\"\ 1 - Enter a time\ 2 - Add delta to time\ 3 - Subtract delta from time\ 4 - Display current time\ 5 - Toggle 24-hour mode\ 6 - Exit\ \";
cout<<\"Enter ur choice:\";
cin>>choice;//taking user choice
if((choice!=1)&&c==0)
{
cout<<\"\ First Enter current time....\ \ \";//errror message..
}
else if(choice==1)
{
c=1;
getTime(current_h,current_m,mode);//calling function that takes time from the user
//cout<<current_h<<\" \"<<current_m<<\"\ \";
}
else if(choice==2)
{
int deltaH,deltaM,hNew,mNew;
cout<<\"Enter an increment of hours and minutes (separated by a space):\";
cin>>deltaH;cin>>deltaM;
calcDeltaFutr(current_h,current_m,deltaH,deltaM,hNew,mNew);
cout<<\"\ The New time would be:\";
printTime(hNew,mNew,mode);
}
else if(choice==3)
{
int deltaH,deltaM,hNew,mNew;
cout<<\"Enter an decrement of hours and minutes (separated by a space):\";
cin>>deltaH;cin>>deltaM;
calcDeltaPast(current_h,current_m,deltaH,deltaM,hNew,mNew);
cout<<\"\ The New time would be:\";
printTime(hNew,mNew,mode);
}
else if(choice==4)
{
cout<<\"\ The Current time is:\";
printTime(current_h,current_m,mode);
}
else if(choice==5)
{
if(mode==true)
mode = false;
else mode = true;
}
else
{
cout<<\"\ \ Select appropriate choice...\ \ \";//error message
}
}
return 0;
}
void getTime(int& h,int& m,bool mode)//function that takes current time as input from the user
{
int hh,mm;
while(true)
{
if(mode==true)
{
cout<<\"\ Enter the time with whitespace separating the hours and minutes:\";
cin>>hh;
cin>>mm;
if(hh>=24 || mm >= 60|| hh<0 || mm <0)
{
cout<<\"\ Error:invalid time..enter again..\ \";
}
else break;
}
else
{
char c;
cout<<\"Enter the time with whitespace separating the hours and minutes and (a/p)character:\";
cin>>hh;
cin>>mm;
cin>>c;
if(hh>=13 || mm >= 60|| hh<=0 || mm <0||(c!=\'a\'&&c!=\'p\'))
{
cout<<\"\ Error:invalid time..enter again..\ \";
}
else
{
if(c==\'p\')
{
if(hh!=12)hh=12+hh;
}
else if(hh==12)hh=0;
break;
}
}
}
h=hh;m=mm;
//cout<<hh<<\" \"<<mm<<\"\ \";
//cout<<h<<\" \"<<m<<\"\ \";
}
void calcDeltaPast(int h, int m, int deltaH, int deltaM, int& hNew, int& mNew)
{
hNew = deltaH-h;
mNew = deltaM-m;
rollTimeBack(hNew, mNew);
}
void rollTimeBack(int& h , int& m)
{
if(m<0)
{
while(m<0)
{
h=h-1;
m=m+60;
}
}
if(h<0)
{
cout<<\"\ ERROR: Limit exceeded.. rounding hours..\ \";
h=0;
}
}
void calcDeltaFutr(int h, int m, int deltaH, int deltaM, int& hNew, int& mNew)
{
hNew = deltaH+h;
mNew = deltaM+m;
rollTimeForward(hNew, mNew);
cout<<hNew<<\":\"<<mNew<<\"\ \";
}
void rollTimeForward(int& h, int& m)
{
int hh=h,mm=m;
if(mm>60)
{
while(mm>60)
{
hh=hh+1;
mm=mm-60;
}
cout<<hh<<\":\"<<mm<<\"\ \";
}
if(hh>24)
{
cout<<\"\ \ Error : limit exceeded..Rounding hours..\ \";
hh=hh%24;
}
h=hh;m=mm;
}
void printTime(int h, int m, bool mode)
{
if(mode==true)
{
if(h<9)
cout<<\'0\';
cout<<h<<\":\";
if(m<9)
cout<<\'0\';
cout<<m<<\"\ \";
}
else
{
if(h<12)
{
if(h==0)cout<<\"12:\";
else
{
if(h<9)
cout<<\'0\';
cout<<h<<\":\";
}
if(m<9)
cout<<\'0\';
cout<<m<<\" a\ \";
}
else
{
if(h==12)cout<<\"12:\";
else
{
cout<<h-12;
cout<<\":\";
}
if(m<9)
cout<<\'0\';
cout<<m<<\" p\ \";
}
}
}




