# CSG 107: Problem Set 10

Due: Wednesday, April 8, 2009 at 5:00 pm.

#### Purpose:

This is the second part of a two-part assignment. The goal of this second part is to give you some experience with iterative refinement of a problem, and further experience with patterns of sharing and collaboration. The finger exercises give you some experience with visitors.

#### Finger Exercises:

These are based on the examples we did in class.

Write a visitor interface for lists of integers, and write visitors for the following operations:

1. sum of the elements of the list
2. length of the list
3. product of the elements of the list. If any element of the list is 0, don't multiplying the other elements.
4. A list in which each element is doubled. Can this visitor use the same interface as the others?

#### Required Problems:

Note: You must use DrScheme's ProfessorJ Intermediate Student Language. As usual, you must turn in separate files and separate class diagrams for each problem. Use your solution to the last question on the homework as the basis for your development.

1. Add to your simulation from Homework 9 some trucks. Trucks are just like cars, except that they are 20 pixels high and 60 pixels long. Otherwise they behave just like cars. Arrange things so that every 5th cycle (ie every 5R ticks), a truck enters the simulation instead of a car. Both cars and trucks should travel at a constant 20 pixels per tick (unlike last week).
2. Add to your simulation from Homework 9 some traffic lights. A traffic light is represented as a rectangle, 30 pixels high and 20 pixels wide. It should hang with its lower edge 50 pixels above the street.

A traffic light is either red or green. It is red for half of its cycle time, and green for the other half. The cycle times of different traffic lights may be different.

Hang 3 traffic lights over your simulation. The first traffic light should be 200 pixels from the start, with a cycle time of 20 ticks. The second light should be 500 pixels from the start, with a cycle time of 30 ticks. The third light should be 700 pixels from the start, with a cycle time of 25 ticks. All the lights start green.

For this question, the cars ignore the traffic lights.

3. Now change your simulation so that the cars and trucks obey the traffic lights: if a car would enter the intersection (that is, the 20-pixel wide portion of the street that is directly below the traffic light) when the light is red, it stops at the light. If the car or truck is already in the intersection when the light turns red, it keeps going.

Adjust the timing of the traffic lights and watch how the traffic flow changes.