
Concept explainers
Add the following member function to the ADT class DigitalTime defined in Displays 12.1 and 12.2:
void DigitalTime::intervalSince(const DigitalTime& aPreviousTime,
int& hoursInInterval, int& minutesInInterval) const
This function computes the time interval between two values of type DigitalTime. One of the values of type DigitalTime is the object that calls the member function intervalSince, and the other value of type DigitalTime is given as the first argument. For example, consider the following code:
DigitalTime current(5, 45), previous(2, 30);
int hours, minutes;
current.intervalSince(previous, hours, minutes);
cout << “The time interval between ” << previous
<< “ and ” << current << endl
<< “is ” « hours « “ hours and ”
<< minutes << “ minutes.\n”;
In a
The time interval between 2:30 and 5:45
is 3 hours and 15 minutes.
Allow the time given by the first argument to be later in the day than the time of the calling object. In this case, the time given as the first argument is assumed to be on the previous day. You should also write a program to test this revised ADT class.

Compute interval between two times
Program Plan:
- The interface file “dtime.h” is same as in the Display 12.1 however user needs to add the member function “void intervalSince(const DigitalTime& aPreviousTime, int& hoursInInterval, int& minutesInInterval)const;”.
- In the implementation file “dtime.cpp”, add the function definition for function “intervalSince”.
- In this function, first initializes the variables “hoursInInterval” and “minutesInInterval” to “0”.
- Declare a variable for compute the difference in “DigitalTime”.
- Compute the hour difference using “hour - aPreviousTime.hour”.
- Compute the minute difference using “minute - aPreviousTime.minute”.
- Check the condition of “hour” and “minutes”.
- Finally store the hours and minutes difference in their respective variables.
- In the application file that is “main.cpp”.
- Include the directive “dtime.h”.
- Define main function.
- Initializes the time for current and previous.
- Declare “int” variables for “hours” and “minutes”.
- Call “intervalSince()” function.
- Display the interval between two times.
The below C++ program is used to compute interval between two values of type “DigitalTime”.
Explanation of Solution
Program:
Modified code for “dtime.h”:
//DISPLAY 12.1 Interface File for DigitalTime
//Header file dtime.h: This is the INTERFACE for the class DigitalTime.
//Values of this type are times of day. The values are input and output in
//24-hour notation, as in 9:30 for 9:30 AM and 14:45 for 2:45 PM.
#include <iostream>
using namespace std;
class DigitalTime
{
public:
friend bool operator ==(const DigitalTime& time1, const DigitalTime& time2);
//Returns true if time1 and time2 represent the same time;
//otherwise, returns false.
DigitalTime(int theHour, int theMinute);
//Precondition: 0 <= theHour <= 23 and 0 <= theMinute <= 59.
//Initializes the time value to theHour and theMinute.
DigitalTime( );
//Initializes the time value to 0:00 (which is midnight).
void advance(int minutesAdded);
//Precondition: The object has a time value.
//Postcondition: The time has been changed to minutesAdded minutes later.
void advance(int hoursAdded, int minutesAdded);
//Precondition: The object has a time value.
//Postcondition: The time value has been advanced
//hoursAdded hours plus minutesAdded minutes.
void intervalSince(const DigitalTime& aPreviousTime, int& hoursInInterval, int& minutesInInterval)const;
//Precondition: The object has a time value.
//Precondition: The aPreviousTime object has a time value
//Postcondition: The hoursInInterval represents the number of hours that have passed and the minutesInInterval represents the number of minutes that have passed
friend istream& operator >>(istream& ins, DigitalTime& theObject);
//Overloads the >> operator for input values of type DigitalTime.
//Precondition: If ins is a file input stream, then ins has already been
//connected to a file.
friend ostream& operator <<(ostream& outs, const DigitalTime& theObject);
//Overloads the << operator for output values of type DigitalTime.
//Precondition: If outs is a file output stream, then outs has already been
//connected to a file.
private:
int hour;
int minute;
};
Modified code for “dtime.cpp”:
//DISPLAY 12.2 Implementation File for DigitalTime
//Implementation file dtime.cpp (Your system may require some
//suffix other than .cpp): This is the IMPLEMENTATION of the ADT DigitalTime.
//The interface for the class DigitalTime is in the header file dtime.h.
#include <iostream>
#include <cctype>
#include <cstdlib>
#include "dtime.h"
using namespace std;
//These FUNCTION DECLARATIONS are for use in the definition of
//the overloaded input operator >>:
void readHour(istream& ins, int& theHour);
//Precondition: Next input in the stream ins is a time in 24-hour notation,
//like 9:45 or 14:45.
//Postcondition: theHour has been set to the hour part of the time.
//The colon has been discarded and the next input to be read is the minute.
void readMinute(istream& ins, int& theMinute);
//Reads the minute from the stream ins after readHour has read the hour.
int digitToInt(char c);
//Precondition: c is one of the digits '0' through '9'.
//Returns the integer for the digit; for example, digitToInt('3') returns 3.
bool operator ==(const DigitalTime& time1, const DigitalTime& time2)
{
return (time1.hour == time2.hour && time1.minute == time2.minute);
}
//Uses iostream and cstdlib:
DigitalTime::DigitalTime(int theHour, int theMinute)
{
if (theHour < 0 || theHour > 23 || theMinute < 0 || theMinute > 59)
{
cout << "Illegal argument to DigitalTime constructor.";
exit(1);
}
else
{
hour = theHour;
minute = theMinute;
}
}
DigitalTime::DigitalTime( ) : hour(0), minute(0)
{
//Body intentionally empty.
}
void DigitalTime::advance(int minutesAdded)
{
int grossMinutes = minute + minutesAdded;
minute = grossMinutes%60;
int hourAdjustment = grossMinutes/60;
hour = (hour + hourAdjustment)%24;
}
void DigitalTime::advance(int hoursAdded, int minutesAdded)
{
hour = (hour + hoursAdded)%24;
advance(minutesAdded);
}
//Uses iostream:
ostream& operator <<(ostream& outs, const DigitalTime& theObject)
{
outs << theObject.hour << ':';
if (theObject.minute < 10)
outs << '0';
outs << theObject.minute;
return outs;
}
//Uses iostream:
istream& operator >>(istream& ins, DigitalTime& theObject)
{
readHour(ins, theObject.hour);
readMinute(ins, theObject.minute);
return ins;
}
int digitToInt(char c)
{
return ( static_cast<int>(c) - static_cast<int>('0') );
}
//Uses iostream, cctype, and cstdlib:
void readMinute(istream& ins, int& theMinute)
{
char c1, c2;
ins >> c1 >> c2;
if (!(isdigit(c1) && isdigit(c2)))
{
cout << "Error illegal input to readMinute\n";
exit(1);
}
theMinute = digitToInt(c1)*10 + digitToInt(c2);
if (theMinute < 0 || theMinute > 59)
{
cout << "Error illegal input to readMinute\n";
exit(1);
}
}
//Uses iostream, cctype, and cstdlib:
void readHour(istream& ins, int& theHour)
{
char c1, c2;
ins >> c1 >> c2;
if ( !( isdigit(c1) && (isdigit(c2) || c2 == ':' ) ) )
{
cout << "Error illegal input to readHour\n";
exit(1);
}
if (isdigit(c1) && c2 == ':')
{
theHour = digitToInt(c1);
}
else //(isdigit(c1) && isdigit(c2))
{
theHour = digitToInt(c1)*10 + digitToInt(c2);
ins >> c2;//discard ':'
if (c2 != ':')
{
cout << "Error illegal input to readHour\n";
exit(1);
}
}
if ( theHour < 0 || theHour > 23 )
{
cout << "Error illegal input to readHour\n";
exit(1);
}
}
/*Function definition compute interval between the two values of type DigitalTime */
void DigitalTime::intervalSince(const DigitalTime& aPreviousTime, int& hoursInInterval, int& minutesInInterval) const
{
/* Initializes the value of hours in interval to "0" */
hoursInInterval = 0;
/* Initializes the value of minutes in interval to "0" */
minutesInInterval = 0;
/* Declare the variable for time difference */
DigitalTime diff;
/* Compute hour difference */
diff.hour = hour - aPreviousTime.hour;
/* Compute minutes difference */
diff.minute = minute - aPreviousTime.minute;
/* Check condition */
if (hour < aPreviousTime.hour || hour == aPreviousTime.hour && minute < aPreviousTime.minute)
{
//Display given message
cout << "Preceding time is in the preceding day" << endl;
diff.hour = 24 + (hour - aPreviousTime.hour);
}
/* Check the condition hour */
if (diff.minute < 0)
{
diff.hour--;
diff.minute = diff.minute + 60;
}
/* Store hours and minutes interval in respective variable */
hoursInInterval = diff.hour;
minutesInInterval = diff.minute;
return;
}
Modified “main.cpp”:
//Header file
#include <iostream>
//Header file for "dtime.h"
#include "dtime.h"
//For standard input and output
using namespace std;
//Main function
int main( )
{
//Declare time
DigitalTime current(5, 45), previous(2, 30);
//Declare "int" variables
int hours, minutes;
/* Call intervalSince() function */
current.intervalSince(previous, hours, minutes);
/* Display given time interval */
cout << "The time interval between " << previous << " and " << current << endl << "is " << hours << " hours and " << minutes << " minutes.\n";
return 0;
}
The time interval between 2:30 and 5:45
is 3 hours and 15 minutes.
Want to see more full solutions like this?
Chapter 12 Solutions
Problem Solving with C++ (9th Edition)
Additional Engineering Textbook Solutions
Java How to Program, Early Objects (11th Edition) (Deitel: How to Program)
SURVEY OF OPERATING SYSTEMS
Starting Out With Visual Basic (8th Edition)
Starting Out with C++ from Control Structures to Objects (9th Edition)
Starting Out with Programming Logic and Design (5th Edition) (What's New in Computer Science)
Mechanics of Materials (10th Edition)
- using r language a continuous random variable X has density function f(x)=1/4x^3e^-(pi/2)^4,x>=0 derive the probability inverse transformation F^(-1)x where F(x) is the cdf of the random variable Xarrow_forwardusing r language in an accelerated failure test, components are operated under extreme conditions so that a substantial number will fail in a rather short time. in such a test involving two types of microships 600 chips manufactured by an existing process were tested and 125 of them failed then 800 chips manufactured by a new process were tested and 130 of them failed what is the 90%confidence interval for the difference between the proportions of failure for chips manufactured by two processes? using r languagearrow_forwardI want a picture of the tools and the pictures used Cisco Packet Tracer Smart Home Automation:o Connect a temperature sensor and a fan to a home gateway.o Configure the home gateway so that the fan is activated when the temperature exceedsa set threshold (e.g., 30°C).2. WiFi Network Configuration:o Set up a wireless LAN with a unique SSID.o Enable WPA2 encryption to secure the WiFi network.o Implement MAC address filtering to allow only specific clients to connect.3. WLC Configuration:o Deploy at least two wireless access points connected to a Wireless LAN Controller(WLC).o Configure the WLC to manage the APs, broadcast the configured SSID, and applyconsistent security settings across all APs.arrow_forward
- A. What will be printed executing the code above?B. What is the simplest way to set a variable of the class Full_Date to January 26 2020?C. Are there any empty constructors in this class Full_Date?a. If there is(are) in which code line(s)?b. If there is not, how would an empty constructor be? (create the code lines for it)D. Can the command std::cout << d1.m << std::endl; be included after line 28 withoutcausing an error?a. If it can, what will be printed?b. If it cannot, how could this command be fixed?arrow_forwardCisco Packet Tracer Smart Home Automation:o Connect a temperature sensor and a fan to a home gateway.o Configure the home gateway so that the fan is activated when the temperature exceedsa set threshold (e.g., 30°C).2. WiFi Network Configuration:o Set up a wireless LAN with a unique SSID.o Enable WPA2 encryption to secure the WiFi network.o Implement MAC address filtering to allow only specific clients to connect.3. WLC Configuration:o Deploy at least two wireless access points connected to a Wireless LAN Controller(WLC).o Configure the WLC to manage the APs, broadcast the configured SSID, and applyconsistent security settings across all APs.arrow_forwardTransform the TM below that accepts words over the alphabet Σ= {a, b} with an even number of a's and b's in order that the output tape head is positioned over the first letter of the input, if the word is accepted, and all letters a should be replaced by the letter x. For example, for the input aabbaa the tape and head at the end should be: [x]xbbxx z/z,R b/b,R F ① a/a,R b/b,R a/a, R a/a,R b/b.R K a/a,R L b/b,Rarrow_forward
- Given the C++ code below, create a TM that performs the same operation, i.e., given an input over the alphabet Σ= {a, b} it prints the number of letters b in binary. 1 #include 2 #include 3 4- int main() { std::cout > str; for (char c : str) { if (c == 'b') count++; 5 std::string str; 6 int count = 0; 7 char buffer [1000]; 8 9 10 11- 12 13 14 } 15 16- 17 18 19 } 20 21 22} std::string binary while (count > 0) { binary = std::to_string(count % 2) + binary; count /= 2; std::cout << binary << std::endl; return 0;arrow_forwardConsidering the CFG described below, answer the following questions. Σ = {a, b} • NT = {S} Productions: P1 S⇒aSa P2 P3 SbSb S⇒ a P4 S⇒ b A. List one sequence of productions that can accept the word abaaaba; B. Give three 5-letter words that can be accepted by this CFG; C. Create a Pushdown automaton capable of accepting the language accepted by this CFG.arrow_forwardGiven the FSA below, answer the following questions. b 1 3 a a b b с 2 A. Write a RegEx that is equivalent to this FSA as it is; B. Write a RegEx that is equivalent to this FSA removing the states and edges corresponding to the letter c. Note: To both items feel free to use any method you want, including analyzing which words are accepted by the FSA, to generate your RegEx.arrow_forward
- 3) Finite State Automata Given the FSA below, answer the following questions. a b a b 0 1 2 b b 3 A. Give three 4-letter words that can be accepted by this FSA; B. Give three 4-letter words that cannot be accepted by this FSA; C. How could you describe the words accepted by this FSA? D. Is this FSA deterministic or non-deterministic?arrow_forwardConsidering the TM below, answer the following questions. a/x,R €/E,L €/E,R €/E,L x/E,R c/c,R b/E.L c/c,L x/x,R I J K L M F b/E.L D A. Give three 4-letter words that can be accepted by this TM; B. Give three 4-letter words that cannot be accepted by this TM; C. How could you describe the words accepted by this TM? D. What is the alphabet of the language accepted by this TM?arrow_forwardWhat is the generator? Explain motor generator motorarrow_forward
- C++ Programming: From Problem Analysis to Program...Computer ScienceISBN:9781337102087Author:D. S. MalikPublisher:Cengage LearningC++ for Engineers and ScientistsComputer ScienceISBN:9781133187844Author:Bronson, Gary J.Publisher:Course Technology PtrMicrosoft Visual C#Computer ScienceISBN:9781337102100Author:Joyce, Farrell.Publisher:Cengage Learning,
- Programming Logic & Design ComprehensiveComputer ScienceISBN:9781337669405Author:FARRELLPublisher:CengageEBK JAVA PROGRAMMINGComputer ScienceISBN:9781337671385Author:FARRELLPublisher:CENGAGE LEARNING - CONSIGNMENTSystems ArchitectureComputer ScienceISBN:9781305080195Author:Stephen D. BurdPublisher:Cengage Learning




