Archived
108 lines
3.2 KiB
C++
Executable File
108 lines
3.2 KiB
C++
Executable File
/*
|
|
2.Разработать класс Rectangle, обладающий следующим функционалом:
|
|
- задание сторон вручную/ из файла
|
|
- задание сторон координатами вручную/ из файла
|
|
- вычисление площади – вывод на экран / в файл
|
|
- вычисление периметра – вывод на экран / в файл
|
|
- вывод на экран / в файл:
|
|
a = …, b = …., P =…, S = …
|
|
или
|
|
(x1, y1) = …, (x2, y2) = …, P = …, S = …
|
|
*/
|
|
#include <cmath>
|
|
#include <fstream>
|
|
#include <iostream>
|
|
#include <vector>
|
|
|
|
class Rectangle {
|
|
private:
|
|
std::ifstream _file_in;
|
|
std::ofstream _file_out;
|
|
|
|
struct RectangleData {
|
|
int width, height;
|
|
int perimetr, area;
|
|
int x1, y1;
|
|
int x2, y2;
|
|
} _rectangleData;
|
|
|
|
bool _isCoordinate;
|
|
|
|
void _init(const std::string filename_input,
|
|
const std::string filename_output) {
|
|
_file_in.open(filename_input);
|
|
_file_out.open(filename_output);
|
|
|
|
if (!_file_in.is_open() || !_file_out.is_open()) {
|
|
std::cerr << "Ошибка открытия файла" << std::endl;
|
|
exit(1);
|
|
}
|
|
}
|
|
|
|
void _setWidthHeightfromXY() {
|
|
_rectangleData.width = abs(_rectangleData.y2 - _rectangleData.y1);
|
|
_rectangleData.height = abs(_rectangleData.x2 - _rectangleData.x1);
|
|
}
|
|
|
|
void _setPerimetr() {
|
|
_rectangleData.perimetr =
|
|
(_rectangleData.width + _rectangleData.height) * 2;
|
|
}
|
|
|
|
void _setArea() {
|
|
_rectangleData.area = _rectangleData.width * _rectangleData.height;
|
|
}
|
|
|
|
public:
|
|
Rectangle(const std::string filename_input = "input.txt",
|
|
const std::string filename_output = "output.txt") {
|
|
_init(filename_input, filename_output);
|
|
|
|
std::vector<int> buffer;
|
|
|
|
int number;
|
|
while (_file_in >> number) {
|
|
buffer.push_back(number);
|
|
}
|
|
|
|
const int length = buffer.size();
|
|
_isCoordinate = (length == 4) ? true : false;
|
|
|
|
if (_isCoordinate) {
|
|
_rectangleData.x1 = buffer[0];
|
|
_rectangleData.y1 = buffer[1];
|
|
_rectangleData.x2 = buffer[2];
|
|
_rectangleData.y2 = buffer[3];
|
|
|
|
_setWidthHeightfromXY();
|
|
} else {
|
|
_rectangleData.width = buffer[0];
|
|
_rectangleData.height = buffer[1];
|
|
}
|
|
|
|
_setPerimetr();
|
|
_setArea();
|
|
}
|
|
|
|
void writeData() {
|
|
if (_isCoordinate) {
|
|
_file_out << "(x1, y1) = (" << _rectangleData.x1 << ", "
|
|
<< _rectangleData.y1 << "), (x2, y2) = ("
|
|
<< _rectangleData.x2 << ", " << _rectangleData.y2 << ")";
|
|
} else {
|
|
_file_out << "a = " << _rectangleData.width
|
|
<< ", b = " << _rectangleData.height;
|
|
}
|
|
|
|
_file_out << ", "
|
|
<< "P = " << _rectangleData.perimetr << ", "
|
|
<< "S = " << _rectangleData.area;
|
|
}
|
|
};
|
|
|
|
int main() {
|
|
Rectangle rect;
|
|
rect.writeData();
|
|
|
|
return 0;
|
|
} |