84 lines
No EOL
2.1 KiB
C++
84 lines
No EOL
2.1 KiB
C++
/*
|
||
Это программа на языке C++, для компиляции:
|
||
g++ 01point.cpp
|
||
|
||
Та же самая точка, но на языке C++
|
||
|
||
В этом файле была видоизменена программа из предыдущего файла.
|
||
Были использованы перегруженные операторы для более удобного сложения и умножения точек.
|
||
Также была использована ссылка вместо указателя в функции pointNormalize.
|
||
*/
|
||
|
||
#include <iostream>
|
||
#include <iomanip>
|
||
#include <cmath>
|
||
using std::cout, std::endl;
|
||
|
||
|
||
struct Point
|
||
{
|
||
float x, y;
|
||
};
|
||
|
||
void pointPrint(Point a)
|
||
{
|
||
cout << std::setprecision(2) << "(" << a.x << ", " << a.y << ")" << endl;
|
||
}
|
||
|
||
Point operator+(Point a, Point b)
|
||
{
|
||
Point result = {a.x + b.x, a.y + b.y};
|
||
return result;
|
||
}
|
||
|
||
float pointNorm(Point a)
|
||
{
|
||
return std::sqrt(a.x * a.x + a.y * a.y);
|
||
}
|
||
|
||
Point operator*(Point a, float k)
|
||
{
|
||
Point result = {k * a.x, k * a.y};
|
||
return result;
|
||
}
|
||
|
||
void pointNormalize(Point& a)
|
||
{
|
||
float norm = pointNorm(a);
|
||
a.x /= norm;
|
||
a.y /= norm;
|
||
}
|
||
|
||
|
||
|
||
|
||
int main()
|
||
{
|
||
Point a = {7.2, 3.1};
|
||
Point b = {-4.6, 2.4};
|
||
|
||
pointPrint(a);
|
||
pointPrint(b);
|
||
|
||
Point c = a + b;
|
||
pointPrint(c);
|
||
|
||
pointPrint(c * 1.5f);
|
||
|
||
pointNormalize(c);
|
||
pointPrint(c);
|
||
}
|
||
|
||
|
||
|
||
|
||
/*
|
||
Задача:
|
||
|
||
1) Инкапсулируйте функции operator+, pointNorm, operator* и pointNormalize
|
||
Их нужно сделать методами, то есть положить внутрь структуры Point
|
||
Не забудьте сделать соответствующие методы константными
|
||
|
||
2) Можно сделать то же самое с функцией printPoint, а можно поступить по-другому
|
||
и перегрузить оператор << для типов std::ostream и Point
|
||
*/ |