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;
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.