Linkin_Park

oop lab2

Oct 5th, 2017
76
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
C++ 6.72 KB | None | 0 0
  1.  
  2. #include <cstdio>
  3. #include <string>
  4. #include <iostream>
  5. #include "vld.h"
  6.  
  7. using namespace std;
  8.  
  9. struct Coordinate {
  10.     int x, y;
  11. };
  12.  
  13. class ColoredPoint {
  14. private:
  15.     Coordinate coordinate;
  16.  
  17. protected:
  18.     string color;
  19.  
  20. public:
  21.     ColoredPoint() {
  22.         this->coordinate = { NULL, NULL };
  23.     }
  24.  
  25.     ColoredPoint(int _x, int _y) {
  26.         this->coordinate = { _x, _y };
  27.     }
  28.  
  29.     string getColor() {
  30.         return this->color;
  31.     }
  32.  
  33.     virtual void setColor(string _color) {
  34.         this->color = _color;
  35.     }
  36.  
  37.     Coordinate getCoordinates() {
  38.         return this->coordinate;
  39.     };
  40.  
  41.     virtual void setCoordinates(Coordinate _coordinate) {
  42.         this->coordinate = _coordinate;
  43.     };
  44. };
  45.  
  46. class Line : public ColoredPoint {
  47. private:
  48.     Coordinate coordinates[2];
  49.  
  50. public:
  51.     void setCoordinates(Coordinate _coordinates[2]) {
  52.         this->coordinates[0] = _coordinates[0];
  53.         this->coordinates[1] = _coordinates[1];
  54.     }
  55.  
  56.     Coordinate* getCoordinates() {
  57.         return this->coordinates;
  58.     }
  59. };
  60.  
  61. class Polyline : public ColoredPoint {
  62. private:
  63.     Coordinate *coordinates;
  64.     int pointsQty;
  65.  
  66.     void createCoordinates(int _pointsQty) {
  67.         // Метод, выделяющий память для кривой линии
  68.         if (pointsQty) {
  69.             delete[] this->coordinates;
  70.         }
  71.  
  72.         this->pointsQty = _pointsQty;
  73.         this->coordinates = new Coordinate[_pointsQty];
  74.     }
  75.  
  76. public:
  77.     Polyline() {
  78.         this->coordinates = NULL;
  79.         this->pointsQty = NULL;
  80.     }
  81.  
  82.     void setCoordinates(Coordinate *_coordinates, int coordinatesQty) {
  83.         // Метод, устанавливающий значение всех координат кривой линии
  84.        
  85.         createCoordinates(coordinatesQty);
  86.  
  87.         for (int i = 0; i < coordinatesQty; i++) {
  88.             this->coordinates[i] = _coordinates[i];
  89.         }
  90.     }
  91.  
  92.     Coordinate* getCoordinates() {
  93.         // Метод, возвращающий значение всех координат кривой линии
  94.         return this->coordinates;
  95.     }
  96.  
  97.     int getPointsQty() {
  98.         // Метод возвращающий количество точек в кривой линии
  99.         return pointsQty;
  100.     }
  101.  
  102.     ~Polyline() {
  103.         delete[] this->coordinates;
  104.     }
  105. };
  106.  
  107. class Picture {
  108. private:
  109.     int coloredPointsQty, linesQty, polylinesQty;
  110.     ColoredPoint *coloredPoints;
  111.     Line *lines;
  112.     Polyline *polylines;
  113.  
  114. public:
  115.     Picture(int _coloredPointsQty, int _linesQty, int _polylinesQty) {
  116.         this->coloredPointsQty = _coloredPointsQty;
  117.         this->linesQty = _linesQty;
  118.         this->polylinesQty = _polylinesQty;
  119.  
  120.         this->coloredPoints = new ColoredPoint[this->coloredPointsQty];
  121.         this->lines = new Line[this->linesQty];
  122.         this->polylines = new Polyline[this->polylinesQty];
  123.     }
  124.  
  125.     void inputColoredPoints() {
  126.         // Ввод всех точек
  127.         for (int i = 0; i < this->coloredPointsQty; i++) {
  128.             cout << "Input colored point №" << i + 1 << endl;
  129.             Coordinate temp;
  130.             cout << "x: " << endl;
  131.             cin >> temp.x;
  132.             cout << "y: " << endl;
  133.             cin >> temp.y;
  134.             this->coloredPoints[i].setCoordinates(temp);
  135.  
  136.             string color;
  137.             cout << "color: " << endl;
  138.             cin >> color;
  139.             this->coloredPoints[i].setColor(color);
  140.         }
  141.     }
  142.  
  143.     void inputLines() {
  144.         // Ввод всех линий
  145.         for (int i = 0; i < this->linesQty; i++) {
  146.             cout << "Input line " << i + 1 << endl
  147.                 << "Input point 1: " << endl;
  148.             Coordinate temp[2];
  149.             cout << "x1: " << endl;
  150.             cin >> temp[0].x;
  151.             cout << "y1: " << endl;
  152.             cin >> temp[0].y;
  153.  
  154.             cout << "Input point 2: " << endl;
  155.             cout << "x2: " << endl;
  156.             cin >> temp[1].x;
  157.             cout << "y2: " << endl;
  158.             cin >> temp[1].y;
  159.             this->lines[i].setCoordinates(temp);
  160.  
  161.             string color;
  162.             cout << "Input color: " << endl;
  163.             cin >> color;
  164.             this->lines[i].setColor(color);
  165.         }
  166.     }
  167.  
  168.     void inputPolylines() {
  169.         // Ввод всех кривых линий
  170.         for (int i = 0; i < this->polylinesQty; i++) {
  171.             cout << "Input polyline " << i + 1 << endl
  172.                 << "Input polyline points qty" << endl;
  173.             int pointsQty;
  174.             cin >> pointsQty;
  175.             Coordinate *temp = new Coordinate[pointsQty];
  176.  
  177.             for (int i = 0; i < pointsQty; i++) {
  178.                 cout << "Input point " << i << ":" << endl
  179.                     << "x" << i << ":" << endl;
  180.                 cin >> temp[i].x;
  181.                 cout << "y" << i << ":" << endl;
  182.                 cin >> temp[i].y;
  183.             }
  184.  
  185.             this->polylines[i].setCoordinates(temp, pointsQty);
  186.  
  187.             cout << "Input color: " << endl;
  188.             string color;
  189.             cin >> color;
  190.             this->polylines[i].setColor(color);
  191.  
  192.             delete[] temp;     
  193.         }
  194.     }
  195.  
  196.     void inputPicture(){
  197.         // Ввод картины
  198.         this->inputColoredPoints();
  199.         this->inputLines();
  200.         this->inputPolylines();
  201.     }
  202.  
  203.    
  204.     void outputColoredPoints() {
  205.         // Вывод всех точек
  206.         if (!this->coloredPointsQty) {
  207.             cout << "There's no colored points" << endl;
  208.             return;
  209.         }
  210.  
  211.         cout << endl << "Colored Points: " << endl;
  212.  
  213.         for (int i = 0; i < this->coloredPointsQty; i++) {
  214.             Coordinate temp = this->coloredPoints[i].getCoordinates();
  215.             string color = this->coloredPoints[i].getColor();
  216.             cout << "Colored Point " << i + 1 << ": (" << temp.x << ", "
  217.                 << temp.y << ") color: " << color << endl;
  218.         }
  219.         cout << endl;
  220.     }
  221.    
  222.     void outputLines() {
  223.         // Вывод всех линий
  224.         if (!this->linesQty) {
  225.             cout << "There's no lines" << endl;
  226.             return;
  227.         }
  228.  
  229.         cout << endl << "Lines: " << endl;
  230.  
  231.         for (int i = 0; i < this->linesQty; i++) {
  232.             Coordinate temp[2];
  233.             temp[0] = this->lines[i].getCoordinates()[0];
  234.             temp[1] = this->lines[i].getCoordinates()[1];
  235.  
  236.             string color = this->lines[i].getColor();
  237.             cout << "Line " << i + 1 << ":" << endl
  238.                 << "Point 1: (" << temp[0].x
  239.                 << ", " << temp[0].y << ") "
  240.                 << "Point 2: (" << temp[1].x << ", "
  241.                 << temp[1].y << ") color: " << color << endl << endl;
  242.         }
  243.         cout << endl;
  244.     }
  245.  
  246.     void outputPolylines() {
  247.         // Вывод всех кривых линий
  248.         if (!this->polylinesQty) {
  249.             cout << "There's no polylines" << endl;
  250.             return;
  251.         }
  252.  
  253.         cout << endl << "Polylines: " << endl;
  254.  
  255.         for (int i = 0; i < this->polylinesQty; i++) {
  256.             int pointsQty = this->polylines[i].getPointsQty();
  257.             cout << "Polyline " << i + 1 << " " << endl;
  258.  
  259.             for (int j = 0; j < pointsQty; j++) {
  260.                 cout << "Point " << j + 1 << ": (" << this->polylines[i].getCoordinates()[j].x
  261.                     << ", " << this->polylines[i].getCoordinates()[j].y << ") " << endl;
  262.             }
  263.  
  264.             string color = this->lines[i].getColor();
  265.             cout << "color: " << color << endl << endl;
  266.         }
  267.         cout << endl;
  268.     }
  269.  
  270.     void outputPicture() {
  271.         cout << "Picture: " << endl << endl;
  272.         this->outputColoredPoints();
  273.         this->outputLines();
  274.         this->outputPolylines();
  275.     }
  276.    
  277.     ~Picture() {
  278.         delete[] this->coloredPoints;
  279.         delete[] this->lines;
  280.         delete[] this->polylines;
  281.     }
  282. };
  283.  
  284. int main() {
  285.     freopen("input.txt", "r", stdin);
  286.     Picture a(3, 3, 3);
  287.     a.inputPicture();
  288.     a.outputPicture();
  289.  
  290.     return 0;
  291. }
Advertisement
Add Comment
Please, Sign In to add comment