This repository has been archived on 2023-05-13. You can view files and clone it, but cannot push or open issues or pull requests.
mipt_cpp/seminar02_encapsulation/classroom_tasks/code/1point/01point.cpp
2022-09-14 19:05:27 +03:00

84 lines
No EOL
2.1 KiB
C++
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/*
Это программа на языке 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
*/