Academic Integrity: tutoring, explanations, and feedback — we don’t complete graded work or submit on a student’s behalf.

in unix/linux: We are interested in refactoring a prototype project that a colle

ID: 3721012 • Letter: I

Question

in unix/linux:

We are interested in refactoring a prototype project that a colleague gave us as a single main.cpp file, in such a way that in the development of the project we could build the project in an optimal way by using separated compilation of modules. In order to do that write a makefile script for building the project in a Unix/Linux environment and submit your solution in a project folder named CircleRectangleTriangle with the following project files;

makefile

main.cpp

Circle.h

Circle.cpp

Rectangle.h

Rectangle.cpp

Triangle.h

Triangle.cpp

Important Note: In a makefile script the alignment of commands associated to a particular target must be defined only with the tab key.

Explanation / Answer

CODE:

CC = g++

CFLAGS = -I.

DEPS = Circle.h Rectangle.h Traingle.h

OBJ = main.o Cicle.o Rectangle.o Traingle.o

%.o: %.cpp $(DEPS)

$(CC) -c -o $@ $ < $(CFLAGS)

OUTPUT:

$(OBJ)

g++ -o $@ $ ^ $(CFLAGS)

PROGRAM:

circle.h

#ifndef CIRCLE_H
#define CIRCLE_H

class Circle

{
float radius;
public:
Circle();
void setRadius(float radius);
float area();
float perimeter();
};

#endif

circle.cpp

#include "circle.h"
#include<cmath>
const float PI=3.141592654;


Circle::Circle(){radius=0;};
void Circle::setRadius(float r){radius=r;};
float Circle::area(){return PI*pow(radius,2);};
float Circle::perimeter(){return 2*PI*radius;};

rectangle.h

#ifndef RECTANGLE_H
#define RECTANGLE_H

class Rectangle

{
float base;
float height;
public:
Rectangle();
void setBase(float);
void setHeight(float);
float area();
float perimeter();
};

#endif

rectangle.cpp

#include "rectangle.h"

//Rectangle.cpp
Rectangle::Rectangle(){base=0; height=0;}
void Rectangle::setBase(float b){base=b;}
void Rectangle::setHeight(float h){height=h;}
float Rectangle::area(){return base*height;}
float Rectangle::perimeter(){return 4*base*height;}

triangle.h

#ifndef TRIANGLE_H
#define TRIANGLE_H

class Triangle

{
float base;
float height;
public:
Triangle();
void setBase(float);
void setHeight(float);
float area();
float perimeter();
};

#endif

triangle.cpp

#include "triangle.h"
#include<cmath>

//Triangle.cpp
Triangle::Triangle(){base=0; height=0;}
void Triangle::setBase(float b){base=b;}
void Triangle::setHeight(float h){height=h;}
float Triangle::area(){return base*height/2;}
float Triangle::perimeter(){return (base+2*sqrt(pow(base/2,2)+pow(height,2)));}

main.cpp

#include<iostream>
using namespace std;
#include "circle.h"
#include "triangle.h"
#include "rectangle.h"

int main()

{

Circle c;
Rectangle r;
Triangle t;
float tmp;

//Input for Circle
cout<<"Insert circle radius: ";
cin>>tmp;
c.setRadius(tmp);
  
//Input for Rectangle
cout<<"Insert rectangle base: ";
cin>>tmp;
r.setBase(tmp);
  
cout<<"Insert rectangle height: ";
cin>>tmp;
r.setHeight(tmp);
  
//Input for Triangle
cout<<"Insert triangle base: ";
cin>>tmp;
t.setBase(tmp);

cout<<"Insert triangle height: ";
cin>>tmp;
t.setHeight(tmp);

//Process-output
cout<<" Circle Area: "<<c.area()<<endl;
cout<<"Circle Perimeter': "<<c.perimeter()<<endl;
cout<<"Rectangle Area: "<<r.area()<<endl;
cout<<"Rectangle Perimeter: "<<r.perimeter()<<endl;
cout<<"Triangle Area: "<<t.area()<<endl;
cout<<"Triangle Perimeter: "<<t.perimeter()<<endl;

return 0;
}