This repository has been archived on 2026-07-28. You can view files and clone it. You cannot open issues or pull requests or push a commit.
Files
college-work/Задания по C и C++/cpp/2.cpp
T

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;
}