i want to make GeometryHomework.h and GeometryHomework.cpp ... i made code: like
ID: 3547171 • Letter: I
Question
i want to make GeometryHomework.h and GeometryHomework.cpp ...
i made code: like this
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
#include <fstream>
using std::ifstream;
#include <iomanip>
using std::setprecision;
using std::ios;
#include <vector>
using std::vector;
#include <cstdlib>
#include <cstring>
#include <cmath>
const int MAX_CHARS_PER_LINE = 200;
const int MAX_TOKENS_PER_LINE = 4;
const char* const DELIMITER = " ";
ostream& reset(ostream& out)
{
out.unsetf(ios::fixed|ios::showpoint);
out << setprecision(6);
return out;
}
ostream& set(ostream& out)
{
out.setf(ios::fixed|ios::showpoint);
out << setprecision(2);
return out;
}
class Shape
{
public:
Shape(const char* const []);
virtual void print(ostream&) const = 0;
virtual ~Shape() {}
protected:
const double Dimention1;
const double Dimention2;
const double Dimention3;
};
class Square : public Shape
{
public:
Square(const char* const token[]):Shape(token){}
void print(ostream& ) const;
};
class Rectangle : public Shape
{
public:
Rectangle(const char* const token[]):Shape(token){}
void print(ostream& ) const;
};
class Circle : public Shape
{
public:
Circle(const char* const token[]):Shape(token){}
void print(ostream& ) const;
};
class Cube : public Square
{
public:
Cube(const char* const token[]):Square(token){}
void print(ostream& ) const;
};
class Prism : public Rectangle
{
public:
Prism(const char* const token[]):Rectangle(token){}
void print(ostream&) const;
};
class Cylinder : public Circle
{
public:
Cylinder(const char* const token[]):Circle(token){}
void print(ostream& ) const;
};
Shape::Shape(const char* const token[]):Dimention1((token[1] == 0 ? 0.0 : atof(token[1]))), Dimention2((token[2] == 0 ? 0.0 : atof(token[2]))), Dimention3((token[3] == 0 ? 0.0 : atof(token[3]))){}
void Square::print(ostream& out) const
{
double area, perimeter;
area=pow(Dimention1, 2);
perimeter=4*(Dimention1);
out<<reset;
out<<"SQUARE side="<<Dimention1;
out<<set;
out<<" area="<<area<<" perimeter="<<perimeter<<endl;
}
void Rectangle::print(ostream& out) const
{
double area, perimeter;
area=(Dimention1)*(Dimention2);
perimeter=2*(Dimention1)+2*(Dimention2);
out<<reset;
out<<"RECTANGLE length="<<(Dimention1)<<" width="<<(Dimention2);
out<<set;
out<<" area="<<area<<" perimeter="<<perimeter<<endl;
}
void Circle::print(ostream& out) const
{
double area, circumference;
area=4*atan(1.0)*pow((Dimention1), 2);
circumference=2*4*atan(1.0)*(Dimention1);
out<<reset;
out<<"CIRCLE radius="<<(Dimention1);
out<<set;
out<<" area="<<area<<" circumference="<<circumference<<endl;
}
void Cube::print(ostream& out) const
{
double surface,volume;
volume=pow(Dimention1, 3);
surface=6*pow(Dimention1, 2);
out<<reset;
out<<"CUBE side="<<Dimention1;
out<<set;
out<<" surface area="<<surface<<" volume="<<volume<<endl;
}
void Prism::print(ostream& out) const
{
double surface,volume;
volume=(Dimention1)*(Dimention2)*(Dimention3);
surface=2*(Dimention1)*(Dimention2)+2*(Dimention2)*(Dimention3)+2*(Dimention3)*(Dimention1);
out<<reset;
out<<"PRISM length="<<(Dimention1)<<" width="<<(Dimention2)<<" height="<<(Dimention3);
out<<set;
out<<" surface area="<<surface<<" volume="<<volume<<endl;
}
void Cylinder::print(ostream& out) const
{
double surface,volume;
volume=4*atan(1.0)*pow((Dimention1), 2)*(Dimention2);
surface=2*4*atan(1.0)*pow((Dimention1), 2)+2*4*atan(1.0)*(Dimention1)*(Dimention2);
out<<reset;
out<<"CYLINDER radius="<<(Dimention1)<<" height="<<(Dimention2);
out<<set;
out<<" surface area="<<surface<<" volume="<<volume<<endl;
}
int main()
{
cout<<"Programmer: Jaeyoung Paik ";
cout<<"Description: This program calculate shape ";
cout<<"(sqare,rectangle,circle,cube,prism,cylinder) ";
cout<<"using the input data ";
cout<<endl;
vector< const Shape* >::iterator it;
vector<const Shape*> shapes;
int i;
int d=0;
ifstream fin;
fin.open("geo.txt");
if (!fin.good())
return 1;
while (!fin.eof())
{
char buf[MAX_CHARS_PER_LINE];
fin.getline(buf, MAX_CHARS_PER_LINE);
int n=0;
const char* token[MAX_TOKENS_PER_LINE] = {0};
token[0] = strtok(buf, DELIMITER);
if (token[0])
{
for (n = 1; n < MAX_TOKENS_PER_LINE; n++)
{
token[n] = strtok(0, DELIMITER);
if (!token[n]) break;
}
}
for (i = 0; i < n; i++)
{
if (!((strcmp(token[0],"SQUARE") == 0) || (strcmp(token[0],"RECTANGLE") == 0) || (strcmp(token[0],"CUBE") == 0) || (strcmp(token[0],"CIRCLE") == 0) || (strcmp(token[0],"PRISM") == 0) || (strcmp(token[0],"CYLINDER") == 0)))
{
cout << token[0] << " invalid object" << endl;
break;
}
else if(strcmp(token[0], "SQUARE")==0)
{
const Square* const s = new Square(token);
shapes.push_back(s);
break;
}
else if(strcmp(token[0], "RECTANGLE") == 0)
{
const Rectangle* const r = new Rectangle(token);
shapes.push_back(r);
break;
}
else if(strcmp(token[0], "CIRCLE") == 0)
{
const Circle* const c = new Circle(token);
shapes.push_back(c);
break;
}
else if(strcmp(token[0], "CUBE") == 0)
{
const Cube* const c = new Cube(token);
shapes.push_back(c);
break;
}
else if(strcmp(token[0], "PRISM") == 0)
{
const Prism* const p = new Prism(token);
shapes.push_back(p);
break;
}
else if(strcmp(token[0], "CYLINDER") == 0)
{
const Cylinder* const c = new Cylinder(token);
shapes.push_back(c);
break;
}
}
}
fin.close();
for(it = shapes.begin(); it != shapes.end(); it++)
{
(*it)->print(cout);
}
vector<const Shape*>::iterator it2;
for(it2 = shapes.begin(); it2 != shapes.end(); it2++)
{
delete *it2;
}
}
how to divide this code???
Explanation / Answer
// Save as GeometryHomework.h
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
//#include "GeometryHomework.h"
#include <fstream>
using std::ifstream;
#include <iomanip>
using std::setprecision;
using std::ios;
class Shape
{
public:
Shape(const char* const []);
virtual void print(ostream&) const = 0;
virtual ~Shape() {}
protected:
const double Dimention1;
const double Dimention2;
const double Dimention3;
};
class Square : public Shape
{
public:
Square(const char* const token[]):Shape(token){}
void print(ostream& ) const;
};
class Rectangle : public Shape
{
public:
Rectangle(const char* const token[]):Shape(token){}
void print(ostream& ) const;
};
class Circle : public Shape
{
public:
Circle(const char* const token[]):Shape(token){}
void print(ostream& ) const;
};
class Cube : public Square
{
public:
Cube(const char* const token[]):Square(token){}
void print(ostream& ) const;
};
class Prism : public Rectangle
{
public:
Prism(const char* const token[]):Rectangle(token){}
void print(ostream&) const;
};
class Cylinder : public Circle
{
public:
Cylinder(const char* const token[]):Circle(token){}
void print(ostream& ) const;
};
// SAve as GeometryHomework.cpp
#include<iostream>
#include<iomanip>
#include<cmath>
#include "GeometryHomework.h"
using namespace std;
ostream& reset(ostream& out)
{
out.unsetf(ios::fixed|ios::showpoint);
out << setprecision(6);
return out;
}
ostream& set(ostream& out)
{
out.setf(ios::fixed|ios::showpoint);
out << setprecision(2);
return out;
}
Shape::Shape(const char* const token[]):Dimention1((token[1] == 0 ? 0.0 : atof(token[1]))), Dimention2((token[2] == 0 ? 0.0 : atof(token[2]))), Dimention3((token[3] == 0 ? 0.0 : atof(token[3]))){}
void Square::print(ostream& out) const
{
double area, perimeter;
area=pow(Dimention1, 2);
perimeter=4*(Dimention1);
out<<reset;
out<<"SQUARE side="<<Dimention1;
out<<set;
out<<" area="<<area<<" perimeter="<<perimeter<<endl;
}
void Rectangle::print(ostream& out) const
{
double area, perimeter;
area=(Dimention1)*(Dimention2);
perimeter=2*(Dimention1)+2*(Dimention2);
out<<reset;
out<<"RECTANGLE length="<<(Dimention1)<<" width="<<(Dimention2);
out<<set;
out<<" area="<<area<<" perimeter="<<perimeter<<endl;
}
void Circle::print(ostream& out) const
{
double area, circumference;
area=4*atan(1.0)*pow((Dimention1), 2);
circumference=2*4*atan(1.0)*(Dimention1);
out<<reset;
out<<"CIRCLE radius="<<(Dimention1);
out<<set;
out<<" area="<<area<<" circumference="<<circumference<<endl;
}
void Cube::print(ostream& out) const
{
double surface,volume;
volume=pow(Dimention1, 3);
surface=6*pow(Dimention1, 2);
out<<reset;
out<<"CUBE side="<<Dimention1;
out<<set;
out<<" surface area="<<surface<<" volume="<<volume<<endl;
}
void Prism::print(ostream& out) const
{
double surface,volume;
volume=(Dimention1)*(Dimention2)*(Dimention3);
surface=2*(Dimention1)*(Dimention2)+2*(Dimention2)*(Dimention3)+2*(Dimention3)*(Dimention1);
out<<reset;
out<<"PRISM length="<<(Dimention1)<<" width="<<(Dimention2)<<" height="<<(Dimention3);
out<<set;
out<<" surface area="<<surface<<" volume="<<volume<<endl;
}
void Cylinder::print(ostream& out) const
{
double surface,volume;
volume=4*atan(1.0)*pow((Dimention1), 2)*(Dimention2);
surface=2*4*atan(1.0)*pow((Dimention1), 2)+2*4*atan(1.0)*(Dimention1)*(Dimention2);
out<<reset;
out<<"CYLINDER radius="<<(Dimention1)<<" height="<<(Dimention2);
out<<set;
out<<" surface area="<<surface<<" volume="<<volume<<endl;
}
// Save as main.cpp
#include <iostream>
using std::cout;
using std::endl;
using std::ostream;
#include "GeometryHomework.h"
#include <fstream>
using std::ifstream;
#include <iomanip>
using std::setprecision;
using std::ios;
#include <vector>
using std::vector;
#include <cstdlib>
#include <cstring>
#include <cmath>
const int MAX_CHARS_PER_LINE = 200;
const int MAX_TOKENS_PER_LINE = 4;
const char* const DELIMITER = " ";
int main()
{
cout<<"Programmer: Jaeyoung Paik ";
cout<<"Description: This program calculate shape ";
cout<<"(sqare,rectangle,circle,cube,prism,cylinder) ";
cout<<"using the input data ";
cout<<endl;
vector< const Shape* >::iterator it;
vector<const Shape*> shapes;
int i;
int d=0;
ifstream fin;
fin.open("geo.txt");
if (!fin.good())
return 1;
while (!fin.eof())
{
char buf[MAX_CHARS_PER_LINE];
fin.getline(buf, MAX_CHARS_PER_LINE);
int n=0;
const char* token[MAX_TOKENS_PER_LINE] = {0};
token[0] = strtok(buf, DELIMITER);
if (token[0])
{
for (n = 1; n < MAX_TOKENS_PER_LINE; n++)
{
token[n] = strtok(0, DELIMITER);
if (!token[n]) break;
}
}
for (i = 0; i < n; i++)
{
if (!((strcmp(token[0],"SQUARE") == 0) || (strcmp(token[0],"RECTANGLE") == 0) || (strcmp(token[0],"CUBE") == 0) || (strcmp(token[0],"CIRCLE") == 0) || (strcmp(token[0],"PRISM") == 0) || (strcmp(token[0],"CYLINDER") == 0)))
{
cout << token[0] << " invalid object" << endl;
break;
}
else if(strcmp(token[0], "SQUARE")==0)
{
const Square* const s = new Square(token);
shapes.push_back(s);
break;
}
else if(strcmp(token[0], "RECTANGLE") == 0)
{
const Rectangle* const r = new Rectangle(token);
shapes.push_back(r);
break;
}
else if(strcmp(token[0], "CIRCLE") == 0)
{
const Circle* const c = new Circle(token);
shapes.push_back(c);
break;
}
else if(strcmp(token[0], "CUBE") == 0)
{
const Cube* const c = new Cube(token);
shapes.push_back(c);
break;
}
else if(strcmp(token[0], "PRISM") == 0)
{
const Prism* const p = new Prism(token);
shapes.push_back(p);
break;
}
else if(strcmp(token[0], "CYLINDER") == 0)
{
const Cylinder* const c = new Cylinder(token);
shapes.push_back(c);
break;
}
}
}
fin.close();
for(it = shapes.begin(); it != shapes.end(); it++)
{
(*it)->print(cout);
}
vector<const Shape*>::iterator it2;
for(it2 = shapes.begin(); it2 != shapes.end(); it2++)
{
delete *it2;
}
}
Related Questions
Navigate
Integrity-first tutoring: explanations and feedback only — we do not complete graded work. Learn more.