We define an ADT specification for a point in a two dimensional space as follows:
Name: \(\texttt{point}\)
Use: \(\texttt{float, Boolean}\)
Functions:
\(\begin{array}{p{1cm} l l l} & \textbf{Init} & \texttt{float} \times \texttt{float} & \rightarrow \texttt{point}\\ & \textbf{Move} & \texttt{point} \times \texttt{float} \times \texttt{float} & \rightarrow \texttt{point}\\ & \textbf{Distance} & \texttt{point} \times \texttt{point} & \rightarrow \texttt{float}\\ & \textbf{Equal} & \texttt{point} \times \texttt{point} & \rightarrow \texttt{Boolean}\\ \end{array}\)
- Complete \(\texttt{point}\) ADT.
- Use \(\texttt{point}\) ADT to define \(\texttt{Circle}\) ADT by including functions allowing to:
- Create a circle from a point and a radius;
- Compute circle's radius;
- Compute circle's center;
- Compute circle's perimeter;
- Compute circle's area;
- Move a circle;
- Test if a point is on the circle;
- Resize a circle according to a (percent) ratio (modifies the radius value);
- Test if two circles are tangents;
- Test if two circles are concentric.
Difficulty level

This exercise is mostly suitable for students
Let dx, dy, x1, y1, x2, y2 :float
p1, p2 : point
* move(init(x1,y1), dx, dy)= init(x1+dx, y1+dy)
* distance( init(x1,y1), init(x2,y2) )= sqrt((x1-x2)2 + (y1-y2)2)
* compare(init(x1, y1) , init(x2, y2) )= { if( (x1== x2)&&(y1==y2) ) then true else false }
ADT
Name : Circle
Uses : point, boolean, float
Operations:
* Init: point x point -> circle
* Radius: circle -> float
* Center : circle -> point
* perimeter: circle -> float
* area : circle -> float
* Move: circle x float x float -> circle
* Belong: circle x point -> boolean
* Resize : circle x float -> circle
* tangent : circle x circle -> Boolean
axioms :
Let dx, dy , radius1, radius2, ratio : float
pt1, pt2 : point
C1, C2: circle
* Center(init(pt1, radius1))= pt1
* Radius(init(pt1, radius1))= radius1
* Permiter(init(pt1, radius1))= 2*PI*radius1
* Area(init(pt1, radius1))= PI*radius1 * radius1
* Move(init(pt1, radius1), dx, dy)= init(move(pt1, dx, dy), radius1)
* Belong(init(pt1, radius1), pt2) = { if distance(pt1, pt2)== radius1 then true else false }
* Resize (init(pt1, radius1), ratio) = init(pt1, radius1 * ratio)
* Tangent(init(pt1, radius1), init(pt2, radius2)) = {if(distance(p1, p2)) == radius1 + radius2 then true else false }
* Concentric(init(pt1, radius1), init(pt2, radius2)))= {if equal(pt1, pt2) then true else false}
Back to the list of exercises
Looking for a more challenging exercise, try this one !!
