Skip to content

irvasek/cpp_labs

Folders and files

NameName
Last commit message
Last commit date

Latest commit

 

History

3 Commits
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 

Repository files navigation

A1 Геометрические фигуры

Все числовые данные в этой работе должны быть представлены значениями с плавающей запятой.

  1. Создать файл base-types.hpp, содержащий определения следующих структур:
    • point_t, представляющую собой точку на плоскости, координаты должны храниться в полях x и y.
    • rectangle_t, описывающую прямоугольник шириной width и высотой height с центром в точке pos.
  2. Создать файл shape.hpp, содержащий определение абстрактного класса Shape. Этот класс должен предоставлять следующие методы:
    • getArea вычисление площади
    • getFrameRect получение ограничивающего прямоугольника для фигуры (см. типы из предыдущего пункта), стороны ограничивающего прямоугольника всегда параллельны осям
    • move перемещение центра фигуры, 2 варианта: в конкретную точку и в виде смещений по осям абсцисс и ординат
  3. Реализовать классы Rectangle и Circle в файлах rectangle.hpp, rectangle.cpp, circle.hpp и circle.cpp соответственно.
  4. Продемонстрировать правильную работу классов простой программой. Демонстрация должна включать полиморфное применение классов.

Дополнительное задание

Добавить поддержку треугольников. В качестве центра треугольника здесь и далее следует использо- вать центр тяжести, так как его вычисление наиболее просто.

A2 Масштабирование фигур

  1. Перенесите классы фигур в отдельное пространство имен. Имя этого пространства должно быть выбрано совпадающим с фамилией студента в нижнем регистре (соответственно, оно совпадает с частью имени каталога с работами до точки). Это пространство имен должно сохраняться для всех оставшихся работ в этом семестре.
  2. Добавить в класс фигуры метод scale(), осуществляющий изотропное масштабирование фигуры относительно ее центра с указанным коэффициентом. Если в первой работе был реализован треугольник, масштабирование необходимо реализовать и для него.
  3. Написать тесты, проверяющие:
    • неизменность ширины и высоты, а также площади фигуры при перемещениях;
    • квадратичное изменение площади фигуры при масштабировании;
    • наличие и обработку некорректных параметров в функциях;

Для написания тестов необходимо создать файл test-main.cpp, в котором реализовать тесты. Созданная ранее демонстрационная программа должна быть доработана для демонстрации новых возможностей.

A3 Составные фигуры

  1. Расширить реализацию работы 2 путем добавления класса CompositeShape, хранящего список из про- извольных фигур внутри массива. В этой работе не допускается использование стандартных контейнеров, необходимо самостоятельно реализовать хранение множества фигур на базе динамического массива. Класс должен быть размещен в файлах composite-shape.hpp и composite-shape.cpp.
  2. Написать набор тестов, проверяющий корректную работу созданного класса. Необходимо помнить,что может потребоваться реализация дополнительных специальных методов в классе для обеспечения корректной работы.
  3. Для CompositeShape масштабирование и перемещение работают относительно центра этого объекта, за который принимается центр ограничивающего прямоугольника.
  4. Созданная ранее демонстрационная программа должна быть доработана для демонстрации новых возможностей.

A4 Обработка фигур

Расширить реализацию работы 3:

  1. Добавить поддержку вращения фигур на заданный угол в градусах, положительное направление — против часовой стрелки, центр поворота совпадает с центром фигуры. Необходимо помнить, что ограничивающий прямоугольник сохраняет параллельность сторон осям координат, а поворот CompositeShape также содержит перемещение элементов. Метод должен называться rotate(). Тем, кто реализовывал в первой работе поддержку треугольников, необходимо поддержать вращение треугольников тоже.
  2. Написать разбиение списка фигур (Rectangle, Circle, CompositeShape и, если был реализован, Triangle), представленного в виде единой фигуры, по слоям в порядке добавления:
    • фигуры, которые не перекрываются ограничивающими прямогольниками, находятся на одном слое;
    • фигура, перекрывающаяся с другой, находится на следующем слое если она указана в списке после той фигуры, которую она перекрывает;
    • составные фигуры, добавленные в фигуру, подвергнутую разбиению, необходимо рассматривать как единое целое и обрабатывать ее ограничивающий прямоугольник, а не ее составляющие.

Результаты разбиения представить в виде матрицы, где строки представляют собой слои, в которых указаны фигуры. Матрицу реализовать самостоятельно на базе динамической памяти, данные должны храниться в 1 блоке (недопустимо создавать массив указателей на слои). Количество строк соответствует количеству слоев, количество столбцов — максимальному количеству фигур в одном слое.

  1. Реализовать тесты, демонстрирующие корректную работу функции разбиения. Созданная ранее демонстрационная программа должна быть доработана для демонстрации новых возможностей.

About

No description, website, or topics provided.

Resources

Stars

Watchers

Forks

Releases

No releases published

Packages

No packages published

Languages