#include <iostream>
using namespace std;

struct Vector {
	float x;
	float y;
};

// Единият начин е да върнем резултата като нов вектор.
Vector calculatePosition(const Vector &pos, const Vector &dir, float coef) {

	Vector result = { pos.x + coef * dir.x, pos.y + coef * dir.y };
	return result;
}

// Можем да върнем резултата в избран от потребителя вектор,
// което спестява копиранията по време на връщане на стойността.
void calculatePosition(const Vector &pos, const Vector &dir, float coef, Vector &newPos) {
	newPos.x = pos.x + coef * dir.x;
	newPos.y = pos.y + coef * dir.y;
}

// Можем да върнем повече от един резултата, като използваме
// параметри референции (или указатели).
void calculatePosition(const Vector &pos, const Vector &dir, float coef, float &newx, float &newy) {
	newx = pos.x + coef * dir.x;
	newy = pos.y + coef * dir.y;
}

void printVector(const Vector &v) {
	cout << "(" << v.x << ", " << v.y << ")";
}

int main() {

	Vector pos = {0, 0};
	Vector dir = {0.27, 3.14};
	float coef = 3.98;
	
	Vector newPos = calculatePosition(pos, dir, coef);

	cout << endl << "New position: ";
	printVector(newPos);
	cout << endl;
	
	calculatePosition(pos, dir, coef * 2, newPos);
	cout << endl << "New position: ";
	printVector(newPos);
	cout << endl;

	float newx, newy;
	calculatePosition(pos, dir, coef * 3, newx, newy);
	cout << endl << "New coordinates: "
		 << "x = " << newx
		 << "; y = " << newy << endl;

	return 0;
}
