Программирование на c++ - Вопросы по С+

Вопрос Программирование на c++

Регистрация
29 Авг 2013
Сообщения
97
Репутация
0
Спасибо
0
Монет
0
Создайте два класса: Rectangle и Circle. Реализуйте дружественную функцию, которая принимает объекты обоих классов и возвращает true, если площадь прямоугольника больше площади круга, и false в противном случае.



Требования:



Класс Rectangle должен иметь поля width и height.



Класс Circle должен иметь поле radius.



Реализуйте методы для вычисления площади для каждого класса.



Используйте дружественную функцию для сравнения площадей.
 
Регистрация
8 Ноя 2013
Сообщения
83
Репутация
-3
Спасибо
0
Монет
0
#include <iostream>
#include <cmath>

// Класс Rectangle
class Rectangle {
private:
double width;
double height;

public:
// Конструктор
Rectangle(double w, double h) : width(w), height(h) {}

// Метод для вычисления площади
double area() const {
return width * height;
}

// Дружественная функция для сравнения площадей
friend bool isRectangleAreaGreater(const Rectangle& rect, const Circle& circ);
};

// Класс Circle
class Circle {
private:
double radius;

public:
// Конструктор
Circle(double r) : radius(r) {}

// Метод для вычисления площади
double area() const {
return M_PI * radius * radius;
}

// Дружественная функция для сравнения площадей
friend bool isRectangleAreaGreater(const Rectangle& rect, const Circle& circ);
};

// Дружественная функция для сравнения площадей
bool isRectangleAreaGreater(const Rectangle& rect, const Circle& circ) {
return rect.area() > circ.area();
}

int main() {
// Создание объектов Rectangle и Circle
Rectangle rect(5.0, 10.0);
Circle circ(4.0);

// Сравнение площадей
if (isRectangleAreaGreater(rect, circ)) {
std::cout << "Площадь прямоугольника больше, чем площадь круга." << std::endl;
} else {
std::cout << "Площадь круга больше или равна площади прямоугольника." << std::endl;
}

return 0;
}
 
Регистрация
7 Дек 2012
Сообщения
78
Репутация
1
Спасибо
0
Монет
0
280098000_e4273df62aa68932d634632dd7e30f1c_800.jpg

.
 
Регистрация
22 Мар 2013
Сообщения
96
Репутация
0
Спасибо
0
Монет
0
Вот пример реализации классов `Rectangle` и `Circle` с дружественной функцией, которая сравнивает их площади:

```cpp
#include <iostream>
#include <cmath>

class Circle;

class Rectangle {
private:
double width;
double height;

public:
Rectangle(double w, double h) : width(w), height(h) {}

double area() const {
return width * height;
}

friend bool compareArea(const Rectangle& rect, const Circle& circ);
};

class Circle {
private:
double radius;

public:
Circle(double r) : radius(r) {}

double area() const {
return M_PI * radius * radius;
}

friend bool compareArea(const Rectangle& rect, const Circle& circ);
};

bool compareArea(const Rectangle& rect, const Circle& circ) {
return rect.area() > circ.area();
}

int main() {
Rectangle rect(5, 10);
Circle circ(3);

if (compareArea(rect, circ)) {
std::cout << "Площадь прямоугольника больше площади круга." << std::endl;
} else {
std::cout << "Площадь круга больше или равна площади прямоугольника." << std::endl;
}

return 0;
}
```

В этом коде мы создаем два класса: `Rectangle` с полями `width` и `height`, и `Circle` с полем `radius`. Каждому классу присвоен метод для вычисления площади. Дружественная функция `compareArea` сравнивает площади указанных фигур и возвращает результат.
 
Регистрация
12 Авг 2013
Сообщения
86
Репутация
0
Спасибо
0
Монет
0
#include <cmath>
#include <iostream>
#include <string>

using namespace std;

class Rectangle;
class Circle;

struct Shape {
using value_t = double;
Shape() = default;
virtual ~Shape() = default;
virtual value_t area() const = 0;
protected:
inline static const value_t pi = 3.1415926535897932;
inline static const value_t eps = 1e-12;
};

class Rectangle : virtual public Shape {
public:
Rectangle()
: width(0), height(0) {}
Rectangle(const value_t w, const value_t h)
: width(w), height(h) {}
value_t area()const override {
return width * height;
}
friend string compare_area(const Rectangle& r, const Circle& c);
friend string compare_area(const Circle& c, const Rectangle& r);
private:
value_t width;
value_t height;

};

class Circle : virtual public Shape {
public:
Circle()
: radius(0) {
}
explicit Circle(const value_t r)
: radius(r) {
}
value_t area()const override {
return pi * radius * radius;
}
friend string compare_area(const Rectangle& r, const Circle& c);
friend string compare_area(const Circle& c, const Rectangle& r);
private:
value_t radius;
};

string compare_area(const Rectangle& r, const Circle& c) {
const auto ds = r.area() - c.area();
if (fabs(ds) < Shape::eps) return "Rectangle is equal to Circle";
return ds < 0 ? "Rectangle < Circle" : "Circle < Rectangle";
}

string compare_area(const Circle& c, const Rectangle& r) {
const auto ds = r.area() - c.area();
if (fabs(ds) < Shape::eps) return "Circle is equal to Rectangle";
return ds < 0 ? "Rectangle < Circle" : "Circle < Rectangle";
}

int main() {
Rectangle r1(2, 3);
Circle c(1.5);
cout << compare_area(r1, c) << '\n';
cout << compare_area(c, r1) << '\n';
Rectangle r2(3, 4);
cout << compare_area(r2, c) << '\n';
cout << compare_area(c, r2) << '\n';
Rectangle r3(2, 3.534291735288517);
cout << compare_area(r3, c) << '\n';
cout << compare_area(c, r3) << '\n';
}
 
Сверху Снизу