Добавил:
vvrstcnho
Рад, если кому-то помог
Опубликованный материал нарушает ваши авторские права? Сообщите нам.
Вуз:
Предмет:
Файл:Лабораторные работы С++ (для ИВТ) / Готовые лабы С++ / Лаба5 / Laba 5 (8)
.cpp#include <iostream>
#include <locale>
#include <cmath>
using namespace std;
class Point {
protected:
double x, y;
public:
Point(double x_val = 0, double y_val = 0) : x(x_val), y(y_val) {}
virtual void draw() const {
cout << "(" << x << ", " << y << ")";
}
virtual void move(double dx, double dy) {
x += dx;
y += dy;
}
// Методы доступа
double getX() const { return x; }
double getY() const { return y; }
void setX(double x_val) { x = x_val; }
void setY(double y_val) { y = y_val; }
virtual ~Point() {}
};
class Segment : public Point {
protected:
Point endPoint;
public:
Segment(double x1 = 0, double y1 = 0, double x2 = 1, double y2 = 1)
: Point(x1, y1), endPoint(x2, y2) {}
void draw() const override {
cout << "Отрезок "; Point::draw();
cout << " - "; endPoint.draw(); cout << endl;
}
double length() const {
return sqrt(pow(endPoint.getX() - x, 2) + pow(endPoint.getY() - y, 2));
}
};
class Parallelogram : public Segment {
protected:
Point point3, point4;
public:
Parallelogram(double x1, double y1, double x2, double y2,
double x3, double y3, double x4, double y4)
: Segment(x1, y1, x2, y2), point3(x3, y3), point4(x4, y4) {}
void draw() const override {
cout << "Параллелограмм: "; Point::draw(); cout << ", ";
endPoint.draw(); cout << ", "; point3.draw(); cout << ", ";
point4.draw(); cout << endl;
}
void fill() const {
cout << "Закрашиваем параллелограмм" << endl;
}
virtual double area() const {
// Упрощённый расчёт площади
return length() * 2;
}
};
class Rectangle : public Parallelogram {
public:
Rectangle(double x, double y, double width, double height)
: Parallelogram(x, y, x + width, y, x + width, y + height, x, y + height) {}
void draw() const override {
cout << "Прямоугольник: "; Point::draw();
cout << " размером " << length() << "x" << (point3.getY() - y) << endl;
}
double area() const override {
return length() * (point3.getY() - y);
}
};
class Square : public Rectangle {
public:
Square(double x, double y, double side)
: Rectangle(x, y, side, side) {}
void draw() const override {
cout << "Квадрат: "; Point::draw();
cout << " со стороной " << length() << endl;
}
};
class Rhombus : public Parallelogram {
public:
Rhombus(double x, double y, double diagonal1, double diagonal2)
: Parallelogram(x, y - diagonal2/2, x + diagonal1/2, y,
x, y + diagonal2/2, x - diagonal1/2, y) {}
void draw() const override {
cout << "Ромб с центром в "; Point::draw(); cout << endl;
}
double area() const override {
return (length() * 2) * 0.5; // Упрощённо
}
};
int main() {
setlocale(LC_ALL, "ru_RU.UTF-8");
Point point(0, 0);
Segment segment(0, 0, 3, 0);
Square square(0, 0, 4);
Rectangle rectangle(0, 0, 4, 3);
Rhombus rhombus(0, 0, 6, 4);
Parallelogram parallelogram(0, 0, 4, 0, 5, 3, 1, 3);
point.draw(); cout << endl;
segment.draw();
square.draw();
rectangle.draw();
rhombus.draw();
parallelogram.draw();
cout << "Площадь квадрата: " << square.area() << endl;
cout << "Площадь прямоугольника: " << rectangle.area() << endl;
return 0;
}
Соседние файлы в папке Лаба5
