Ім'я файлу: Лаб 4 АПР.docx
Розширення: docx
Розмір: 7кб.
Дата: 24.11.2021
скачати

МИНИСТЕРСТВО ОБРАЗОВАНИЯ И НАУКИ УКРАИНЫ

ХАРЬКОВСКИЙ НАЦИОНАЛЬНЫЙ УНИВЕРСИТЕТ

РАДИОЭЛЕКТРОНИКИ

Кафедра ИИ

Отчет

о выполнении практического задания 5

по дисциплине «АПР»

Выполнил:

ст. гр. IТШI-21-2

Ляхов Максим Сергійович

Принял:

Степин A.С.

2020

Мета роботи: Вивчення Class у мовi С++ на наслідування. Отримання

практичних навичок використання ООП при вирішенні практичних задач.

Завдання: Скласти опис класу фігур, в нього включити такі геометричні фігури як, квадрат, прямокутник, коло, додати можливість розрахунку сторін маючи тільки параметр лівої нижньої точки фігури (у кола точка старту центр). При цьому потрібно реалізувати спадкування класів, поля в класі повинні бути закритими, робота з полями класів повинна бути реалізована через методи. Додати методи з можливістю розрахунку накладення фігур (зіткнення в системі координат), в залежності від вхідних параметрів. Користувач повинен вводити параметри фігури і опорну точку, на висновок він отримує її координати. Після того як всі фігури введені він може перевірити їх на накладення однієї на іншу.

#include

class Figure {

protected:

double x, y;

public:

double getX() {

return x;

}

double getY() {

return y;

}

};

class Rectangle : public Figure {

private:

double width, height;

public:

Rectangle(double rx, double ry, double w, double h) {

width = w;

height = h;

x = rx;

y = ry;

}

void print() {

std::cout << x << ' ' << y << ' ' << width << ' ' << height << '\n';

}

double getWidth() {

return width;

}

double getHeight() {

return height;

}

};

class Square : public Figure {

private:

double c;

public:

Square(double sx, double sy, double a) {

x = sx;

y = sy;

c = a;

}

void print() {

std::cout << x << ' ' << y << ' ' << c << '\n';

}

double getSide() {

return c;

}

bool intersect(Rectangle& rectangle) {

double a = rectangle.getWidth();

double b = rectangle.getHeight();

double r1x = rectangle.getX();

double r1y = rectangle.getY();

double r2x = r1x + a;

double r2y = r1y + b;

double s1x = x;

double s1y = y;

double s2x = x + c;

double s2y = y + c;

if (r1x > s2x || r1y > s2y || r2x < s1x || r2y < s1y) {

return false;

}

else return true;

}

};

class Circle : public Figure {

private:

double radius;

bool overlap(double a, double b, double i, double j) {

double xlt = i;

double ylt = j + b;

double xlb = i;

double ylb = j;

double xrt = i + a;

double yrt = j + b;

double xrb = i + a;

double yrb = j;

if (x < i) {

if (y > ylt) {

return (y - ylt) * (y - ylt) + (x - xlt) * (x - xlt) <= radius *

radius;

}

else if (y < ylb) {

return (y - ylb) * (y - ylb) + (x - xlb) * (x - xlb) <= radius *

radius;

}

else {

return xlt - x <= radius;

}

}

else if (x > xrt) {

if (y > yrt) {

return (y - yrt) * (y - yrt) + (x - xrt) * (x - xrt) <= radius *

radius;

}

else if (y < yrb) {

return (y - yrb) * (y - yrb) + (x - xrb) * (x - xrb) <= radius *

radius;

}

else {

return x - xrb <= radius;

}

}

else if (y > ylt) {

return y - ylt <= radius;

}

else if (y < ylb) {

return ylb - y <= radius;

}

return true;

}

public:

Circle(double cx, double cy, double r) {

radius = r;

x = cx;

y = cy;

}

void print() {

std::cout << x << ' ' << y << ' ' << radius << '\n';

}

bool intersect(Square& square) {

return overlap(square.getSide(), square.getSide(), square.getX(),

square.getY());

}

bool intersect(Rectangle& rectangle) {

return overlap(rectangle.getWidth(), rectangle.getHeight(), rectangle.getX(),

rectangle.getY());

}

};

int32_t main()

{

std::ios_base::sync_with_stdio(false);

setlocale(LC_ALL, "Russian");

std::cout << "Введите координаты опорной точки и длинну стороны квадрата\n";

double a, b, x, y;

std::cin >> x >> y >> a;

Square square(x, y, a);

square.print();

std::cout << "Введите координаты опорной точки, ширину прямоугольника и высоту

прямоугольника\n";

std::cin >> x >> y >> a >> b;

Rectangle rectangle(x, y, a, b);

rectangle.print();

std::cout << "Введите координаты опорной точки и радиус круга\n";

std::cin >> x >> y >> a;

Circle circle(x, y, a);

circle.print();

if (circle.intersect(square)) {

std::cout << "Круг и квадрат пересекаются\n";

}

else {

std::cout << "Круг и квадрат не пересекаются\n";

}

if (circle.intersect(rectangle)) {

std::cout << "Круг и прямоугольник пересекаются\n";

}

else {

std::cout << "Круг и прямоугольник не пересекаются\n";

}

if (square.intersect(rectangle)) {

std::cout << "Квадрат и прямоугольник пересекаются\n";

}

else {

std::cout << "Квадрат и прямоугольник не пересекаются\n";

}

return 0;

}

Висновки:

Я вивчення class у мовi С++ та наслідування. Отримав практичні навички

використання ООП при вирішенні практичних задач.
скачати

© Усі права захищені
написати до нас