Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > Работа для программиста > Фриланс
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 02.03.2018, 15:53   #1
Кристина1998
Форумчанин
 
Регистрация: 01.11.2016
Сообщений: 110
По умолчанию Си++ - Доработать программу: добавить в коллекцию ромб

Кто может написать за 150 рублей?
Доработать программу: добавить в коллекцию ромб.Ромб должен располагаться в точках 2,3,7,8 (Для этой фигуры нужно будет определить подходящее место в иерархии классов и написать необходимые функции-члены. Функции-члены, использование которых не предполагается, можно определить так, чтобы они были недоступны. Разработанной фигурой нужно дополнить картинку в указанных в варианте позициях. Позиция 1 обозначает галстук или воротник, 2 и 3 — бакенбарды, 4 и 5 — уши, 6 — кокарду, 7 и 8— рога, 9 — нос, 10 и 11 — глаза, 12 — шляпу в целом . Возможно, некоторые из фигур нужно будет повернуть или отразить. Для примыкания фигур должны использоваться их габаритные точки.)
Код:
/Файл point.h
#ifndef POINT_H
#define POINT_H
#include <cstdint>
class Point //Точка на экране
{
public:
Point() : _x(0), _y(0) { };
Point(std::uint32_t x, std::uint32_t y) : _x(x), _y(y) {}
std::uint32_t getX() const { return _x; }
std::uint32_t getY() const { return _y; }
void setX(std::uint32_t val) { _x = val; }
void setY(std::uint32_t val) { _y = val; }
protected:
std::uint32_t _x, _y;
};
#endif // POINT_H
//Файл screen.h
#ifndef SCREEN_H
#define SCREEN_H
#include "point.h"
#include <vector>
#include <iostream>
class Screen
{
public:
enum class Pixel : char
{
WHITE = ' ',
BLACK = '*'
};
Screen(std::uint32_t xSize, std::uint32_t ySize)
{
_xSize = xSize;
_ySize = ySize;
_screen.reserve(ySize);
for (size_t i = 0; i < ySize; i++)
_screen.emplace_back(std::vector<Pixel>(xSize, Pixel::WHITE));
}
void putLine(const Point& a, const Point& b)
{
putLine(a.getX(), a.getY(), b.getX(), b.getY());
}
void putLine(std::uint32_t x0, std::uint32_t y0, std::uint32_t x1, std::uint32_t y1)
{
std::int32_t dx = 1;
std::int32_t a = x1 - x0;
if (a < 0) { dx = -1; a = -a; }
std::int32_t dy = 1;
std::int32_t b = y1 - y0;
if (b < 0) { dy = -1; b = -b; }
std::int32_t two_a = 2 * a;
std::int32_t two_b = 2 * b;
std::int32_t xcrit = -b + two_a;
std::int32_t eps = 0;
while (true)
{
putPoint(x0, y0);
if (x0 == x1 && y0 == y1) break;
if (eps <= xcrit)
{
x0 += dx;
eps += two_b;
}
if (eps >= a || a < b)
{
y0 += dy;
eps -= two_a;
}
}
}
void putPoint(const Point& p)
{
_screen[p.getX()][p.getY()] = Pixel::BLACK;
}
void putPoint(const std::uint32_t x, const std::uint32_t y)
{
_screen[x][y] = Pixel::BLACK;
}
void clear()
{
for (size_t i = 0; i < _ySize; ++i)
for (size_t j = 0; j < _xSize; ++j)
_screen[i][j] = Pixel::WHITE;
}
void draw() const
{
for (size_t i = 0; i < _ySize; ++i)
{
for (size_t j = 0; j < _xSize; ++j)
std::cout << (char)_screen[i][j];
std::cout << std::endl;
}
}
private:
std::uint32_t _xSize;
std::uint32_t _ySize;
std::vector<std::vector<Pixel> > _screen;
};
#endif // SCREEN_H
// Файл shape.h
#ifndef SHAPE_H
#define SHAPE_H
#include "screen.h"
class Shape
{
public:
virtual void draw(Screen* screen) const = 0;
virtual void move(Point p) = 0;
virtual Point getLeftTop() const = 0;
virtual Point getRightTop() const = 0;
virtual Point getLeftBottom() const = 0;
virtual Point getRightBottom() const = 0;
virtual ~Shape() {}
};
#endif // SHAPE_H
// Файл rotatable.h
#ifndef ROTATABLE_H
#define ROTATABLE_H
class Rotatable { //Фигуры, пригодные к повороту
public:
virtual void rotateLeft() = 0; //Повернуть влево
virtual void rotateRight() = 0; //Повернуть вправо
};
#endif // ROTATABLE_H
// Файл reflectable.h
#ifndef REFLECTABLE_H
#define REFLECTABLE_H
class reflectable { // Фигуры, пригодные к зеркальному отражению
public:
virtual void flipHorisontally() = 0; // Отразить горизонтально
virtual void flipVertically() = 0; // Отразить вертикально
};
#endif // REFLECTABLE_H
// Файл line.h
#ifndef LINE_H
#define LINE_H
#include "shape.h"
#include "screen.h"
#include <algorithm>
class Line : public Shape
{
public:
Line(const Point& a, const Point& b)
{
_a = a;
_b = b;
}
Line(unsigned int x0, unsigned int y0, unsigned int x1, unsigned int y1)
{
_a = Point(x0, y0);
_b = Point(x1, y1);
}
Line(const Line& source)
{
_a = source._a;
_b = source._b;
}
void draw(Screen* screen) const
{
screen->putLine(_a.getY(), _a.getX(), _b.getY(), _b.getX());
}
void move(Point p)
{
_a.setX(_a.getX() + p.getX()); _a.setY(_a.getY() + p.getY());
_b.setX(_b.getX() + p.getX()); _b.setY(_b.getY() + p.getY());
}
Point getLeftTop() const
{
return Point(std::min(_a.getX(), _b.getX()), std::min(_a.getY(), _b.getY()));
}
Point getRightTop() const
{
return Point(std::max(_a.getX(), _b.getX()), std::min(_a.getY(), _b.getY()));
}
Point getLeftBottom() const
{
return Point(std::min(_a.getX(), _b.getX()), std::max(_a.getY(), _b.getY()));
}
Point getRightBottom() const
{
return Point(std::max(_a.getX(), _b.getX()), std::max(_a.getY(), _b.getY()));
}
Point getFirstPoint() const
{
return _a;
}
Point getSecondPoint() const
{
return _b;
}
protected:
Point _a;
Point _b;
};
#endif // LINE_H
// Файл cross.h
#ifndef CROSS_H
#define CROSS_H
#include "shape.h"
#include "line.h"
//Крест
class Cross : public virtual Shape
{
public:
Cross(const Point& left, const Point& top)
{
Point p1, p2;
Point p3, p4;
p1 = left;
p2 = Point(top.getX() + top.getX() - left.getX(), left.getY());
p3 = top;
p4 = Point(top.getX(), left.getY() - top.getY() + left.getY());
_first = new Line(p1, p2);
_second = new Line(p3, p4);
}
virtual void draw(Screen* screen) const
{
_first->draw(screen);
_second->draw(screen);
}
virtual void move(Point p)
{
_first->move(p);
_second->move(p);
}
Point getLeftTop() const
{
return _first->getLeftTop();
}
Point getRightTop() const
{
return _second->getRightTop();
}
Point getLeftBottom() const
{
return _second->getLeftBottom();
}
Point getRightBottom() const
{
return _first->getRightBottom();
}
virtual ~Cross()
{
delete _first;
delete _second;
}
protected:
Line* _first;
Line* _second;
};
#endif // CROSS_H
//Файл square.h
#ifndef SQUARE_H
#define SQUARE_H
#include "line.h"
class Square : public virtual Shape
{
public:
Square(const Point& leftTop, const Point& rightBottom)
{
_left = new Line(leftTop, Point(leftTop.getX(), rightBottom.getY()));
_top = new Line(leftTop, Point(rightBottom.getX(), leftTop.getY()));
_right = new Line(Point(rightBottom.getX(), leftTop.getY()), rightBottom);
_bottom = new Line(Point(leftTop.getX(), rightBottom.getY()), rightBottom);
}


}
Изображения
Тип файла: jpg ва.jpg (15.3 Кб, 77 просмотров)
Кристина1998 вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Доработать программу ozziedejavu Помощь студентам 1 15.12.2017 15:29
Добавить элемент в коллекцию Juli174 C# (си шарп) 1 11.12.2013 13:45
Доработать программу. VS С++ N-site Фриланс 0 05.06.2013 20:24
С квадратной матрицы получить ромб путем отсечение углов по n элементов. Элементы, которыми заполнено ромб переписать в вых. файл Juliks Паскаль, Turbo Pascal, PascalABC.NET 10 29.12.2012 20:50
графика. ромб. оч странный ромб aka_faith Паскаль, Turbo Pascal, PascalABC.NET 19 11.06.2009 02:57