#include #include #include #include #include #include #include double scalar(std::vector const& u, std::vector const& v) { return std::inner_product(std::begin(u), std::end(u), std::begin(v), 0.0); } double length(std::vector const& v) { return std::sqrt(scalar(v, v)); } int main() { int n { }; std::cout << "Enter dimensions: "; std::cin >> n; std::vector u { }; std::vector v { }; std::cout << "Enter u: "; std::copy_n(std::istream_iterator { std::cin }, n, std::back_inserter(u)); std::cout << "Enter v: "; std::copy_n(std::istream_iterator { std::cin }, n, std::back_inserter(v)); std::cout << "Their scalar product is: " << scalar(u, v) << std::endl; double const ulen { length(u) }; double const vlen { length(v) }; std::transform(std::begin(u), std::end(u), std::begin(u), [ulen](double e) { return e / ulen; }); std::transform(std::begin(v), std::end(v), std::begin(v), [vlen](double e) { return e / vlen; }); std::cout << "u = [ "; std::copy(std::begin(u), std::end(u), std::ostream_iterator{ std::cout, " " }); std::cout << "]" << std::endl << "v = [ "; std::copy(std::begin(v), std::end(v), std::ostream_iterator{ std::cout, " " }); std::cout << "]" << std::endl; }