package OBJECTS is type FIGURE is (CIRCLE, SQUARE, RECTANGLE); type OBJECT(SHAPE:FIGURE:=CIRCLE) is record case SHAPE is when CIRCLE=>RADIUS:FLOAT; when SQUARE=> SIDE: FLOAT; when RECTANGLE=> LENGTH, BREADTH: float; end case; end record; PI:constant:=3.14159; function AREA(X:OBJECT) return FLOAT; function PERIMETER(X:OBJECT) return FLOAT; end OBJECTS; with text_io; Package body OBJECTS is package OIO is new text_io.enumeration_IO(FIGURE); use OIO; function AREA(X:OBJECT) return FLOAT is begin case X.SHAPE is when CIRCLE=>PI*X.RADIUS**2; when SQUARE=> X.SIDE**2; when RECTANGLE=> X.LENGTH * X.BREADTH; end case; end AREA; function PERIMETER(X:OBJECT) return FLOAT is begin case X.SHAPE is when CIRCLE=>2.0*PI*X.RADIUS; when SQUARE=> 4.0 * X.SIDE; when RECTANGLE=> 2.0 * (X.LENGTH + X.BREADTH); end case; end PERIMETER; end OBJECTS; ----------------------------- with Text_io; use Text_io; With FIO; Use FIO; with OBJECTS; procedure figures is -- demo of variant records... A:OBJECTS.OBJECT; begin put("Please input the type of object: "); for f in FIGURES loop OBJECTS.put(F); end loop; OBJECTS.get(A.SHAPE); case A.SHAPE is when CIRCLE=>Put("Radius=? ");get(A.RADIUS); when SQUARE=>Put("Side =? ");get(A.SIDE); when RECTANGLE=> P("Length ="); get(A.LENGTH); Put("Breadth="); get(A.BREADTH); end case; Put("The area is ");Put(OBJECTS.Area(A)); Put("The perimeter is "); Put(OBJECTS.PERIMETER(A)); end;