Archived
Работы по программированию
This commit is contained in:
Executable
+108
@@ -0,0 +1,108 @@
|
||||
/*
|
||||
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;
|
||||
}
|
||||
Reference in New Issue
Block a user