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

Saint Louis University

Computer Science 180
Data Structures

Michael Goldwasser

Spring 2014

Dept. of Math & Computer Science


Lab Assignment 02

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

Pre-lab Due:

Tuesday, 28 January 2014, 10:00am
Submission Deadline: Wednesday, 29 January 2014, 11:59pm

Techniques:

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:
4
10 2
20 4
10 7
30 9
2
60 4
50 5
-1

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
20
2
30
6
10
7

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:
3
20 2
30 6
10 7
2
60 1
30 5
4
15 1
25 2
30 3
10 5
-1
170 miles
180 miles
90 miles


Hints

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 {
  public:
    /** 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 { ... }

  private:
    //  ??? 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).


Judge's Data

You can run the automated judge's tests on turing to test the correctness of your program (although you must still formally submit the source code via the course website). If you are working on your own machine (or if you just want to examine the judge's inputs and expected outputs), we provide them here.


Michael Goldwasser
CSCI 180, Spring 2014
Last modified: Monday, 20 January 2014
Assignments | Course Home | Documentation | Lab Hours/Tutoring | Schedule | Submit