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

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;
}
}