Problem Solving with C++ (9th Edition)
Problem Solving with C++ (9th Edition)
9th Edition
ISBN: 9780133591743
Author: Walter Savitch
Publisher: PEARSON
bartleby

Concept explainers

bartleby

Videos

Textbook Question
Book Icon
Chapter 12, Problem 1P

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 program that uses your revised version of the DigitalTime ADT, this code should produce the following output:

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.

Expert Solution & Answer
Check Mark
Program Plan Intro

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.
Program Description Answer

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;

}

Sample Output

The time interval between 2:30 and 5:45

is 3 hours and 15 minutes.

Want to see more full solutions like this?

Subscribe now to access step-by-step solutions to millions of textbook problems written by subject matter experts!
Students have asked these similar questions
15 points Save ARS Consider the following scenario in which host 10.0.0.1 is communicating with an external SMTP mail server at IP address 128.119.40.186. NAT translation table WAN side addr LAN side addr (c), 5051 (d), 3031 S: (e),5051 SMTP B D (f.(g) 10.0.0.4 server 138.76.29.7 128.119.40.186 (a) is the source IP address at A, and its value. S: (a),3031 D: (b), 25 10.0.0.1 A 10.0.0.2. 1. 138.76.29.7 10.0.0.3
6.3A-3. Multiple Access protocols (3). Consider the figure below, which shows the arrival of 6 messages for transmission at different multiple access wireless nodes at times t=0.1, 1.4, 1.8, 3.2, 3.3, 4.1. Each transmission requires exactly one time unit. 1 t=0.0 2 3 45 t=1.0 t-2.0 t-3.0 6 t=4.0 t-5.0 For the CSMA protocol (without collision detection), indicate which packets are successfully transmitted. You should assume that it takes .2 time units for a signal to propagate from one node to each of the other nodes. You can assume that if a packet experiences a collision or senses the channel busy, then that node will not attempt a retransmission of that packet until sometime after t=5. Hint: consider propagation times carefully here. (Note: You can find more examples of problems similar to this here B.] ☐ U ப 5 - 3 1 4 6 2
Just wanted to know, if you had a scene graph, how do you get multiple components from a specific scene node within a scene graph? Like if I wanted to get a component from wheel from the scene graph, does that require traversing still?   Like if a physics component requires a transform component and these two component are part of the same scene node. How does the physics component knows how to get the scene object's transform it is attached to, this being in a scene graph?

Additional Engineering Textbook Solutions

Find more solutions based on key concepts
The keywordindicates that a method does not return a value.

Java How to Program, Early Objects (11th Edition) (Deitel: How to Program)

T F A file may be opened in the definition of the file stream object.

Starting Out with C++ from Control Structures to Objects (9th Edition)

What is a program?

Starting Out with Programming Logic and Design (5th Edition) (What's New in Computer Science)

Knowledge Booster
Background pattern image
Computer Science
Learn more about
Need a deep-dive on the concept behind this application? Look no further. Learn more about this topic, computer-science and related others by exploring similar questions and additional content below.
Similar questions
SEE MORE QUESTIONS
Recommended textbooks for you
Text book image
C++ Programming: From Problem Analysis to Program...
Computer Science
ISBN:9781337102087
Author:D. S. Malik
Publisher:Cengage Learning
Text book image
C++ for Engineers and Scientists
Computer Science
ISBN:9781133187844
Author:Bronson, Gary J.
Publisher:Course Technology Ptr
Text book image
Microsoft Visual C#
Computer Science
ISBN:9781337102100
Author:Joyce, Farrell.
Publisher:Cengage Learning,
Introduction to Classes and Objects - Part 1 (Data Structures & Algorithms #3); Author: CS Dojo;https://www.youtube.com/watch?v=8yjkWGRlUmY;License: Standard YouTube License, CC-BY