/* 2.Разработать класс Rectangle, обладающий следующим функционалом: - задание сторон вручную/ из файла - задание сторон координатами вручную/ из файла - вычисление площади – вывод на экран / в файл - вычисление периметра – вывод на экран / в файл - вывод на экран / в файл: a = …, b = …., P =…, S = … или (x1, y1) = …, (x2, y2) = …, P = …, S = … */ #include #include #include #include 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 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; }