#include "figure.h" //Abstract data type Figure with methods for initializing and //displaying the chacteristics of Figure instances. void Figure::Create() //Creates figure with blank string as value of Name field. { strset(OneFig.Name, ' '); } void Figure::Init(FigKind ShapeVal, float Val1, float Val2) // //Pre : Figure has been created. //Post: Object is defined with union tag member FigKind set // to ShapeVal. If object has one data member, Val1 is // stored in it and Val2 is ignored; otherwise Val1 and // Val2 are stored. { OneFig.Shape = ShapeVal; switch (OneFig.Shape) { case Circle: strcpy(OneFig.Name, "Circle"); OneFig.Radius = Val1; break; case Rectangle: strcpy(OneFig.Name, "Rectangle"); OneFig.Rec.Width = Val1; OneFig.Rec.Length = Val2; break; case Square: strcpy(OneFig.Name, "Square"); OneFig.Side = Val1; break; case Triangle: strcpy(OneFig.Name, "Triangle"); OneFig.Tri.Base = Val1; OneFig.Tri.Height = Val2; break; } } void Figure::ComputePerim() //Defines the value of object data member Perimeter. //Pre : Union tage member is defined and characteristics of // object are defined. //Post: Assigns value to Perimeter data member. { switch(OneFig.Shape) { case Circle: OneFig.Perimeter = 2 * M_PI * OneFig.Radius; break; case Rectangle: OneFig.Perimeter = 2 * (OneFig.Rec.Width + OneFig.Rec.Length); break; case Square: OneFig.Perimeter = 4 * OneFig.Side; break; case Triangle: OneFig.Perimeter = //pow() to raise to a power OneFig.Tri.Base + OneFig.Tri.Height + sqrt(pow(OneFig.Tri.Base, 2.0) + pow(OneFig.Tri.Height, 2.0)); break; } } void Figure::ComputeArea() //Defines the value of object data member Area. //Pre : Union tage member is defined and characteristics of // object are defined. //Post: Assigns value to Area data member. { switch(OneFig.Shape) { case Circle: OneFig.Area = M_PI * pow(OneFig.Radius, 2.0); break; case Rectangle: OneFig.Area = OneFig.Rec.Width * OneFig.Rec.Length; break; case Square: OneFig.Area = pow(OneFig.Side, 2.0); break; case Triangle: OneFig.Area = 0.5 * OneFig.Tri.Base * OneFig.Tri.Height; break; } } char *Figure::GetName() //Returns value of date member Name. { char* Name = new char[Size + 1]; strcpy(Name, OneFig.Name); //can also use //char* nam; // nam=strdup(onefig.name); return(Name); } float Figure::GetArea() //Returns value of data member Area. { return(OneFig.Area); } float Figure::GetPerim() //Returns value of data member Perimeter. { return(OneFig.Perimeter); } float Figure::GetFirstVar() //Retrieves the value of first object dimension. { float X; switch(OneFig.Shape) { case Circle: X = OneFig.Radius; break; case Rectangle: X = OneFig.Rec.Length; break; case Square: X = OneFig.Side; break; case Triangle: X = OneFig.Tri.Base; break; } return(X); } float Figure::GetSecondVar() //Returns value of second dimension, if defined; //otherwise returns 0. { float X; switch(OneFig.Shape) { case Circle: X = 0; break; case Rectangle: X = OneFig.Rec.Length; break; case Square: X = 0; break; case Triangle: X = OneFig.Tri.Base; break; } return(X); } void Figure::Display() //Displays object data members. //Pre : All required data members are defined. //Post: Each data member has been displayed. { int Equal; //check for blank string as Name value Equal = strncmp(OneFig.Name, " ", 1); if (!Equal) cout << "Figure kind is not defined\n"; else { cout << "Figure kind is " << OneFig.Name << "\n"; cout << "Area is " << OneFig.Area << "\n"; cout << "Perimeter is " << OneFig.Perimeter << "\n"; switch(OneFig.Shape) { case Circle: cout << "Radius is " << OneFig.Radius <<"\n"; break; case Rectangle: cout << "Width is " << OneFig.Rec.Width << "\n"; cout << "Length is " << OneFig.Rec.Length << "\n"; break; case Square: cout << "Side is " << OneFig.Side << "\n"; break; case Triangle: cout << "Base is " << OneFig.Tri.Base << "\n"; cout << "Height is " << OneFig.Tri.Height << "\n"; } } }