#### 3.1Basic Racket

Develop the following functions and datatypes in the Beginning Student language.

 procedure(sum-coins pennies nickels dimes quarters) → number? pennies : number? nickels : number? dimes : number? quarters : number?
The local supermarket needs a program that can compute the value of a bag of coins. sum-coins produces the amount of money in the bag.

You will want to use check-within to test this.

 procedure(tax gross-pay) → number? gross-pay : number?
Produces the amount of tax owed. For a gross pay of \$240 or less, the tax is 0%; for over \$240 and \$480 or less, the tax rate is 15%; and for any pay over \$480, the tax rate is 28%.

 procedure(netpay hours-worked) → number? hours-worked : number?
Determines the net pay of an employee, which is the gross pay minus the tax. Assume the hourly pay rate is \$12.

 procedure(what-kind a b c) → symbol? a : number? b : number? c : number?
The function consumes the coefficients a, b, and c of a quadratic equation. It then determines whether the equation is degenerate and, if not, how many solutions the equation has. The function produces one of four symbols: 'degenerate, 'two, 'one, or 'none. An equation is degenerate if (= a 0).

 struct(struct time (hours minutes seconds)) hours : number? minutes : number? seconds : number?
Represents points in time since midnight. Define using define-struct.

 procedure(time-diff t1 t2) → number? t1 : time? t2 : time?
Returns the number of seconds from t1 to t2.

 struct(struct position (x y)) x : number? y : number?
Represents two dimensional points.

Represents circles.

 struct(struct square (upper-left length)) upper-left : position? length : number?
Represents squares.

 struct(struct rect (upper-left width height)) upper-left : position? width : number? height : number?
Represents rectangles.

 procedure(area shape) → number? shape : (or/c circ? square? rect?)
Computes the area of the shape.

You will want to use check-within to test this.

 procedure(translate-shape shape delta) → (or/c circ? square? rect?) shape : (or/c circ? square? rect?) delta : number?
Produces a shape whose key position is moved by delta pixels in the x direction.

 procedure(in-shape? shape p) → boolean? shape : (or/c circ? square? rect?) p : position?
Returns true if p is within the shape, false otherwise.