Assignments | Class Photo | Course Home | Documentation | Lab Hours/Tutoring | Schedule | Submit

Saint Louis University

Computer Science 180
Data Structures

Michael Goldwasser

Spring 2012

Dept. of Math & Computer Science

Lab Assignment 02

Topic: Speed Limit
Source Code: speed.cpp
Live Archive Ref#: 3059

Pre-lab Due:

Thursday, 2 February 2012, 10:00am
Submission Deadline: Friday, 3 February 2012, 11:59pm


Loops, Arithmetic, tracking state information

Collaboration Policy

The pre-lab requirement must be completed and submitted individually.

The remainder of the lab activity should be completed working in pairs. One person should submit the result, making sure that both partners' names are clearly identified in that submission.

Please make sure you adhere to the policies on academic integrity in this regard.

Pre-Lab Requirement

Read the complete problem description and then determine what the expected output should be if given the following input:

Prelab input: Prelab output:
10 2
20 4
10 7
30 9
60 4
50 5

Speed Limit

Bill and Ted are taking a road trip. But the odometer in their car is broken, so they don't know how many miles they have driven. Fortunately, Bill has a working stopwatch, so they can record their speed and the total time they have driven. Unfortunately, their record keeping strategy is a little odd, so they need help computing the total distance driven. You are to write a program to do this computation.

For example, if their log shows

Speed in miles per hour
Total elapsed time in hours

this means they drove 2 hours at 20 miles per hour, then 6-2=4 hours at 30 miles per hour, then 7-6=1 hour at 10 miles per hour. The distance driven is then (2)(20) + (4)(30) + (1)(10) = 40 + 120 + 10 = 170 miles. Note that the total elapsed time is always since the beginning of the trip, not since the previous entry in their log.

Input: The input consists of one or more data sets. Each set starts with a line containing an integer n, 1 ≤ n ≤ 10,  followed by n pairs of values, one pair per line. The first value in a pair, s, is the speed in miles per hour and the second value, t, is the total elapsed time. Both s and t are integers, 1 ≤ s ≤ 90 and 1 ≤ t ≤ 12.  The values for t are always in strictly increasing order. A value of -1 for n signals the end of the input.

Output: For each input set, print the distance driven, followed by a space, followed by the word "miles". 

Example input: Example output:
20 2
30 6
10 7
60 1
30 5
15 1
25 2
30 3
10 5
170 miles
180 miles
90 miles


This is a rather straightforward problem, as described. But let me explain why I chose the problem for this lab. The key is to determine how much state information you need to be able to process the travelers' log, one line at a time. Although the syntax of object-oriented programming might be overkill in the race against time, the thought process is important. If I were to define a class for use in this problem, it would have a basic structure as follows:

class TravelLog {
    /** initialize a new (empty) log.  */
    TravelLog() { ... }

    /** Add a new entry to the log.
     *  @param   speed      current speed in miles per hour
     *  @param   clockTime  elapsed time since beginning of trip (in hours)
    void addEntry(int speed, int clockTime) { ... }

    /** Returns the total number of miles traveled.
     *  @return number of miles
    int getTotalMiles() const { ... }

    //  ??? state information ???

There are three basic operations. (1) initialize the internal state for a new trip, (2) process one additional log entry, and (3) report the total number of miles traveled on the current log. The challenge for you is to determine what internal variables are needed to support these operations. In particular, it is not necessary to store all of the raw log entries. You can consolidate the relevant information into a few well chosen variables. With a wise choice of variables, the rest of the problem is easy.

I will leave it up to you as to whether you actually want to use such a TravelLog class as part of your program, or to do similar calculations in a non-object-oriented way. In either case, you need to have a strategy for tracking the progress of a trip.

Warning: Keep in mind that your submitted program must be able to analyze multiple, independent trials. A common mistake on programming contests is to forget to reinitialize all relevant variables with each new trial (so that the computation on one trial does not adversely affect the computation for the next trial). So if using such a TravelLog class, make sure to start with a new instance for each trip (or if doing this problem implicitly with your own variables, make sure to reinitialize them for each new trip).

Michael Goldwasser
CSCI 180, Spring 2012
Last modified: Monday, 30 January 2012
Assignments | Class Photo | Course Home | Documentation | Lab Hours/Tutoring | Schedule | Submit